diff --git a/.github/workflows/publish-on-release.yml b/.github/workflows/publish-on-release.yml new file mode 100644 index 000000000..2ae8b681a --- /dev/null +++ b/.github/workflows/publish-on-release.yml @@ -0,0 +1,187 @@ +name: curseforge-modrinth-publish + +run-name: Posting jars on Curseforge and Modrinth + +on: + release: + types: [published] + +jobs: + publish: + runs-on: ubuntu-22.04 + steps: + - name: fetching asset paths + id: assets + shell: bash + run: | + echo Attachments + fileNames=(${{ github.event.release.assets[0].name }} ${{ github.event.release.assets[1].name }} ${{ github.event.release.assets[2].name }}) + filePaths=(${{ github.event.release.assets[0].browser_download_url }} ${{ github.event.release.assets[1].browser_download_url }} ${{ github.event.release.assets[2].browser_download_url }}) + + for i in 0 1 2 + do + echo "${fileNames[i]}" + echo "${filePaths[i]}" + if [ -n "${filePaths[i]}" ]; then + curl -L -o "./${fileNames[i]}" "${filePaths[i]}" + fi + + if [[ "${fileNames[i]}" == *"fabric"* ]]; then + echo "FABRIC_FILE_NAME=${fileNames[i]}" >> $GITHUB_OUTPUT + echo "FABRIC_FILE_PATH=./${fileNames[i]}" >> $GITHUB_OUTPUT + fi + if [[ "${fileNames[i]}" == *"forge"* ]]; then + echo "FORGE_FILE_NAME=${fileNames[i]}" >> $GITHUB_OUTPUT + echo "FORGE_FILE_PATH=./${fileNames[i]}" >> $GITHUB_OUTPUT + fi + if [[ "${fileNames[i]}" == *"quilt"* ]]; then + echo "QUILT_FILE_NAME=${fileNames[i]}" >> $GITHUB_OUTPUT + echo "QUILT_FILE_PATH=./${fileNames[i]}" >> $GITHUB_OUTPUT + fi + done + ls -l + - run: echo fabric is ${{ steps.assets.outputs.FABRIC_FILE_NAME }} + - run: echo forge is ${{ steps.assets.outputs.FORGE_FILE_NAME }} + - run: echo quilt is ${{ steps.assets.outputs.QUILT_FILE_NAME }} + + - name: getting version info from files + id: version + shell: bash + run: | + file="" + if [ -n "${{ steps.assets.outputs.FABRIC_FILE_NAME }}" ]; then + file="${{ steps.assets.outputs.FABRIC_FILE_NAME }}" + elif [ -n "${{ steps.assets.outputs.FORGE_FILE_NAME }}" ]; then + file="${{ steps.assets.outputs.FORGE_FILE_NAME }}" + else + file="${{ steps.assets.outputs.QUILT_FILE_NAME }}" + fi + echo $file + + # save the current IFS value + OLDIFS=$IFS + # set the IFS to the delimiter ("-") + IFS="-" + # split the string into an array, limiting it to a maximum of 3 fields + array=($file) + # restore the IFS value + IFS=$OLDIFS + + # alphas or beats should be included in the version + if [ ${array[3]:0:1} = "a" ] || [ ${array[3]:0:1} = "b" ]; then + array[2]=${array[2]}-${array[3]} + fi + + release_type="release" + if [ ${array[3]:0:1} = "a" ]; then + release_type="alpha" + elif [ ${array[3]:0:1} = "b" ]; then + release_type="beta" + fi + + echo release type: ${release_type} + echo "RELEASE_TYPE=${release_type}" >> $GITHUB_OUTPUT + + mc_version=${array[1]} + + # mod loaders + loaders_fabric=fabric + # check if there is a quilt specific jar + if [ -z "${{ steps.assets.outputs.QUILT_FILE_NAME }}" ]; then + loaders_fabric="${loaders_fabric} quilt" + else + loaders_quilt="quilt" + fi + loaders_forge="forge" + + echo mc version: $mc_version + echo "MC_VERSION=$mc_version" >> $GITHUB_OUTPUT + + echo loaders fabric: ${loaders_fabric} + echo "LOADERS_FABRIC=${loaders_fabric}" >> $GITHUB_OUTPUT + + echo loaders forge: ${loaders_forge} + echo "LOADERS_FORGE=${loaders_forge}" >> $GITHUB_OUTPUT + + echo loaders quilt: ${loaders_quilt} + echo "LOADERS_QUILT=${loaders_quilt}" >> $GITHUB_OUTPUT + + mod_name="${array[0]^} $mc_version-${array[2]}" + echo file name fabric: "${mod_name}-fabric" + echo "VERSION_NAME_FABRIC=${mod_name}-fabric" >> $GITHUB_OUTPUT + echo file name forge: "${mod_name}-forge" + echo "VERSION_NAME_FORGE=${mod_name}-forge" >> $GITHUB_OUTPUT + echo file name quilt: "${mod_name}-quilt" + echo "VERSION_NAME_QUILT=${mod_name}-quilt" >> $GITHUB_OUTPUT + + # modrinth mod versions + base_version="$mc_version-${array[2]}" + echo md version fabric: "${base_version}-fabric" + echo "MD_VERSION_FABRIC=${base_version}-fabric" >> $GITHUB_OUTPUT + echo md version forge: "${base_version}-forge" + echo "MD_VERSION_FORGE=${base_version}-forge" >> $GITHUB_OUTPUT + echo md version fquilt: "${base_version}-quilt" + echo "MD_VERSION_QUILT=${base_version}-quilt" >> $GITHUB_OUTPUT + + - run: echo Minecraft target version is ${{ steps.version.outputs.MC_VERSION }} + - run: echo release type is ${{ steps.version.outputs.RELEASE_TYPE }} + + - name: publish fabric + if: steps.assets.outputs.FABRIC_FILE_PATH != '' + uses: Kir-Antipov/mc-publish@v3.2 + with: + modrinth-id: wGoQDPN5 + modrinth-token: ${{ secrets.MODRINTH_TOKEN }} + modrinth-featured: false + + curseforge-id: 667903 + curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} + + files-primary: ${{ steps.assets.outputs.FABRIC_FILE_PATH }} + + name: "${{ steps.version.outputs.VERSION_NAME_FABRIC }}" + version: "${{ steps.version.outputs.MD_VERSION_FABRIC }}" + version-type: "${{ steps.version.outputs.RELEASE_TYPE }}" + + loaders: "${{ steps.version.outputs.LOADERS_FABRIC }}" + game-versions: "${{ steps.version.outputs.MC_VERSION }}" + + - name: publish forge + if: steps.assets.outputs.FORGE_FILE_PATH != '' + uses: Kir-Antipov/mc-publish@v3.2 + with: + modrinth-id: wGoQDPN5 + modrinth-token: ${{ secrets.MODRINTH_TOKEN }} + modrinth-featured: false + + curseforge-id: 667903 + curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} + + files-primary: ${{ steps.assets.outputs.FORGE_FILE_PATH }} + + name: "${{ steps.version.outputs.VERSION_NAME_FORGE }}" + version: "${{ steps.version.outputs.MD_VERSION_FORGE }}" + version-type: "${{ steps.version.outputs.RELEASE_TYPE }}" + + loaders: "${{ steps.version.outputs.LOADERS_FORGE}}" + game-versions: "${{ steps.version.outputs.MC_VERSION }}" + + - name: publish quilt + if: steps.assets.outputs.QUILT_FILE_PATH != '' + uses: Kir-Antipov/mc-publish@v3.2 + with: + modrinth-id: wGoQDPN5 + modrinth-token: ${{ secrets.MODRINTH_TOKEN }} + modrinth-featured: false + + curseforge-id: 667903 + curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} + + files-primary: ${{ steps.assets.outputs.QUILT_FILE_PATH }} + + name: "${{ steps.version.outputs.VERSION_NAME_QUILT }}" + version: "${{ steps.version.outputs.MD_VERSION_QUILT}}" + version-type: "${{ steps.version.outputs.RELEASE_TYPE }}" + + loaders: "${{ steps.version.outputs.LOADERS_QUILT}}" + game-versions: "${{ steps.version.outputs.MC_VERSION }}" diff --git a/README.md b/README.md index 887379b41..74e2bece5 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,27 @@ # Vivecraft Mod (of Vivecraft fabric) -![Lines of code](https://img.shields.io/tokei/lines/github/questcraftplusplus/vivecraftmod?style=flat) +A port of [Vivecraft](https://www.vivecraft.org) to Fabric/Quilt and back to Forge.\ +This is an official continuation of the project, using mixin's instead of patches.\ +This means we could use a multiloader setup to develop on Fabric, Forge and Quilt at the same time.\ +It also removed Optifine as a dependency, so mod compatibility *should* be better as well. -A port of https://github.com/jrbudda/Vivecraft_118 to fabric (and back to forge). +Curseforge: [![DOWNLOAD](https://cf.way2muchnoise.eu/title/667903.svg)](https://www.curseforge.com/minecraft/mc-mods/vivecraft)\ +Modrinth: [![Modrinth](https://img.shields.io/modrinth/dt/vivecraft)](https://modrinth.com/mod/vivecraft) -# Current status +Since this version no longer has Optifine, we recommend you use Sodium (and the rest of the family) on Fabric/Quilt (and the unofficial ports on Forge) to maximize performance. For shaders you can use Iris on Fabric/Quilt (and the unofficial ports on Forge). + +## Mod compatibility +Mod compatibility is important to us. If you find any issues, don't be afraid to open an issue. Be sure to check if it isn't already known though, so we don't have duplicates. + +## Current status - [x] Loaded in game - [x] Moving in game - [x] Playable (with some bugs and missing features) - [x] Fully playable - [x] Sodium support -- [ ] Iris support +- [X] Iris support +- [ ] In game VR switching +- [ ] API +- [ ] OpenXR support + +[Vivecraft Discord server](https://discord.gg/2x3QCk8qa9)\ +[Development Discord server](https://discord.gg/jYyyv7zhSW) diff --git a/build.gradle b/build.gradle index 9f1e06ee3..236a62322 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,7 @@ plugins { id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "0.12.0-SNAPSHOT" apply false + id "dev.architectury.loom" version "1.0-SNAPSHOT" apply false + id 'io.github.juuxel.loom-quiltflower' version '1.8.0' apply false } architectury { @@ -8,7 +9,13 @@ architectury { } subprojects { + apply plugin: "java" apply plugin: "dev.architectury.loom" + apply plugin: "io.github.juuxel.loom-quiltflower" + + archivesBaseName = rootProject.archives_base_name + version = rootProject.minecraft_version + "-" + rootProject.mod_version + group = rootProject.maven_group loom { silentMojangMappingsLicense() @@ -20,42 +27,94 @@ subprojects { mappings loom.officialMojangMappings() // The following line declares the yarn mappings you may select this one as well. // mappings "net.fabricmc:yarn:1.18.2+build.4:v2" + implementation("org.lwjgl:lwjgl-openvr:3.2.2") + implementation("org.lwjgl:lwjgl-openvr:3.2.2:natives-linux") + implementation("org.lwjgl:lwjgl-openvr:3.2.2:natives-macos") + implementation("org.lwjgl:lwjgl-openvr:3.2.2:natives-windows") + } + + tasks.withType(JavaCompile) { + options.encoding = "UTF-8" + options.release = 17 + } + + java { + withSourcesJar() + } + + task copyJarToMain(type: Copy) { + duplicatesStrategy = "include" + if (project.name != "common") { + from remapJar + into "../build/libs" + } + } + + remapJar { + // after remap, copy the final jsr to the main /build/libs folder + finalizedBy copyJarToMain } } allprojects { - apply plugin: "java" apply plugin: "architectury-plugin" apply plugin: "maven-publish" - archivesBaseName = rootProject.archives_base_name - version = rootProject.minecraft_version + "-" + rootProject.mod_version - group = rootProject.maven_group - repositories { // Add repositories to retrieve artifacts from in here. // You should only use this when depending on other mods because // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. // See https://docs.gradle.org/current/userguide/declaring_repositories.html // for more information about repositories. - maven { - name = "Modrinth" - url = "https://api.modrinth.com/maven" - content { + + maven { url = 'https://mvnrepository.com/' } + maven { url 'https://jitpack.io' } + exclusiveContent { + forRepository { + maven { + name = "Modrinth" + url = "https://api.modrinth.com/maven" + } + } + filter { includeGroup "maven.modrinth" } } + exclusiveContent { + forRepository { + maven { + name = "Ladysnake Mods" + url = "https://maven.ladysnake.org/releases" + } + } + filter { + includeGroup 'io.github.ladysnake' + includeGroup 'org.ladysnake' + includeGroupByRegex 'dev\\.onyxstudios.*' + } + } + + exclusiveContent { + forRepository { + maven { + name = "fabricmc" + url = "https://maven.fabricmc.net/" + } + } + filter { + includeGroup "net.fabricmc" + includeGroup "fabric-loom" + } + } + maven { url = "https://hephaestus.dev/release" } - maven { url = "https://api.modrinth.com/maven" } maven { url = "https://cursemaven.com" } maven { url = "https://maven.parchmentmc.org" } - maven { url = "https://maven.fabricmc.net/" } maven { url = "https://maven.tterrag.com/" } maven { url = "https://storage.googleapis.com/devan-maven/" } maven { url = "https://maven.shedaniel.me/" } maven { url = "https://aperlambda.github.io/maven" } - maven { url = "https://ladysnake.jfrog.io/artifactory/mods" } maven { url = "https://maven.kotlindiscord.com/repository/terraformers/" } maven { url = "https://mvn.devos.one/releases/" } maven { url = "https://mvn.devos.one/snapshots/" } @@ -64,20 +123,33 @@ allprojects { maven { url = "https://maven.gegy.dev" } maven { url = "https://dvs1.progwml6.com/files/maven/" } maven { url = "https://modmaven.dev" } - maven { - url = "https://maven.jamieswhiteshirt.com/libs-release" - content { - includeGroup("com.jamieswhiteshirt") + exclusiveContent { + forRepository { + maven { + name = "Ladysnake Mods" + url = "https://maven.jamieswhiteshirt.com/libs-release" + } + } + filter { + includeGroup "com.jamieswhiteshirt" } } - } - - tasks.withType(JavaCompile) { - options.encoding = "UTF-8" - options.release = 17 - } - java { - withSourcesJar() + exclusiveContent { + forRepository { + ivy { + name = "Discord" + url = "https://cdn.discordapp.com/attachments/" + patternLayout { + artifact '/[organisation]/[module]/[revision].[ext]' + } + metadataSources { artifact() } + } + } + filter { + // discords are always just numbers + includeGroupByRegex "^\\d*\$" + } + } } } diff --git a/common/build.gradle b/common/build.gradle index b9b772b0e..3b38881b2 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -11,25 +11,60 @@ dependencies { // Do NOT use other classes from fabric loader modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" + modApi("dev.architectury:architectury-fabric:${rootProject.architectury_version}") + + // for sodium compat modCompileOnly "maven.modrinth:sodium:mc1.18.2-0.4.1" - modCompileOnly "maven.modrinth:iris:1.18.x-v1.3.1" - modCompileOnly "maven.modrinth:lithium:mc1.18.2-0.7.10" - modCompileOnly "maven.modrinth:indium:1.0.7+mc1.18.2" - modCompileOnly "maven.modrinth:create-fabric:0.5.0.i-960+1.18.2" - modCompileOnly "maven.modrinth:roughly-enough-items:8.3.529+fabric" + modCompileOnly "maven.modrinth:sodium:mc1.19.3-0.4.9" + modCompileOnly "883067831485366304:1076634925077364786:sodium-fabric-mc1.19.3-0.4.10rev.c131708-dirty:jar" + modCompileOnly "maven.modrinth:rubidium:0.5.6" + - modCompileOnly("maven.modrinth:rubidium:0.5.3a") + // for iris compat + modCompileOnly "maven.modrinth:iris:1.6.5+1.18.2" - //include("org.lwjgl:lwjgl-ovr:3.2.2:natives-windows") - //include("org.lwjgl:lwjgl-opengl:3.2.2:natives-windows") - //include("org.lwjgl:lwjgl-jemalloc:3.2.2:natives-windows") - //include("org.lwjgl:lwjgl:3.2.2:natives-windows") - //include("org.lwjgl:lwjgl-glfw:3.2.2:natives-windows") - //include("org.lwjgl:lwjgl-stb:3.2.2:natives-windows") - //include("org.lwjgl:lwjgl-openal:3.2.2:natives-windows") + // for REI compat + modCompileOnly "me.shedaniel:RoughlyEnoughItems-fabric:8.3.618" + // for Pehkui compat + modApi("com.github.Virtuoel:Pehkui:3.7.7", { exclude group: "net.fabricmc.fabric-api" }) + // other mods + // modCompileOnly("com.simibubi.create:create-fabric-1.18.2:0.5.0.i-1016+1.18.2") + modCompileOnly "maven.modrinth:lithium:mc1.18.2-0.10.3" + modCompileOnly "maven.modrinth:indium:1.0.7+mc1.18.2" + /* + // for immersive portals compat + modCompileOnly ('com.github.qouteall.ImmersivePortalsMod:imm_ptl_core:v1.4.11-1.18'){ //temp immersiveportals + exclude(group: "net.fabricmc.fabric-api") + transitive(false) + } + modCompileOnly ('com.github.qouteall.ImmersivePortalsMod:q_misc_util:v1.4.11-1.18'){ //temp immersiveportals + exclude(group: "net.fabricmc.fabric-api") + transitive(false) + } + */ + + // needed dependencies + compileOnly("com.google.code.findbugs:jsr305:3.0.2") + compileOnly('com.electronwill.night-config:toml:3.6.6') + + //LaunchPopup + implementation 'com.github.fayer3:LaunchPopup:master-SNAPSHOT' + +} +// extract the LaunchPopup classes +jar { + from { + configurations + .runtimeClasspath + .collect { + if(it.name.startsWith("LaunchPopup")) { + zipTree(it) + } + } + } } publishing { diff --git a/common/src/main/java/jopenvr/AppOverrideKeys_t.java b/common/src/main/java/jopenvr/AppOverrideKeys_t.java deleted file mode 100644 index 86f0c054c..000000000 --- a/common/src/main/java/jopenvr/AppOverrideKeys_t.java +++ /dev/null @@ -1,41 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class AppOverrideKeys_t extends Structure -{ - public Pointer pchKey; - public Pointer pchValue; - - public AppOverrideKeys_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("pchKey", "pchValue"); - } - - public AppOverrideKeys_t(Pointer pchKey, Pointer pchValue) - { - this.pchKey = pchKey; - this.pchValue = pchValue; - } - - public AppOverrideKeys_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends AppOverrideKeys_t implements Structure.ByReference - { - } - - public static class ByValue extends AppOverrideKeys_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/COpenVRContext.java b/common/src/main/java/jopenvr/COpenVRContext.java deleted file mode 100644 index 52fa0a920..000000000 --- a/common/src/main/java/jopenvr/COpenVRContext.java +++ /dev/null @@ -1,51 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; -import com.sun.jna.ptr.IntByReference; - -import java.util.Arrays; -import java.util.List; - -public class COpenVRContext extends Structure -{ - public IntByReference m_pVRSystem; - public IntByReference m_pVRChaperone; - public IntByReference m_pVRChaperoneSetup; - public IntByReference m_pVRCompositor; - public IntByReference m_pVROverlay; - public IntByReference m_pVRResources; - public IntByReference m_pVRRenderModels; - public IntByReference m_pVRExtendedDisplay; - public IntByReference m_pVRSettings; - public IntByReference m_pVRApplications; - public IntByReference m_pVRTrackedCamera; - public IntByReference m_pVRScreenshots; - public IntByReference m_pVRDriverManager; - public IntByReference m_pVRInput; - public IntByReference m_pVRIOBuffer; - public IntByReference m_pVRSpatialAnchors; - public IntByReference m_pVRNotifications; - - public COpenVRContext() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("m_pVRSystem", "m_pVRChaperone", "m_pVRChaperoneSetup", "m_pVRCompositor", "m_pVROverlay", "m_pVRResources", "m_pVRRenderModels", "m_pVRExtendedDisplay", "m_pVRSettings", "m_pVRApplications", "m_pVRTrackedCamera", "m_pVRScreenshots", "m_pVRDriverManager", "m_pVRInput", "m_pVRIOBuffer", "m_pVRSpatialAnchors", "m_pVRNotifications"); - } - - public COpenVRContext(Pointer peer) - { - super(peer); - } - - public static class ByReference extends COpenVRContext implements Structure.ByReference - { - } - - public static class ByValue extends COpenVRContext implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/CVRSettingHelper.java b/common/src/main/java/jopenvr/CVRSettingHelper.java deleted file mode 100644 index 589e867a1..000000000 --- a/common/src/main/java/jopenvr/CVRSettingHelper.java +++ /dev/null @@ -1,40 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; -import com.sun.jna.ptr.IntByReference; - -import java.util.Arrays; -import java.util.List; - -public class CVRSettingHelper extends Structure -{ - public IntByReference m_pSettings; - - public CVRSettingHelper() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("m_pSettings"); - } - - public CVRSettingHelper(IntByReference m_pSettings) - { - this.m_pSettings = m_pSettings; - } - - public CVRSettingHelper(Pointer peer) - { - super(peer); - } - - public static class ByReference extends CVRSettingHelper implements Structure.ByReference - { - } - - public static class ByValue extends CVRSettingHelper implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/CameraVideoStreamFrameHeader_t.java b/common/src/main/java/jopenvr/CameraVideoStreamFrameHeader_t.java deleted file mode 100644 index 0b76fdde3..000000000 --- a/common/src/main/java/jopenvr/CameraVideoStreamFrameHeader_t.java +++ /dev/null @@ -1,51 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class CameraVideoStreamFrameHeader_t extends Structure -{ - public int eFrameType; - public int nWidth; - public int nHeight; - public int nBytesPerPixel; - public int nFrameSequence; - public TrackedDevicePose_t standingTrackedDevicePose; - public long ulFrameExposureTime; - - public CameraVideoStreamFrameHeader_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("eFrameType", "nWidth", "nHeight", "nBytesPerPixel", "nFrameSequence", "standingTrackedDevicePose", "ulFrameExposureTime"); - } - - public CameraVideoStreamFrameHeader_t(int eFrameType, int nWidth, int nHeight, int nBytesPerPixel, int nFrameSequence, TrackedDevicePose_t standingTrackedDevicePose, long ulFrameExposureTime) - { - this.eFrameType = eFrameType; - this.nWidth = nWidth; - this.nHeight = nHeight; - this.nBytesPerPixel = nBytesPerPixel; - this.nFrameSequence = nFrameSequence; - this.standingTrackedDevicePose = standingTrackedDevicePose; - this.ulFrameExposureTime = ulFrameExposureTime; - } - - public CameraVideoStreamFrameHeader_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends CameraVideoStreamFrameHeader_t implements Structure.ByReference - { - } - - public static class ByValue extends CameraVideoStreamFrameHeader_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/CameraVideoStreamFrame_t.java b/common/src/main/java/jopenvr/CameraVideoStreamFrame_t.java deleted file mode 100644 index 1e078d43f..000000000 --- a/common/src/main/java/jopenvr/CameraVideoStreamFrame_t.java +++ /dev/null @@ -1,52 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class CameraVideoStreamFrame_t extends Structure -{ - public int m_nStreamFormat; - public int m_nWidth; - public int m_nHeight; - public int m_nImageDataSize; - public int m_nFrameSequence; - public int m_nISPFrameTimeStamp; - public int m_nISPReferenceTimeStamp; - public int m_nSyncCounter; - public int m_nCamSyncEvents; - public int m_nExposureTime; - public int m_nBufferIndex; - public int m_nBufferCount; - public double m_flFrameElapsedTime; - public double m_flFrameCaptureTime; - public long m_nFrameCaptureTicks; - public byte m_bPoseIsValid; - public HmdMatrix34_t m_matDeviceToAbsoluteTracking; - public float[] m_Pad = new float[4]; - public Pointer m_pImageData; - - public CameraVideoStreamFrame_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("m_nStreamFormat", "m_nWidth", "m_nHeight", "m_nImageDataSize", "m_nFrameSequence", "m_nISPFrameTimeStamp", "m_nISPReferenceTimeStamp", "m_nSyncCounter", "m_nCamSyncEvents", "m_nExposureTime", "m_nBufferIndex", "m_nBufferCount", "m_flFrameElapsedTime", "m_flFrameCaptureTime", "m_nFrameCaptureTicks", "m_bPoseIsValid", "m_matDeviceToAbsoluteTracking", "m_Pad", "m_pImageData"); - } - - public CameraVideoStreamFrame_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends CameraVideoStreamFrame_t implements Structure.ByReference - { - } - - public static class ByValue extends CameraVideoStreamFrame_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/Compositor_CumulativeStats.java b/common/src/main/java/jopenvr/Compositor_CumulativeStats.java deleted file mode 100644 index bb89483a9..000000000 --- a/common/src/main/java/jopenvr/Compositor_CumulativeStats.java +++ /dev/null @@ -1,48 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class Compositor_CumulativeStats extends Structure -{ - public int m_nPid; - public int m_nNumFramePresents; - public int m_nNumDroppedFrames; - public int m_nNumReprojectedFrames; - public int m_nNumFramePresentsOnStartup; - public int m_nNumDroppedFramesOnStartup; - public int m_nNumReprojectedFramesOnStartup; - public int m_nNumLoading; - public int m_nNumFramePresentsLoading; - public int m_nNumDroppedFramesLoading; - public int m_nNumReprojectedFramesLoading; - public int m_nNumTimedOut; - public int m_nNumFramePresentsTimedOut; - public int m_nNumDroppedFramesTimedOut; - public int m_nNumReprojectedFramesTimedOut; - - public Compositor_CumulativeStats() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("m_nPid", "m_nNumFramePresents", "m_nNumDroppedFrames", "m_nNumReprojectedFrames", "m_nNumFramePresentsOnStartup", "m_nNumDroppedFramesOnStartup", "m_nNumReprojectedFramesOnStartup", "m_nNumLoading", "m_nNumFramePresentsLoading", "m_nNumDroppedFramesLoading", "m_nNumReprojectedFramesLoading", "m_nNumTimedOut", "m_nNumFramePresentsTimedOut", "m_nNumDroppedFramesTimedOut", "m_nNumReprojectedFramesTimedOut"); - } - - public Compositor_CumulativeStats(Pointer peer) - { - super(peer); - } - - public static class ByReference extends Compositor_CumulativeStats implements Structure.ByReference - { - } - - public static class ByValue extends Compositor_CumulativeStats implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/Compositor_FrameTiming.java b/common/src/main/java/jopenvr/Compositor_FrameTiming.java deleted file mode 100644 index 7c0c2a201..000000000 --- a/common/src/main/java/jopenvr/Compositor_FrameTiming.java +++ /dev/null @@ -1,59 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class Compositor_FrameTiming extends Structure -{ - public int m_nSize; - public int m_nFrameIndex; - public int m_nNumFramePresents; - public int m_nNumMisPresented; - public int m_nNumDroppedFrames; - public int m_nReprojectionFlags; - public double m_flSystemTimeInSeconds; - public float m_flPreSubmitGpuMs; - public float m_flPostSubmitGpuMs; - public float m_flTotalRenderGpuMs; - public float m_flCompositorRenderGpuMs; - public float m_flCompositorRenderCpuMs; - public float m_flCompositorIdleCpuMs; - public float m_flClientFrameIntervalMs; - public float m_flPresentCallCpuMs; - public float m_flWaitForPresentCpuMs; - public float m_flSubmitFrameMs; - public float m_flWaitGetPosesCalledMs; - public float m_flNewPosesReadyMs; - public float m_flNewFrameReadyMs; - public float m_flCompositorUpdateStartMs; - public float m_flCompositorUpdateEndMs; - public float m_flCompositorRenderStartMs; - public TrackedDevicePose_t m_HmdPose; - public int m_nNumVSyncsReadyForUse; - public int m_nNumVSyncsToFirstView; - - public Compositor_FrameTiming() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("m_nSize", "m_nFrameIndex", "m_nNumFramePresents", "m_nNumMisPresented", "m_nNumDroppedFrames", "m_nReprojectionFlags", "m_flSystemTimeInSeconds", "m_flPreSubmitGpuMs", "m_flPostSubmitGpuMs", "m_flTotalRenderGpuMs", "m_flCompositorRenderGpuMs", "m_flCompositorRenderCpuMs", "m_flCompositorIdleCpuMs", "m_flClientFrameIntervalMs", "m_flPresentCallCpuMs", "m_flWaitForPresentCpuMs", "m_flSubmitFrameMs", "m_flWaitGetPosesCalledMs", "m_flNewPosesReadyMs", "m_flNewFrameReadyMs", "m_flCompositorUpdateStartMs", "m_flCompositorUpdateEndMs", "m_flCompositorRenderStartMs", "m_HmdPose", "m_nNumVSyncsReadyForUse", "m_nNumVSyncsToFirstView"); - } - - public Compositor_FrameTiming(Pointer peer) - { - super(peer); - } - - public static class ByReference extends Compositor_FrameTiming implements Structure.ByReference - { - } - - public static class ByValue extends Compositor_FrameTiming implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/Compositor_OverlaySettings.java b/common/src/main/java/jopenvr/Compositor_OverlaySettings.java deleted file mode 100644 index ddab7b1d6..000000000 --- a/common/src/main/java/jopenvr/Compositor_OverlaySettings.java +++ /dev/null @@ -1,47 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class Compositor_OverlaySettings extends Structure -{ - public int size; - public byte curved; - public byte antialias; - public float scale; - public float distance; - public float alpha; - public float uOffset; - public float vOffset; - public float uScale; - public float vScale; - public float gridDivs; - public float gridWidth; - public float gridScale; - public HmdMatrix44_t transform; - - public Compositor_OverlaySettings() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("size", "curved", "antialias", "scale", "distance", "alpha", "uOffset", "vOffset", "uScale", "vScale", "gridDivs", "gridWidth", "gridScale", "transform"); - } - - public Compositor_OverlaySettings(Pointer peer) - { - super(peer); - } - - public static class ByReference extends Compositor_OverlaySettings implements Structure.ByReference - { - } - - public static class ByValue extends Compositor_OverlaySettings implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/D3D12TextureData_t.java b/common/src/main/java/jopenvr/D3D12TextureData_t.java deleted file mode 100644 index e5f880c58..000000000 --- a/common/src/main/java/jopenvr/D3D12TextureData_t.java +++ /dev/null @@ -1,43 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class D3D12TextureData_t extends Structure -{ - public JOpenVRLibrary.ID3D12Resource m_pResource; - public JOpenVRLibrary.ID3D12CommandQueue m_pCommandQueue; - public int m_nNodeMask; - - public D3D12TextureData_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("m_pResource", "m_pCommandQueue", "m_nNodeMask"); - } - - public D3D12TextureData_t(JOpenVRLibrary.ID3D12Resource m_pResource, JOpenVRLibrary.ID3D12CommandQueue m_pCommandQueue, int m_nNodeMask) - { - this.m_pResource = m_pResource; - this.m_pCommandQueue = m_pCommandQueue; - this.m_nNodeMask = m_nNodeMask; - } - - public D3D12TextureData_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends D3D12TextureData_t implements Structure.ByReference - { - } - - public static class ByValue extends D3D12TextureData_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/DistortionCoordinates_t.java b/common/src/main/java/jopenvr/DistortionCoordinates_t.java deleted file mode 100644 index b5a3a6ab7..000000000 --- a/common/src/main/java/jopenvr/DistortionCoordinates_t.java +++ /dev/null @@ -1,66 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class DistortionCoordinates_t extends Structure -{ - public float[] rfRed = new float[2]; - public float[] rfGreen = new float[2]; - public float[] rfBlue = new float[2]; - - public DistortionCoordinates_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("rfRed", "rfGreen", "rfBlue"); - } - - public DistortionCoordinates_t(float[] rfRed, float[] rfGreen, float[] rfBlue) - { - if (rfRed.length != this.rfRed.length) - { - throw new IllegalArgumentException("Wrong array size !"); - } - else - { - this.rfRed = rfRed; - - if (rfGreen.length != this.rfGreen.length) - { - throw new IllegalArgumentException("Wrong array size !"); - } - else - { - this.rfGreen = rfGreen; - - if (rfBlue.length != this.rfBlue.length) - { - throw new IllegalArgumentException("Wrong array size !"); - } - else - { - this.rfBlue = rfBlue; - } - } - } - } - - public DistortionCoordinates_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends DistortionCoordinates_t implements Structure.ByReference - { - } - - public static class ByValue extends DistortionCoordinates_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/DriverDirectMode_FrameTiming.java b/common/src/main/java/jopenvr/DriverDirectMode_FrameTiming.java deleted file mode 100644 index cbd6f2392..000000000 --- a/common/src/main/java/jopenvr/DriverDirectMode_FrameTiming.java +++ /dev/null @@ -1,47 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class DriverDirectMode_FrameTiming extends Structure -{ - public int m_nSize; - public int m_nNumFramePresents; - public int m_nNumMisPresented; - public int m_nNumDroppedFrames; - public int m_nReprojectionFlags; - - public DriverDirectMode_FrameTiming() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("m_nSize", "m_nNumFramePresents", "m_nNumMisPresented", "m_nNumDroppedFrames", "m_nReprojectionFlags"); - } - - public DriverDirectMode_FrameTiming(int m_nSize, int m_nNumFramePresents, int m_nNumMisPresented, int m_nNumDroppedFrames, int m_nReprojectionFlags) - { - this.m_nSize = m_nSize; - this.m_nNumFramePresents = m_nNumFramePresents; - this.m_nNumMisPresented = m_nNumMisPresented; - this.m_nNumDroppedFrames = m_nNumDroppedFrames; - this.m_nReprojectionFlags = m_nReprojectionFlags; - } - - public DriverDirectMode_FrameTiming(Pointer peer) - { - super(peer); - } - - public static class ByReference extends DriverDirectMode_FrameTiming implements Structure.ByReference - { - } - - public static class ByValue extends DriverDirectMode_FrameTiming implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/HiddenAreaMesh_t.java b/common/src/main/java/jopenvr/HiddenAreaMesh_t.java deleted file mode 100644 index 59062a58c..000000000 --- a/common/src/main/java/jopenvr/HiddenAreaMesh_t.java +++ /dev/null @@ -1,41 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class HiddenAreaMesh_t extends Structure -{ - public HmdVector2_t.ByReference pVertexData; - public int unTriangleCount; - - public HiddenAreaMesh_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("pVertexData", "unTriangleCount"); - } - - public HiddenAreaMesh_t(HmdVector2_t.ByReference pVertexData, int unTriangleCount) - { - this.pVertexData = pVertexData; - this.unTriangleCount = unTriangleCount; - } - - public HiddenAreaMesh_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends HiddenAreaMesh_t implements Structure.ByReference - { - } - - public static class ByValue extends HiddenAreaMesh_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/HmdColor_t.java b/common/src/main/java/jopenvr/HmdColor_t.java deleted file mode 100644 index ab1b5cf2f..000000000 --- a/common/src/main/java/jopenvr/HmdColor_t.java +++ /dev/null @@ -1,45 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class HmdColor_t extends Structure -{ - public float r; - public float g; - public float b; - public float a; - - public HmdColor_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("r", "g", "b", "a"); - } - - public HmdColor_t(float r, float g, float b, float a) - { - this.r = r; - this.g = g; - this.b = b; - this.a = a; - } - - public HmdColor_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends HmdColor_t implements Structure.ByReference - { - } - - public static class ByValue extends HmdColor_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/HmdMatrix33_t.java b/common/src/main/java/jopenvr/HmdMatrix33_t.java deleted file mode 100644 index 12adf4ea5..000000000 --- a/common/src/main/java/jopenvr/HmdMatrix33_t.java +++ /dev/null @@ -1,46 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class HmdMatrix33_t extends Structure -{ - public float[] m = new float[9]; - - public HmdMatrix33_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("m"); - } - - public HmdMatrix33_t(float[] m) - { - if (m.length != this.m.length) - { - throw new IllegalArgumentException("Wrong array size !"); - } - else - { - this.m = m; - } - } - - public HmdMatrix33_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends HmdMatrix33_t implements Structure.ByReference - { - } - - public static class ByValue extends HmdMatrix33_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/HmdMatrix34_t.java b/common/src/main/java/jopenvr/HmdMatrix34_t.java deleted file mode 100644 index b34947e24..000000000 --- a/common/src/main/java/jopenvr/HmdMatrix34_t.java +++ /dev/null @@ -1,46 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class HmdMatrix34_t extends Structure -{ - public float[] m = new float[12]; - - public HmdMatrix34_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("m"); - } - - public HmdMatrix34_t(float[] m) - { - if (m.length != this.m.length) - { - throw new IllegalArgumentException("Wrong array size !"); - } - else - { - this.m = m; - } - } - - public HmdMatrix34_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends HmdMatrix34_t implements Structure.ByReference - { - } - - public static class ByValue extends HmdMatrix34_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/HmdMatrix44_t.java b/common/src/main/java/jopenvr/HmdMatrix44_t.java deleted file mode 100644 index 6496e7575..000000000 --- a/common/src/main/java/jopenvr/HmdMatrix44_t.java +++ /dev/null @@ -1,46 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class HmdMatrix44_t extends Structure -{ - public float[] m = new float[16]; - - public HmdMatrix44_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("m"); - } - - public HmdMatrix44_t(float[] m) - { - if (m.length != this.m.length) - { - throw new IllegalArgumentException("Wrong array size !"); - } - else - { - this.m = m; - } - } - - public HmdMatrix44_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends HmdMatrix44_t implements Structure.ByReference - { - } - - public static class ByValue extends HmdMatrix44_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/HmdQuad_t.java b/common/src/main/java/jopenvr/HmdQuad_t.java deleted file mode 100644 index ffea2a689..000000000 --- a/common/src/main/java/jopenvr/HmdQuad_t.java +++ /dev/null @@ -1,46 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class HmdQuad_t extends Structure -{ - public HmdVector3_t[] vCorners = new HmdVector3_t[4]; - - public HmdQuad_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("vCorners"); - } - - public HmdQuad_t(HmdVector3_t[] vCorners) - { - if (vCorners.length != this.vCorners.length) - { - throw new IllegalArgumentException("Wrong array size !"); - } - else - { - this.vCorners = vCorners; - } - } - - public HmdQuad_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends HmdQuad_t implements Structure.ByReference - { - } - - public static class ByValue extends HmdQuad_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/HmdQuaternion_t.java b/common/src/main/java/jopenvr/HmdQuaternion_t.java deleted file mode 100644 index 1f742c1cd..000000000 --- a/common/src/main/java/jopenvr/HmdQuaternion_t.java +++ /dev/null @@ -1,45 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class HmdQuaternion_t extends Structure -{ - public double w; - public double x; - public double y; - public double z; - - public HmdQuaternion_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("w", "x", "y", "z"); - } - - public HmdQuaternion_t(double w, double x, double y, double z) - { - this.w = w; - this.x = x; - this.y = y; - this.z = z; - } - - public HmdQuaternion_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends HmdQuaternion_t implements Structure.ByReference - { - } - - public static class ByValue extends HmdQuaternion_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/HmdQuaternionf_t.java b/common/src/main/java/jopenvr/HmdQuaternionf_t.java deleted file mode 100644 index 69aadccaa..000000000 --- a/common/src/main/java/jopenvr/HmdQuaternionf_t.java +++ /dev/null @@ -1,45 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class HmdQuaternionf_t extends Structure -{ - public float w; - public float x; - public float y; - public float z; - - public HmdQuaternionf_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("w", "x", "y", "z"); - } - - public HmdQuaternionf_t(float w, float x, float y, float z) - { - this.w = w; - this.x = x; - this.y = y; - this.z = z; - } - - public HmdQuaternionf_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends HmdQuaternionf_t implements Structure.ByReference - { - } - - public static class ByValue extends HmdQuaternionf_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/HmdRect2_t.java b/common/src/main/java/jopenvr/HmdRect2_t.java deleted file mode 100644 index 60e2a4368..000000000 --- a/common/src/main/java/jopenvr/HmdRect2_t.java +++ /dev/null @@ -1,41 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class HmdRect2_t extends Structure -{ - public HmdVector2_t vTopLeft; - public HmdVector2_t vBottomRight; - - public HmdRect2_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("vTopLeft", "vBottomRight"); - } - - public HmdRect2_t(HmdVector2_t vTopLeft, HmdVector2_t vBottomRight) - { - this.vTopLeft = vTopLeft; - this.vBottomRight = vBottomRight; - } - - public HmdRect2_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends HmdRect2_t implements Structure.ByReference - { - } - - public static class ByValue extends HmdRect2_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/HmdVector2_t.java b/common/src/main/java/jopenvr/HmdVector2_t.java deleted file mode 100644 index 33227bcca..000000000 --- a/common/src/main/java/jopenvr/HmdVector2_t.java +++ /dev/null @@ -1,46 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class HmdVector2_t extends Structure -{ - public float[] v = new float[2]; - - public HmdVector2_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("v"); - } - - public HmdVector2_t(float[] v) - { - if (v.length != this.v.length) - { - throw new IllegalArgumentException("Wrong array size !"); - } - else - { - this.v = v; - } - } - - public HmdVector2_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends HmdVector2_t implements Structure.ByReference - { - } - - public static class ByValue extends HmdVector2_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/HmdVector3_t.java b/common/src/main/java/jopenvr/HmdVector3_t.java deleted file mode 100644 index c4dbb4194..000000000 --- a/common/src/main/java/jopenvr/HmdVector3_t.java +++ /dev/null @@ -1,46 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class HmdVector3_t extends Structure -{ - public float[] v = new float[3]; - - public HmdVector3_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("v"); - } - - public HmdVector3_t(float[] v) - { - if (v.length != this.v.length) - { - throw new IllegalArgumentException("Wrong array size !"); - } - else - { - this.v = v; - } - } - - public HmdVector3_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends HmdVector3_t implements Structure.ByReference - { - } - - public static class ByValue extends HmdVector3_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/HmdVector3d_t.java b/common/src/main/java/jopenvr/HmdVector3d_t.java deleted file mode 100644 index a7a5f7834..000000000 --- a/common/src/main/java/jopenvr/HmdVector3d_t.java +++ /dev/null @@ -1,46 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class HmdVector3d_t extends Structure -{ - public double[] v = new double[3]; - - public HmdVector3d_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("v"); - } - - public HmdVector3d_t(double[] v) - { - if (v.length != this.v.length) - { - throw new IllegalArgumentException("Wrong array size !"); - } - else - { - this.v = v; - } - } - - public HmdVector3d_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends HmdVector3d_t implements Structure.ByReference - { - } - - public static class ByValue extends HmdVector3d_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/HmdVector4_t.java b/common/src/main/java/jopenvr/HmdVector4_t.java deleted file mode 100644 index b522678bd..000000000 --- a/common/src/main/java/jopenvr/HmdVector4_t.java +++ /dev/null @@ -1,46 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class HmdVector4_t extends Structure -{ - public float[] v = new float[4]; - - public HmdVector4_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("v"); - } - - public HmdVector4_t(float[] v) - { - if (v.length != this.v.length) - { - throw new IllegalArgumentException("Wrong array size !"); - } - else - { - this.v = v; - } - } - - public HmdVector4_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends HmdVector4_t implements Structure.ByReference - { - } - - public static class ByValue extends HmdVector4_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/ImuSample_t.java b/common/src/main/java/jopenvr/ImuSample_t.java deleted file mode 100644 index 0dcfc63df..000000000 --- a/common/src/main/java/jopenvr/ImuSample_t.java +++ /dev/null @@ -1,45 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class ImuSample_t extends Structure -{ - public double fSampleTime; - public HmdVector3d_t vAccel; - public HmdVector3d_t vGyro; - public int unOffScaleFlags; - - public ImuSample_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("fSampleTime", "vAccel", "vGyro", "unOffScaleFlags"); - } - - public ImuSample_t(double fSampleTime, HmdVector3d_t vAccel, HmdVector3d_t vGyro, int unOffScaleFlags) - { - this.fSampleTime = fSampleTime; - this.vAccel = vAccel; - this.vGyro = vGyro; - this.unOffScaleFlags = unOffScaleFlags; - } - - public ImuSample_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends ImuSample_t implements Structure.ByReference - { - } - - public static class ByValue extends ImuSample_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/InputAnalogActionData_t.java b/common/src/main/java/jopenvr/InputAnalogActionData_t.java deleted file mode 100644 index ec021f03f..000000000 --- a/common/src/main/java/jopenvr/InputAnalogActionData_t.java +++ /dev/null @@ -1,55 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class InputAnalogActionData_t extends Structure -{ - public byte bActive; - public long activeOrigin; - public float x; - public float y; - public float z; - public float deltaX; - public float deltaY; - public float deltaZ; - public float fUpdateTime; - - public InputAnalogActionData_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("bActive", "activeOrigin", "x", "y", "z", "deltaX", "deltaY", "deltaZ", "fUpdateTime"); - } - - public InputAnalogActionData_t(byte bActive, long activeOrigin, float x, float y, float z, float deltaX, float deltaY, float deltaZ, float fUpdateTime) - { - this.bActive = bActive; - this.activeOrigin = activeOrigin; - this.x = x; - this.y = y; - this.z = z; - this.deltaX = deltaX; - this.deltaY = deltaY; - this.deltaZ = deltaZ; - this.fUpdateTime = fUpdateTime; - } - - public InputAnalogActionData_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends InputAnalogActionData_t implements Structure.ByReference - { - } - - public static class ByValue extends InputAnalogActionData_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/InputDigitalActionData_t.java b/common/src/main/java/jopenvr/InputDigitalActionData_t.java deleted file mode 100644 index 422391eea..000000000 --- a/common/src/main/java/jopenvr/InputDigitalActionData_t.java +++ /dev/null @@ -1,47 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class InputDigitalActionData_t extends Structure -{ - public byte bActive; - public long activeOrigin; - public byte bState; - public byte bChanged; - public float fUpdateTime; - - public InputDigitalActionData_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("bActive", "activeOrigin", "bState", "bChanged", "fUpdateTime"); - } - - public InputDigitalActionData_t(byte bActive, long activeOrigin, byte bState, byte bChanged, float fUpdateTime) - { - this.bActive = bActive; - this.activeOrigin = activeOrigin; - this.bState = bState; - this.bChanged = bChanged; - this.fUpdateTime = fUpdateTime; - } - - public InputDigitalActionData_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends InputDigitalActionData_t implements Structure.ByReference - { - } - - public static class ByValue extends InputDigitalActionData_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/InputOriginInfo_t.java b/common/src/main/java/jopenvr/InputOriginInfo_t.java deleted file mode 100644 index 733cf7309..000000000 --- a/common/src/main/java/jopenvr/InputOriginInfo_t.java +++ /dev/null @@ -1,51 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class InputOriginInfo_t extends Structure -{ - public long devicePath; - public int trackedDeviceIndex; - public byte[] rchRenderModelComponentName = new byte[128]; - - public InputOriginInfo_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("devicePath", "trackedDeviceIndex", "rchRenderModelComponentName"); - } - - public InputOriginInfo_t(long devicePath, int trackedDeviceIndex, byte[] rchRenderModelComponentName) - { - this.devicePath = devicePath; - this.trackedDeviceIndex = trackedDeviceIndex; - - if (rchRenderModelComponentName.length != this.rchRenderModelComponentName.length) - { - throw new IllegalArgumentException("Wrong array size !"); - } - else - { - this.rchRenderModelComponentName = rchRenderModelComponentName; - } - } - - public InputOriginInfo_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends InputOriginInfo_t implements Structure.ByReference - { - } - - public static class ByValue extends InputOriginInfo_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/InputPoseActionData_t.java b/common/src/main/java/jopenvr/InputPoseActionData_t.java deleted file mode 100644 index 7dd4cd752..000000000 --- a/common/src/main/java/jopenvr/InputPoseActionData_t.java +++ /dev/null @@ -1,43 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class InputPoseActionData_t extends Structure -{ - public byte bActive; - public long activeOrigin; - public TrackedDevicePose_t pose; - - public InputPoseActionData_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("bActive", "activeOrigin", "pose"); - } - - public InputPoseActionData_t(byte bActive, long activeOrigin, TrackedDevicePose_t pose) - { - this.bActive = bActive; - this.activeOrigin = activeOrigin; - this.pose = pose; - } - - public InputPoseActionData_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends InputPoseActionData_t implements Structure.ByReference - { - } - - public static class ByValue extends InputPoseActionData_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/InputSkeletalActionData_t.java b/common/src/main/java/jopenvr/InputSkeletalActionData_t.java deleted file mode 100644 index db1e1bb61..000000000 --- a/common/src/main/java/jopenvr/InputSkeletalActionData_t.java +++ /dev/null @@ -1,41 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class InputSkeletalActionData_t extends Structure -{ - public byte bActive; - public long activeOrigin; - - public InputSkeletalActionData_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("bActive", "activeOrigin"); - } - - public InputSkeletalActionData_t(byte bActive, long activeOrigin) - { - this.bActive = bActive; - this.activeOrigin = activeOrigin; - } - - public InputSkeletalActionData_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends InputSkeletalActionData_t implements Structure.ByReference - { - } - - public static class ByValue extends InputSkeletalActionData_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/IntersectionMaskCircle_t.java b/common/src/main/java/jopenvr/IntersectionMaskCircle_t.java deleted file mode 100644 index fbabacaae..000000000 --- a/common/src/main/java/jopenvr/IntersectionMaskCircle_t.java +++ /dev/null @@ -1,43 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class IntersectionMaskCircle_t extends Structure -{ - public float m_flCenterX; - public float m_flCenterY; - public float m_flRadius; - - public IntersectionMaskCircle_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("m_flCenterX", "m_flCenterY", "m_flRadius"); - } - - public IntersectionMaskCircle_t(float m_flCenterX, float m_flCenterY, float m_flRadius) - { - this.m_flCenterX = m_flCenterX; - this.m_flCenterY = m_flCenterY; - this.m_flRadius = m_flRadius; - } - - public IntersectionMaskCircle_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends IntersectionMaskCircle_t implements Structure.ByReference - { - } - - public static class ByValue extends IntersectionMaskCircle_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/IntersectionMaskRectangle_t.java b/common/src/main/java/jopenvr/IntersectionMaskRectangle_t.java deleted file mode 100644 index 508c1051d..000000000 --- a/common/src/main/java/jopenvr/IntersectionMaskRectangle_t.java +++ /dev/null @@ -1,45 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class IntersectionMaskRectangle_t extends Structure -{ - public float m_flTopLeftX; - public float m_flTopLeftY; - public float m_flWidth; - public float m_flHeight; - - public IntersectionMaskRectangle_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("m_flTopLeftX", "m_flTopLeftY", "m_flWidth", "m_flHeight"); - } - - public IntersectionMaskRectangle_t(float m_flTopLeftX, float m_flTopLeftY, float m_flWidth, float m_flHeight) - { - this.m_flTopLeftX = m_flTopLeftX; - this.m_flTopLeftY = m_flTopLeftY; - this.m_flWidth = m_flWidth; - this.m_flHeight = m_flHeight; - } - - public IntersectionMaskRectangle_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends IntersectionMaskRectangle_t implements Structure.ByReference - { - } - - public static class ByValue extends IntersectionMaskRectangle_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/JOpenCompositeLibrary.java b/common/src/main/java/jopenvr/JOpenCompositeLibrary.java deleted file mode 100644 index ee194754e..000000000 --- a/common/src/main/java/jopenvr/JOpenCompositeLibrary.java +++ /dev/null @@ -1,9 +0,0 @@ -package jopenvr; - -public class JOpenCompositeLibrary -{ - public interface EVRExtendedButtonId - { - int EVRExtendedButtonId_k_EButton_OVRMenu = 0; - } -} diff --git a/common/src/main/java/jopenvr/JOpenVRLibrary.java b/common/src/main/java/jopenvr/JOpenVRLibrary.java deleted file mode 100644 index 1383f493c..000000000 --- a/common/src/main/java/jopenvr/JOpenVRLibrary.java +++ /dev/null @@ -1,1433 +0,0 @@ -package jopenvr; - -import com.sun.jna.Library; -import com.sun.jna.Native; -import com.sun.jna.NativeLibrary; -import com.sun.jna.Pointer; -import com.sun.jna.PointerType; -import com.sun.jna.ptr.IntByReference; - -import java.nio.IntBuffer; - -public class JOpenVRLibrary implements Library -{ - public static final String JNA_LIBRARY_NAME = "openvr_api"; - public static final int k_nDriverNone = -1; - public static final int k_unMaxDriverDebugResponseSize = 32768; - public static final int k_unTrackedDeviceIndex_Hmd = 0; - public static final int k_unMaxTrackedDeviceCount = 64; - public static final int k_unTrackedDeviceIndexOther = -2; - public static final int k_unTrackedDeviceIndexInvalid = -1; - public static final long k_ulInvalidPropertyContainer = 0L; - public static final int k_unInvalidPropertyTag = 0; - public static final long k_ulInvalidDriverHandle = 0L; - public static final int k_unFloatPropertyTag = 1; - public static final int k_unInt32PropertyTag = 2; - public static final int k_unUint64PropertyTag = 3; - public static final int k_unBoolPropertyTag = 4; - public static final int k_unStringPropertyTag = 5; - public static final int k_unHmdMatrix34PropertyTag = 20; - public static final int k_unHmdMatrix44PropertyTag = 21; - public static final int k_unHmdVector3PropertyTag = 22; - public static final int k_unHmdVector4PropertyTag = 23; - public static final int k_unHmdVector2PropertyTag = 24; - public static final int k_unHmdQuadPropertyTag = 25; - public static final int k_unHiddenAreaPropertyTag = 30; - public static final int k_unPathHandleInfoTag = 31; - public static final int k_unActionPropertyTag = 32; - public static final int k_unInputValuePropertyTag = 33; - public static final int k_unWildcardPropertyTag = 34; - public static final int k_unHapticVibrationPropertyTag = 35; - public static final int k_unSkeletonPropertyTag = 36; - public static final int k_unSpatialAnchorPosePropertyTag = 40; - public static final int k_unJsonPropertyTag = 41; - public static final int k_unActiveActionSetPropertyTag = 42; - public static final int k_unOpenVRInternalReserved_Start = 1000; - public static final int k_unOpenVRInternalReserved_End = 10000; - public static final int k_unMaxPropertyStringSize = 32768; - public static final long k_ulInvalidActionHandle = 0L; - public static final long k_ulInvalidActionSetHandle = 0L; - public static final long k_ulInvalidInputValueHandle = 0L; - public static final int k_unControllerStateAxisCount = 5; - public static final long k_ulOverlayHandleInvalid = 0L; - public static final int k_unMaxDistortionFunctionParameters = 8; - public static final int k_unScreenshotHandleInvalid = 0; - public static final int k_unMaxApplicationKeyLength = 128; - public static final int k_unVROverlayMaxKeyLength = 128; - public static final int k_unVROverlayMaxNameLength = 128; - public static final int k_unMaxOverlayCount = 64; - public static final int k_unMaxOverlayIntersectionMaskPrimitivesCount = 32; - public static final int k_unNotificationTextMaxSize = 256; - public static final int k_unMaxSettingsKeyLength = 128; - public static final int k_unMaxActionNameLength = 64; - public static final int k_unMaxActionSetNameLength = 64; - public static final int k_unMaxActionOriginCount = 16; - public static final int k_unMaxBoneNameLength = 32; - public static final long k_ulInvalidIOBufferHandle = 0L; - public static final int k_ulInvalidSpatialAnchorHandle = 0; - public static String IVRSystem_Version = "FnTable:IVRSystem_019"; - public static String IVRExtendedDisplay_Version = "FnTable:IVRExtendedDisplay_001"; - public static String IVRTrackedCamera_Version = "FnTable:IVRTrackedCamera_005"; - public static String IVRApplications_Version = "FnTable:IVRApplications_006"; - public static String IVRChaperone_Version = "FnTable:IVRChaperone_003"; - public static String IVRChaperoneSetup_Version = "FnTable:IVRChaperoneSetup_006"; - public static String IVRCompositor_Version = "FnTable:IVRCompositor_022"; - public static String IVRInput_Version = "FnTable:IVRInput_006"; - public static String IVRIOBuffer_Version = "FnTable:IVRIOBuffer_002"; - public static String IVROverlay_Version = "FnTable:IVROverlay_019"; - public static String IVRRenderModels_Version = "FnTable:IVRRenderModels_006"; - public static String IVRNotifications_Version = "FnTable:IVRNotifications_002"; - public static String IVRSettings_Version = "FnTable:IVRSettings_002"; - public static String IVRScreenshots_Version = "FnTable:IVRScreenshots_001"; - public static String IVRSpatialAnchors_Version = "FnTable:IVRSpatialAnchors_001"; - public static String IVRResources_Version = "FnTable:IVRResources_001"; - public static String IVRDriverManager_Version = "FnTable:IVRDriverManager_001"; - - @Deprecated - public static native Pointer VR_InitInternal(IntByReference var0, int var1); - - public static native Pointer VR_InitInternal(IntBuffer var0, int var1); - - public static native void VR_ShutdownInternal(); - - public static native byte VR_IsHmdPresent(); - - @Deprecated - public static native Pointer VR_GetGenericInterface(Pointer var0, IntByReference var1); - - public static native Pointer VR_GetGenericInterface(String var0, IntBuffer var1); - - public static native byte VR_IsRuntimeInstalled(); - - public static native Pointer VR_GetVRInitErrorAsSymbol(int var0); - - public static native Pointer VR_GetVRInitErrorAsEnglishDescription(int var0); - - private static boolean errored; - - public static boolean isErrored() { - return errored; - } - - static - { - try { - Native.register(JOpenVRLibrary.class, NativeLibrary.getInstance(JNA_LIBRARY_NAME)); - } catch (UnsatisfiedLinkError error) { - errored = true; - System.out.println("Couldn't register VR!"); - } - } - - public interface ChaperoneCalibrationState - { - int ChaperoneCalibrationState_OK = 1; - int ChaperoneCalibrationState_Warning = 100; - int ChaperoneCalibrationState_Warning_BaseStationMayHaveMoved = 101; - int ChaperoneCalibrationState_Warning_BaseStationRemoved = 102; - int ChaperoneCalibrationState_Warning_SeatedBoundsInvalid = 103; - int ChaperoneCalibrationState_Error = 200; - int ChaperoneCalibrationState_Error_BaseStationUninitialized = 201; - int ChaperoneCalibrationState_Error_BaseStationConflict = 202; - int ChaperoneCalibrationState_Error_PlayAreaInvalid = 203; - int ChaperoneCalibrationState_Error_CollisionBoundsInvalid = 204; - } - - public interface EAdditionalRadioFeatures - { - int EAdditionalRadioFeatures_AdditionalRadioFeatures_None = 0; - int EAdditionalRadioFeatures_AdditionalRadioFeatures_HTCLinkBox = 1; - int EAdditionalRadioFeatures_AdditionalRadioFeatures_InternalDongle = 2; - int EAdditionalRadioFeatures_AdditionalRadioFeatures_ExternalDongle = 4; - } - - public interface EChaperoneConfigFile - { - int EChaperoneConfigFile_Live = 1; - int EChaperoneConfigFile_Temp = 2; - } - - public interface EChaperoneImportFlags - { - int EChaperoneImportFlags_EChaperoneImport_BoundsOnly = 1; - } - - public interface ECollisionBoundsStyle - { - int ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_BEGINNER = 0; - int ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_INTERMEDIATE = 1; - int ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_SQUARES = 2; - int ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_ADVANCED = 3; - int ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_NONE = 4; - int ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_COUNT = 5; - } - - public interface EColorSpace - { - int EColorSpace_ColorSpace_Auto = 0; - int EColorSpace_ColorSpace_Gamma = 1; - int EColorSpace_ColorSpace_Linear = 2; - } - - public interface EDeviceActivityLevel - { - int EDeviceActivityLevel_k_EDeviceActivityLevel_Unknown = -1; - int EDeviceActivityLevel_k_EDeviceActivityLevel_Idle = 0; - int EDeviceActivityLevel_k_EDeviceActivityLevel_UserInteraction = 1; - int EDeviceActivityLevel_k_EDeviceActivityLevel_UserInteraction_Timeout = 2; - int EDeviceActivityLevel_k_EDeviceActivityLevel_Standby = 3; - } - - public interface EDualAnalogWhich - { - int EDualAnalogWhich_k_EDualAnalog_Left = 0; - int EDualAnalogWhich_k_EDualAnalog_Right = 1; - } - - public interface EGamepadTextInputLineMode - { - int EGamepadTextInputLineMode_k_EGamepadTextInputLineModeSingleLine = 0; - int EGamepadTextInputLineMode_k_EGamepadTextInputLineModeMultipleLines = 1; - } - - public interface EGamepadTextInputMode - { - int EGamepadTextInputMode_k_EGamepadTextInputModeNormal = 0; - int EGamepadTextInputMode_k_EGamepadTextInputModePassword = 1; - int EGamepadTextInputMode_k_EGamepadTextInputModeSubmit = 2; - } - - public interface EHDCPError - { - int EHDCPError_HDCPError_None = 0; - int EHDCPError_HDCPError_LinkLost = 1; - int EHDCPError_HDCPError_Tampered = 2; - int EHDCPError_HDCPError_DeviceRevoked = 3; - int EHDCPError_HDCPError_Unknown = 4; - } - - public interface EHiddenAreaMeshType - { - int EHiddenAreaMeshType_k_eHiddenAreaMesh_Standard = 0; - int EHiddenAreaMeshType_k_eHiddenAreaMesh_Inverse = 1; - int EHiddenAreaMeshType_k_eHiddenAreaMesh_LineLoop = 2; - int EHiddenAreaMeshType_k_eHiddenAreaMesh_Max = 3; - } - - public interface EIOBufferError - { - int EIOBufferError_IOBuffer_Success = 0; - int EIOBufferError_IOBuffer_OperationFailed = 100; - int EIOBufferError_IOBuffer_InvalidHandle = 101; - int EIOBufferError_IOBuffer_InvalidArgument = 102; - int EIOBufferError_IOBuffer_PathExists = 103; - int EIOBufferError_IOBuffer_PathDoesNotExist = 104; - int EIOBufferError_IOBuffer_Permission = 105; - } - - public interface EIOBufferMode - { - int EIOBufferMode_IOBufferMode_Read = 1; - int EIOBufferMode_IOBufferMode_Write = 2; - int EIOBufferMode_IOBufferMode_Create = 512; - } - - public interface EOverlayDirection - { - int EOverlayDirection_OverlayDirection_Up = 0; - int EOverlayDirection_OverlayDirection_Down = 1; - int EOverlayDirection_OverlayDirection_Left = 2; - int EOverlayDirection_OverlayDirection_Right = 3; - int EOverlayDirection_OverlayDirection_Count = 4; - } - - public interface EShowUIType - { - int EShowUIType_ShowUI_ControllerBinding = 0; - int EShowUIType_ShowUI_ManageTrackers = 1; - int EShowUIType_ShowUI_Pairing = 3; - int EShowUIType_ShowUI_Settings = 4; - } - - public interface ETextureType - { - int ETextureType_TextureType_Invalid = -1; - int ETextureType_TextureType_DirectX = 0; - int ETextureType_TextureType_OpenGL = 1; - int ETextureType_TextureType_Vulkan = 2; - int ETextureType_TextureType_IOSurface = 3; - int ETextureType_TextureType_DirectX12 = 4; - int ETextureType_TextureType_DXGISharedHandle = 5; - int ETextureType_TextureType_Metal = 6; - } - - public interface ETrackedControllerRole - { - int ETrackedControllerRole_TrackedControllerRole_Invalid = 0; - int ETrackedControllerRole_TrackedControllerRole_LeftHand = 1; - int ETrackedControllerRole_TrackedControllerRole_RightHand = 2; - int ETrackedControllerRole_TrackedControllerRole_OptOut = 3; - int ETrackedControllerRole_TrackedControllerRole_Treadmill = 4; - int ETrackedControllerRole_TrackedControllerRole_Max = 5; - } - - public interface ETrackedDeviceClass - { - int ETrackedDeviceClass_TrackedDeviceClass_Invalid = 0; - int ETrackedDeviceClass_TrackedDeviceClass_HMD = 1; - int ETrackedDeviceClass_TrackedDeviceClass_Controller = 2; - int ETrackedDeviceClass_TrackedDeviceClass_GenericTracker = 3; - int ETrackedDeviceClass_TrackedDeviceClass_TrackingReference = 4; - int ETrackedDeviceClass_TrackedDeviceClass_DisplayRedirect = 5; - int ETrackedDeviceClass_TrackedDeviceClass_Max = 6; - } - - public interface ETrackedDeviceProperty - { - int ETrackedDeviceProperty_Prop_Invalid = 0; - int ETrackedDeviceProperty_Prop_TrackingSystemName_String = 1000; - int ETrackedDeviceProperty_Prop_ModelNumber_String = 1001; - int ETrackedDeviceProperty_Prop_SerialNumber_String = 1002; - int ETrackedDeviceProperty_Prop_RenderModelName_String = 1003; - int ETrackedDeviceProperty_Prop_WillDriftInYaw_Bool = 1004; - int ETrackedDeviceProperty_Prop_ManufacturerName_String = 1005; - int ETrackedDeviceProperty_Prop_TrackingFirmwareVersion_String = 1006; - int ETrackedDeviceProperty_Prop_HardwareRevision_String = 1007; - int ETrackedDeviceProperty_Prop_AllWirelessDongleDescriptions_String = 1008; - int ETrackedDeviceProperty_Prop_ConnectedWirelessDongle_String = 1009; - int ETrackedDeviceProperty_Prop_DeviceIsWireless_Bool = 1010; - int ETrackedDeviceProperty_Prop_DeviceIsCharging_Bool = 1011; - int ETrackedDeviceProperty_Prop_DeviceBatteryPercentage_Float = 1012; - int ETrackedDeviceProperty_Prop_StatusDisplayTransform_Matrix34 = 1013; - int ETrackedDeviceProperty_Prop_Firmware_UpdateAvailable_Bool = 1014; - int ETrackedDeviceProperty_Prop_Firmware_ManualUpdate_Bool = 1015; - int ETrackedDeviceProperty_Prop_Firmware_ManualUpdateURL_String = 1016; - int ETrackedDeviceProperty_Prop_HardwareRevision_Uint64 = 1017; - int ETrackedDeviceProperty_Prop_FirmwareVersion_Uint64 = 1018; - int ETrackedDeviceProperty_Prop_FPGAVersion_Uint64 = 1019; - int ETrackedDeviceProperty_Prop_VRCVersion_Uint64 = 1020; - int ETrackedDeviceProperty_Prop_RadioVersion_Uint64 = 1021; - int ETrackedDeviceProperty_Prop_DongleVersion_Uint64 = 1022; - int ETrackedDeviceProperty_Prop_BlockServerShutdown_Bool = 1023; - int ETrackedDeviceProperty_Prop_CanUnifyCoordinateSystemWithHmd_Bool = 1024; - int ETrackedDeviceProperty_Prop_ContainsProximitySensor_Bool = 1025; - int ETrackedDeviceProperty_Prop_DeviceProvidesBatteryStatus_Bool = 1026; - int ETrackedDeviceProperty_Prop_DeviceCanPowerOff_Bool = 1027; - int ETrackedDeviceProperty_Prop_Firmware_ProgrammingTarget_String = 1028; - int ETrackedDeviceProperty_Prop_DeviceClass_Int32 = 1029; - int ETrackedDeviceProperty_Prop_HasCamera_Bool = 1030; - int ETrackedDeviceProperty_Prop_DriverVersion_String = 1031; - int ETrackedDeviceProperty_Prop_Firmware_ForceUpdateRequired_Bool = 1032; - int ETrackedDeviceProperty_Prop_ViveSystemButtonFixRequired_Bool = 1033; - int ETrackedDeviceProperty_Prop_ParentDriver_Uint64 = 1034; - int ETrackedDeviceProperty_Prop_ResourceRoot_String = 1035; - int ETrackedDeviceProperty_Prop_RegisteredDeviceType_String = 1036; - int ETrackedDeviceProperty_Prop_InputProfilePath_String = 1037; - int ETrackedDeviceProperty_Prop_NeverTracked_Bool = 1038; - int ETrackedDeviceProperty_Prop_NumCameras_Int32 = 1039; - int ETrackedDeviceProperty_Prop_CameraFrameLayout_Int32 = 1040; - int ETrackedDeviceProperty_Prop_CameraStreamFormat_Int32 = 1041; - int ETrackedDeviceProperty_Prop_AdditionalDeviceSettingsPath_String = 1042; - int ETrackedDeviceProperty_Prop_Identifiable_Bool = 1043; - int ETrackedDeviceProperty_Prop_BootloaderVersion_Uint64 = 1044; - int ETrackedDeviceProperty_Prop_AdditionalSystemReportData_String = 1045; - int ETrackedDeviceProperty_Prop_CompositeFirmwareVersion_String = 1046; - int ETrackedDeviceProperty_Prop_ReportsTimeSinceVSync_Bool = 2000; - int ETrackedDeviceProperty_Prop_SecondsFromVsyncToPhotons_Float = 2001; - int ETrackedDeviceProperty_Prop_DisplayFrequency_Float = 2002; - int ETrackedDeviceProperty_Prop_UserIpdMeters_Float = 2003; - int ETrackedDeviceProperty_Prop_CurrentUniverseId_Uint64 = 2004; - int ETrackedDeviceProperty_Prop_PreviousUniverseId_Uint64 = 2005; - int ETrackedDeviceProperty_Prop_DisplayFirmwareVersion_Uint64 = 2006; - int ETrackedDeviceProperty_Prop_IsOnDesktop_Bool = 2007; - int ETrackedDeviceProperty_Prop_DisplayMCType_Int32 = 2008; - int ETrackedDeviceProperty_Prop_DisplayMCOffset_Float = 2009; - int ETrackedDeviceProperty_Prop_DisplayMCScale_Float = 2010; - int ETrackedDeviceProperty_Prop_EdidVendorID_Int32 = 2011; - int ETrackedDeviceProperty_Prop_DisplayMCImageLeft_String = 2012; - int ETrackedDeviceProperty_Prop_DisplayMCImageRight_String = 2013; - int ETrackedDeviceProperty_Prop_DisplayGCBlackClamp_Float = 2014; - int ETrackedDeviceProperty_Prop_EdidProductID_Int32 = 2015; - int ETrackedDeviceProperty_Prop_CameraToHeadTransform_Matrix34 = 2016; - int ETrackedDeviceProperty_Prop_DisplayGCType_Int32 = 2017; - int ETrackedDeviceProperty_Prop_DisplayGCOffset_Float = 2018; - int ETrackedDeviceProperty_Prop_DisplayGCScale_Float = 2019; - int ETrackedDeviceProperty_Prop_DisplayGCPrescale_Float = 2020; - int ETrackedDeviceProperty_Prop_DisplayGCImage_String = 2021; - int ETrackedDeviceProperty_Prop_LensCenterLeftU_Float = 2022; - int ETrackedDeviceProperty_Prop_LensCenterLeftV_Float = 2023; - int ETrackedDeviceProperty_Prop_LensCenterRightU_Float = 2024; - int ETrackedDeviceProperty_Prop_LensCenterRightV_Float = 2025; - int ETrackedDeviceProperty_Prop_UserHeadToEyeDepthMeters_Float = 2026; - int ETrackedDeviceProperty_Prop_CameraFirmwareVersion_Uint64 = 2027; - int ETrackedDeviceProperty_Prop_CameraFirmwareDescription_String = 2028; - int ETrackedDeviceProperty_Prop_DisplayFPGAVersion_Uint64 = 2029; - int ETrackedDeviceProperty_Prop_DisplayBootloaderVersion_Uint64 = 2030; - int ETrackedDeviceProperty_Prop_DisplayHardwareVersion_Uint64 = 2031; - int ETrackedDeviceProperty_Prop_AudioFirmwareVersion_Uint64 = 2032; - int ETrackedDeviceProperty_Prop_CameraCompatibilityMode_Int32 = 2033; - int ETrackedDeviceProperty_Prop_ScreenshotHorizontalFieldOfViewDegrees_Float = 2034; - int ETrackedDeviceProperty_Prop_ScreenshotVerticalFieldOfViewDegrees_Float = 2035; - int ETrackedDeviceProperty_Prop_DisplaySuppressed_Bool = 2036; - int ETrackedDeviceProperty_Prop_DisplayAllowNightMode_Bool = 2037; - int ETrackedDeviceProperty_Prop_DisplayMCImageWidth_Int32 = 2038; - int ETrackedDeviceProperty_Prop_DisplayMCImageHeight_Int32 = 2039; - int ETrackedDeviceProperty_Prop_DisplayMCImageNumChannels_Int32 = 2040; - int ETrackedDeviceProperty_Prop_DisplayMCImageData_Binary = 2041; - int ETrackedDeviceProperty_Prop_SecondsFromPhotonsToVblank_Float = 2042; - int ETrackedDeviceProperty_Prop_DriverDirectModeSendsVsyncEvents_Bool = 2043; - int ETrackedDeviceProperty_Prop_DisplayDebugMode_Bool = 2044; - int ETrackedDeviceProperty_Prop_GraphicsAdapterLuid_Uint64 = 2045; - int ETrackedDeviceProperty_Prop_DriverProvidedChaperonePath_String = 2048; - int ETrackedDeviceProperty_Prop_ExpectedTrackingReferenceCount_Int32 = 2049; - int ETrackedDeviceProperty_Prop_ExpectedControllerCount_Int32 = 2050; - int ETrackedDeviceProperty_Prop_NamedIconPathControllerLeftDeviceOff_String = 2051; - int ETrackedDeviceProperty_Prop_NamedIconPathControllerRightDeviceOff_String = 2052; - int ETrackedDeviceProperty_Prop_NamedIconPathTrackingReferenceDeviceOff_String = 2053; - int ETrackedDeviceProperty_Prop_DoNotApplyPrediction_Bool = 2054; - int ETrackedDeviceProperty_Prop_CameraToHeadTransforms_Matrix34_Array = 2055; - int ETrackedDeviceProperty_Prop_DistortionMeshResolution_Int32 = 2056; - int ETrackedDeviceProperty_Prop_DriverIsDrawingControllers_Bool = 2057; - int ETrackedDeviceProperty_Prop_DriverRequestsApplicationPause_Bool = 2058; - int ETrackedDeviceProperty_Prop_DriverRequestsReducedRendering_Bool = 2059; - int ETrackedDeviceProperty_Prop_MinimumIpdStepMeters_Float = 2060; - int ETrackedDeviceProperty_Prop_AudioBridgeFirmwareVersion_Uint64 = 2061; - int ETrackedDeviceProperty_Prop_ImageBridgeFirmwareVersion_Uint64 = 2062; - int ETrackedDeviceProperty_Prop_ImuToHeadTransform_Matrix34 = 2063; - int ETrackedDeviceProperty_Prop_ImuFactoryGyroBias_Vector3 = 2064; - int ETrackedDeviceProperty_Prop_ImuFactoryGyroScale_Vector3 = 2065; - int ETrackedDeviceProperty_Prop_ImuFactoryAccelerometerBias_Vector3 = 2066; - int ETrackedDeviceProperty_Prop_ImuFactoryAccelerometerScale_Vector3 = 2067; - int ETrackedDeviceProperty_Prop_ConfigurationIncludesLighthouse20Features_Bool = 2069; - int ETrackedDeviceProperty_Prop_AdditionalRadioFeatures_Uint64 = 2070; - int ETrackedDeviceProperty_Prop_CameraWhiteBalance_Vector4_Array = 2071; - int ETrackedDeviceProperty_Prop_CameraDistortionFunction_Int32_Array = 2072; - int ETrackedDeviceProperty_Prop_CameraDistortionCoefficients_Float_Array = 2073; - int ETrackedDeviceProperty_Prop_ExpectedControllerType_String = 2074; - int ETrackedDeviceProperty_Prop_DisplayAvailableFrameRates_Float_Array = 2080; - int ETrackedDeviceProperty_Prop_DisplaySupportsMultipleFramerates_Bool = 2081; - int ETrackedDeviceProperty_Prop_DashboardLayoutPathName_String = 2090; - int ETrackedDeviceProperty_Prop_DriverRequestedMuraCorrectionMode_Int32 = 2200; - int ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_InnerLeft_Int32 = 2201; - int ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_InnerRight_Int32 = 2202; - int ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_InnerTop_Int32 = 2203; - int ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_InnerBottom_Int32 = 2204; - int ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_OuterLeft_Int32 = 2205; - int ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_OuterRight_Int32 = 2206; - int ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_OuterTop_Int32 = 2207; - int ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_OuterBottom_Int32 = 2208; - int ETrackedDeviceProperty_Prop_AttachedDeviceId_String = 3000; - int ETrackedDeviceProperty_Prop_SupportedButtons_Uint64 = 3001; - int ETrackedDeviceProperty_Prop_Axis0Type_Int32 = 3002; - int ETrackedDeviceProperty_Prop_Axis1Type_Int32 = 3003; - int ETrackedDeviceProperty_Prop_Axis2Type_Int32 = 3004; - int ETrackedDeviceProperty_Prop_Axis3Type_Int32 = 3005; - int ETrackedDeviceProperty_Prop_Axis4Type_Int32 = 3006; - int ETrackedDeviceProperty_Prop_ControllerRoleHint_Int32 = 3007; - int ETrackedDeviceProperty_Prop_FieldOfViewLeftDegrees_Float = 4000; - int ETrackedDeviceProperty_Prop_FieldOfViewRightDegrees_Float = 4001; - int ETrackedDeviceProperty_Prop_FieldOfViewTopDegrees_Float = 4002; - int ETrackedDeviceProperty_Prop_FieldOfViewBottomDegrees_Float = 4003; - int ETrackedDeviceProperty_Prop_TrackingRangeMinimumMeters_Float = 4004; - int ETrackedDeviceProperty_Prop_TrackingRangeMaximumMeters_Float = 4005; - int ETrackedDeviceProperty_Prop_ModeLabel_String = 4006; - int ETrackedDeviceProperty_Prop_CanWirelessIdentify_Bool = 4007; - int ETrackedDeviceProperty_Prop_Nonce_Int32 = 4008; - int ETrackedDeviceProperty_Prop_IconPathName_String = 5000; - int ETrackedDeviceProperty_Prop_NamedIconPathDeviceOff_String = 5001; - int ETrackedDeviceProperty_Prop_NamedIconPathDeviceSearching_String = 5002; - int ETrackedDeviceProperty_Prop_NamedIconPathDeviceSearchingAlert_String = 5003; - int ETrackedDeviceProperty_Prop_NamedIconPathDeviceReady_String = 5004; - int ETrackedDeviceProperty_Prop_NamedIconPathDeviceReadyAlert_String = 5005; - int ETrackedDeviceProperty_Prop_NamedIconPathDeviceNotReady_String = 5006; - int ETrackedDeviceProperty_Prop_NamedIconPathDeviceStandby_String = 5007; - int ETrackedDeviceProperty_Prop_NamedIconPathDeviceAlertLow_String = 5008; - int ETrackedDeviceProperty_Prop_DisplayHiddenArea_Binary_Start = 5100; - int ETrackedDeviceProperty_Prop_DisplayHiddenArea_Binary_End = 5150; - int ETrackedDeviceProperty_Prop_ParentContainer = 5151; - int ETrackedDeviceProperty_Prop_UserConfigPath_String = 6000; - int ETrackedDeviceProperty_Prop_InstallPath_String = 6001; - int ETrackedDeviceProperty_Prop_HasDisplayComponent_Bool = 6002; - int ETrackedDeviceProperty_Prop_HasControllerComponent_Bool = 6003; - int ETrackedDeviceProperty_Prop_HasCameraComponent_Bool = 6004; - int ETrackedDeviceProperty_Prop_HasDriverDirectModeComponent_Bool = 6005; - int ETrackedDeviceProperty_Prop_HasVirtualDisplayComponent_Bool = 6006; - int ETrackedDeviceProperty_Prop_HasSpatialAnchorsSupport_Bool = 6007; - int ETrackedDeviceProperty_Prop_ControllerType_String = 7000; - int ETrackedDeviceProperty_Prop_ControllerHandSelectionPriority_Int32 = 7002; - int ETrackedDeviceProperty_Prop_VendorSpecific_Reserved_Start = 10000; - int ETrackedDeviceProperty_Prop_VendorSpecific_Reserved_End = 10999; - int ETrackedDeviceProperty_Prop_TrackedDeviceProperty_Max = 1000000; - } - - public interface ETrackedPropertyError - { - int ETrackedPropertyError_TrackedProp_Success = 0; - int ETrackedPropertyError_TrackedProp_WrongDataType = 1; - int ETrackedPropertyError_TrackedProp_WrongDeviceClass = 2; - int ETrackedPropertyError_TrackedProp_BufferTooSmall = 3; - int ETrackedPropertyError_TrackedProp_UnknownProperty = 4; - int ETrackedPropertyError_TrackedProp_InvalidDevice = 5; - int ETrackedPropertyError_TrackedProp_CouldNotContactServer = 6; - int ETrackedPropertyError_TrackedProp_ValueNotProvidedByDevice = 7; - int ETrackedPropertyError_TrackedProp_StringExceedsMaximumLength = 8; - int ETrackedPropertyError_TrackedProp_NotYetAvailable = 9; - int ETrackedPropertyError_TrackedProp_PermissionDenied = 10; - int ETrackedPropertyError_TrackedProp_InvalidOperation = 11; - int ETrackedPropertyError_TrackedProp_CannotWriteToWildcards = 12; - int ETrackedPropertyError_TrackedProp_IPCReadFailure = 13; - } - - public interface ETrackingResult - { - int ETrackingResult_TrackingResult_Uninitialized = 1; - int ETrackingResult_TrackingResult_Calibrating_InProgress = 100; - int ETrackingResult_TrackingResult_Calibrating_OutOfRange = 101; - int ETrackingResult_TrackingResult_Running_OK = 200; - int ETrackingResult_TrackingResult_Running_OutOfRange = 201; - int ETrackingResult_TrackingResult_Fallback_RotationOnly = 300; - } - - public interface ETrackingUniverseOrigin - { - int ETrackingUniverseOrigin_TrackingUniverseSeated = 0; - int ETrackingUniverseOrigin_TrackingUniverseStanding = 1; - int ETrackingUniverseOrigin_TrackingUniverseRawAndUncalibrated = 2; - } - - public interface EVRApplicationError - { - int EVRApplicationError_VRApplicationError_None = 0; - int EVRApplicationError_VRApplicationError_AppKeyAlreadyExists = 100; - int EVRApplicationError_VRApplicationError_NoManifest = 101; - int EVRApplicationError_VRApplicationError_NoApplication = 102; - int EVRApplicationError_VRApplicationError_InvalidIndex = 103; - int EVRApplicationError_VRApplicationError_UnknownApplication = 104; - int EVRApplicationError_VRApplicationError_IPCFailed = 105; - int EVRApplicationError_VRApplicationError_ApplicationAlreadyRunning = 106; - int EVRApplicationError_VRApplicationError_InvalidManifest = 107; - int EVRApplicationError_VRApplicationError_InvalidApplication = 108; - int EVRApplicationError_VRApplicationError_LaunchFailed = 109; - int EVRApplicationError_VRApplicationError_ApplicationAlreadyStarting = 110; - int EVRApplicationError_VRApplicationError_LaunchInProgress = 111; - int EVRApplicationError_VRApplicationError_OldApplicationQuitting = 112; - int EVRApplicationError_VRApplicationError_TransitionAborted = 113; - int EVRApplicationError_VRApplicationError_IsTemplate = 114; - int EVRApplicationError_VRApplicationError_SteamVRIsExiting = 115; - int EVRApplicationError_VRApplicationError_BufferTooSmall = 200; - int EVRApplicationError_VRApplicationError_PropertyNotSet = 201; - int EVRApplicationError_VRApplicationError_UnknownProperty = 202; - int EVRApplicationError_VRApplicationError_InvalidParameter = 203; - } - - public interface EVRApplicationProperty - { - int EVRApplicationProperty_VRApplicationProperty_Name_String = 0; - int EVRApplicationProperty_VRApplicationProperty_LaunchType_String = 11; - int EVRApplicationProperty_VRApplicationProperty_WorkingDirectory_String = 12; - int EVRApplicationProperty_VRApplicationProperty_BinaryPath_String = 13; - int EVRApplicationProperty_VRApplicationProperty_Arguments_String = 14; - int EVRApplicationProperty_VRApplicationProperty_URL_String = 15; - int EVRApplicationProperty_VRApplicationProperty_Description_String = 50; - int EVRApplicationProperty_VRApplicationProperty_NewsURL_String = 51; - int EVRApplicationProperty_VRApplicationProperty_ImagePath_String = 52; - int EVRApplicationProperty_VRApplicationProperty_Source_String = 53; - int EVRApplicationProperty_VRApplicationProperty_ActionManifestURL_String = 54; - int EVRApplicationProperty_VRApplicationProperty_IsDashboardOverlay_Bool = 60; - int EVRApplicationProperty_VRApplicationProperty_IsTemplate_Bool = 61; - int EVRApplicationProperty_VRApplicationProperty_IsInstanced_Bool = 62; - int EVRApplicationProperty_VRApplicationProperty_IsInternal_Bool = 63; - int EVRApplicationProperty_VRApplicationProperty_WantsCompositorPauseInStandby_Bool = 64; - int EVRApplicationProperty_VRApplicationProperty_LastLaunchTime_Uint64 = 70; - } - - public interface EVRApplicationTransitionState - { - int EVRApplicationTransitionState_VRApplicationTransition_None = 0; - int EVRApplicationTransitionState_VRApplicationTransition_OldAppQuitSent = 10; - int EVRApplicationTransitionState_VRApplicationTransition_WaitingForExternalLaunch = 11; - int EVRApplicationTransitionState_VRApplicationTransition_NewAppLaunched = 20; - } - - public interface EVRApplicationType - { - int EVRApplicationType_VRApplication_Other = 0; - int EVRApplicationType_VRApplication_Scene = 1; - int EVRApplicationType_VRApplication_Overlay = 2; - int EVRApplicationType_VRApplication_Background = 3; - int EVRApplicationType_VRApplication_Utility = 4; - int EVRApplicationType_VRApplication_VRMonitor = 5; - int EVRApplicationType_VRApplication_SteamWatchdog = 6; - int EVRApplicationType_VRApplication_Bootstrapper = 7; - int EVRApplicationType_VRApplication_WebHelper = 8; - int EVRApplicationType_VRApplication_Max = 9; - } - - public interface EVRButtonId - { - int EVRButtonId_k_EButton_System = 0; - int EVRButtonId_k_EButton_ApplicationMenu = 1; - int EVRButtonId_k_EButton_Grip = 2; - int EVRButtonId_k_EButton_DPad_Left = 3; - int EVRButtonId_k_EButton_DPad_Up = 4; - int EVRButtonId_k_EButton_DPad_Right = 5; - int EVRButtonId_k_EButton_DPad_Down = 6; - int EVRButtonId_k_EButton_A = 7; - int EVRButtonId_k_EButton_ProximitySensor = 31; - int EVRButtonId_k_EButton_Axis0 = 32; - int EVRButtonId_k_EButton_Axis1 = 33; - int EVRButtonId_k_EButton_Axis2 = 34; - int EVRButtonId_k_EButton_Axis3 = 35; - int EVRButtonId_k_EButton_Axis4 = 36; - int EVRButtonId_k_EButton_SteamVR_Touchpad = 32; - int EVRButtonId_k_EButton_SteamVR_Trigger = 33; - int EVRButtonId_k_EButton_Dashboard_Back = 2; - int EVRButtonId_k_EButton_IndexController_A = 2; - int EVRButtonId_k_EButton_IndexController_B = 1; - int EVRButtonId_k_EButton_IndexController_JoyStick = 35; - int EVRButtonId_k_EButton_Max = 64; - } - - public interface EVRComponentProperty - { - int EVRComponentProperty_VRComponentProperty_IsStatic = 1; - int EVRComponentProperty_VRComponentProperty_IsVisible = 2; - int EVRComponentProperty_VRComponentProperty_IsTouched = 4; - int EVRComponentProperty_VRComponentProperty_IsPressed = 8; - int EVRComponentProperty_VRComponentProperty_IsScrolled = 16; - } - - public interface EVRCompositorError - { - int EVRCompositorError_VRCompositorError_None = 0; - int EVRCompositorError_VRCompositorError_RequestFailed = 1; - int EVRCompositorError_VRCompositorError_IncompatibleVersion = 100; - int EVRCompositorError_VRCompositorError_DoNotHaveFocus = 101; - int EVRCompositorError_VRCompositorError_InvalidTexture = 102; - int EVRCompositorError_VRCompositorError_IsNotSceneApplication = 103; - int EVRCompositorError_VRCompositorError_TextureIsOnWrongDevice = 104; - int EVRCompositorError_VRCompositorError_TextureUsesUnsupportedFormat = 105; - int EVRCompositorError_VRCompositorError_SharedTexturesNotSupported = 106; - int EVRCompositorError_VRCompositorError_IndexOutOfRange = 107; - int EVRCompositorError_VRCompositorError_AlreadySubmitted = 108; - int EVRCompositorError_VRCompositorError_InvalidBounds = 109; - } - - public interface EVRCompositorTimingMode - { - int EVRCompositorTimingMode_VRCompositorTimingMode_Implicit = 0; - int EVRCompositorTimingMode_VRCompositorTimingMode_Explicit_RuntimePerformsPostPresentHandoff = 1; - int EVRCompositorTimingMode_VRCompositorTimingMode_Explicit_ApplicationPerformsPostPresentHandoff = 2; - } - - public interface EVRControllerAxisType - { - int EVRControllerAxisType_k_eControllerAxis_None = 0; - int EVRControllerAxisType_k_eControllerAxis_TrackPad = 1; - int EVRControllerAxisType_k_eControllerAxis_Joystick = 2; - int EVRControllerAxisType_k_eControllerAxis_Trigger = 3; - } - - public interface EVRControllerEventOutputType - { - int EVRControllerEventOutputType_ControllerEventOutput_OSEvents = 0; - int EVRControllerEventOutputType_ControllerEventOutput_VREvents = 1; - } - - public interface EVRDistortionFunctionType - { - int EVRDistortionFunctionType_VRDistortionFunctionType_None = 0; - int EVRDistortionFunctionType_VRDistortionFunctionType_FTheta = 1; - int EVRDistortionFunctionType_VRDistortionFunctionType_Extended_FTheta = 2; - int EVRDistortionFunctionType_MAX_DISTORTION_FUNCTION_TYPES = 3; - } - - public interface EVREventType - { - int EVREventType_VREvent_None = 0; - int EVREventType_VREvent_TrackedDeviceActivated = 100; - int EVREventType_VREvent_TrackedDeviceDeactivated = 101; - int EVREventType_VREvent_TrackedDeviceUpdated = 102; - int EVREventType_VREvent_TrackedDeviceUserInteractionStarted = 103; - int EVREventType_VREvent_TrackedDeviceUserInteractionEnded = 104; - int EVREventType_VREvent_IpdChanged = 105; - int EVREventType_VREvent_EnterStandbyMode = 106; - int EVREventType_VREvent_LeaveStandbyMode = 107; - int EVREventType_VREvent_TrackedDeviceRoleChanged = 108; - int EVREventType_VREvent_WatchdogWakeUpRequested = 109; - int EVREventType_VREvent_LensDistortionChanged = 110; - int EVREventType_VREvent_PropertyChanged = 111; - int EVREventType_VREvent_WirelessDisconnect = 112; - int EVREventType_VREvent_WirelessReconnect = 113; - int EVREventType_VREvent_ButtonPress = 200; - int EVREventType_VREvent_ButtonUnpress = 201; - int EVREventType_VREvent_ButtonTouch = 202; - int EVREventType_VREvent_ButtonUntouch = 203; - int EVREventType_VREvent_DualAnalog_Press = 250; - int EVREventType_VREvent_DualAnalog_Unpress = 251; - int EVREventType_VREvent_DualAnalog_Touch = 252; - int EVREventType_VREvent_DualAnalog_Untouch = 253; - int EVREventType_VREvent_DualAnalog_Move = 254; - int EVREventType_VREvent_DualAnalog_ModeSwitch1 = 255; - int EVREventType_VREvent_DualAnalog_ModeSwitch2 = 256; - int EVREventType_VREvent_DualAnalog_Cancel = 257; - int EVREventType_VREvent_MouseMove = 300; - int EVREventType_VREvent_MouseButtonDown = 301; - int EVREventType_VREvent_MouseButtonUp = 302; - int EVREventType_VREvent_FocusEnter = 303; - int EVREventType_VREvent_FocusLeave = 304; - int EVREventType_VREvent_ScrollDiscrete = 305; - int EVREventType_VREvent_TouchPadMove = 306; - int EVREventType_VREvent_OverlayFocusChanged = 307; - int EVREventType_VREvent_ReloadOverlays = 308; - int EVREventType_VREvent_ScrollSmooth = 309; - int EVREventType_VREvent_InputFocusCaptured = 400; - int EVREventType_VREvent_InputFocusReleased = 401; - int EVREventType_VREvent_SceneFocusLost = 402; - int EVREventType_VREvent_SceneFocusGained = 403; - int EVREventType_VREvent_SceneApplicationChanged = 404; - int EVREventType_VREvent_SceneFocusChanged = 405; - int EVREventType_VREvent_InputFocusChanged = 406; - int EVREventType_VREvent_SceneApplicationSecondaryRenderingStarted = 407; - int EVREventType_VREvent_SceneApplicationUsingWrongGraphicsAdapter = 408; - int EVREventType_VREvent_ActionBindingReloaded = 409; - int EVREventType_VREvent_HideRenderModels = 410; - int EVREventType_VREvent_ShowRenderModels = 411; - int EVREventType_VREvent_ConsoleOpened = 420; - int EVREventType_VREvent_ConsoleClosed = 421; - int EVREventType_VREvent_OverlayShown = 500; - int EVREventType_VREvent_OverlayHidden = 501; - int EVREventType_VREvent_DashboardActivated = 502; - int EVREventType_VREvent_DashboardDeactivated = 503; - int EVREventType_VREvent_DashboardRequested = 505; - int EVREventType_VREvent_ResetDashboard = 506; - int EVREventType_VREvent_RenderToast = 507; - int EVREventType_VREvent_ImageLoaded = 508; - int EVREventType_VREvent_ShowKeyboard = 509; - int EVREventType_VREvent_HideKeyboard = 510; - int EVREventType_VREvent_OverlayGamepadFocusGained = 511; - int EVREventType_VREvent_OverlayGamepadFocusLost = 512; - int EVREventType_VREvent_OverlaySharedTextureChanged = 513; - int EVREventType_VREvent_ScreenshotTriggered = 516; - int EVREventType_VREvent_ImageFailed = 517; - int EVREventType_VREvent_DashboardOverlayCreated = 518; - int EVREventType_VREvent_SwitchGamepadFocus = 519; - int EVREventType_VREvent_RequestScreenshot = 520; - int EVREventType_VREvent_ScreenshotTaken = 521; - int EVREventType_VREvent_ScreenshotFailed = 522; - int EVREventType_VREvent_SubmitScreenshotToDashboard = 523; - int EVREventType_VREvent_ScreenshotProgressToDashboard = 524; - int EVREventType_VREvent_PrimaryDashboardDeviceChanged = 525; - int EVREventType_VREvent_RoomViewShown = 526; - int EVREventType_VREvent_RoomViewHidden = 527; - int EVREventType_VREvent_ShowUI = 528; - int EVREventType_VREvent_ShowDevTools = 529; - int EVREventType_VREvent_Notification_Shown = 600; - int EVREventType_VREvent_Notification_Hidden = 601; - int EVREventType_VREvent_Notification_BeginInteraction = 602; - int EVREventType_VREvent_Notification_Destroyed = 603; - int EVREventType_VREvent_Quit = 700; - int EVREventType_VREvent_ProcessQuit = 701; - int EVREventType_VREvent_QuitAborted_UserPrompt = 702; - int EVREventType_VREvent_QuitAcknowledged = 703; - int EVREventType_VREvent_DriverRequestedQuit = 704; - int EVREventType_VREvent_RestartRequested = 705; - int EVREventType_VREvent_ChaperoneDataHasChanged = 800; - int EVREventType_VREvent_ChaperoneUniverseHasChanged = 801; - int EVREventType_VREvent_ChaperoneTempDataHasChanged = 802; - int EVREventType_VREvent_ChaperoneSettingsHaveChanged = 803; - int EVREventType_VREvent_SeatedZeroPoseReset = 804; - int EVREventType_VREvent_ChaperoneFlushCache = 805; - int EVREventType_VREvent_ChaperoneRoomSetupStarting = 806; - int EVREventType_VREvent_ChaperoneRoomSetupFinished = 807; - int EVREventType_VREvent_AudioSettingsHaveChanged = 820; - int EVREventType_VREvent_BackgroundSettingHasChanged = 850; - int EVREventType_VREvent_CameraSettingsHaveChanged = 851; - int EVREventType_VREvent_ReprojectionSettingHasChanged = 852; - int EVREventType_VREvent_ModelSkinSettingsHaveChanged = 853; - int EVREventType_VREvent_EnvironmentSettingsHaveChanged = 854; - int EVREventType_VREvent_PowerSettingsHaveChanged = 855; - int EVREventType_VREvent_EnableHomeAppSettingsHaveChanged = 856; - int EVREventType_VREvent_SteamVRSectionSettingChanged = 857; - int EVREventType_VREvent_LighthouseSectionSettingChanged = 858; - int EVREventType_VREvent_NullSectionSettingChanged = 859; - int EVREventType_VREvent_UserInterfaceSectionSettingChanged = 860; - int EVREventType_VREvent_NotificationsSectionSettingChanged = 861; - int EVREventType_VREvent_KeyboardSectionSettingChanged = 862; - int EVREventType_VREvent_PerfSectionSettingChanged = 863; - int EVREventType_VREvent_DashboardSectionSettingChanged = 864; - int EVREventType_VREvent_WebInterfaceSectionSettingChanged = 865; - int EVREventType_VREvent_TrackersSectionSettingChanged = 866; - int EVREventType_VREvent_LastKnownSectionSettingChanged = 867; - int EVREventType_VREvent_DismissedWarningsSectionSettingChanged = 868; - int EVREventType_VREvent_StatusUpdate = 900; - int EVREventType_VREvent_WebInterface_InstallDriverCompleted = 950; - int EVREventType_VREvent_MCImageUpdated = 1000; - int EVREventType_VREvent_FirmwareUpdateStarted = 1100; - int EVREventType_VREvent_FirmwareUpdateFinished = 1101; - int EVREventType_VREvent_KeyboardClosed = 1200; - int EVREventType_VREvent_KeyboardCharInput = 1201; - int EVREventType_VREvent_KeyboardDone = 1202; - int EVREventType_VREvent_ApplicationTransitionStarted = 1300; - int EVREventType_VREvent_ApplicationTransitionAborted = 1301; - int EVREventType_VREvent_ApplicationTransitionNewAppStarted = 1302; - int EVREventType_VREvent_ApplicationListUpdated = 1303; - int EVREventType_VREvent_ApplicationMimeTypeLoad = 1304; - int EVREventType_VREvent_ApplicationTransitionNewAppLaunchComplete = 1305; - int EVREventType_VREvent_ProcessConnected = 1306; - int EVREventType_VREvent_ProcessDisconnected = 1307; - int EVREventType_VREvent_Compositor_MirrorWindowShown = 1400; - int EVREventType_VREvent_Compositor_MirrorWindowHidden = 1401; - int EVREventType_VREvent_Compositor_ChaperoneBoundsShown = 1410; - int EVREventType_VREvent_Compositor_ChaperoneBoundsHidden = 1411; - int EVREventType_VREvent_Compositor_DisplayDisconnected = 1412; - int EVREventType_VREvent_Compositor_DisplayReconnected = 1413; - int EVREventType_VREvent_Compositor_HDCPError = 1414; - int EVREventType_VREvent_Compositor_ApplicationNotResponding = 1415; - int EVREventType_VREvent_Compositor_ApplicationResumed = 1416; - int EVREventType_VREvent_Compositor_OutOfVideoMemory = 1417; - int EVREventType_VREvent_TrackedCamera_StartVideoStream = 1500; - int EVREventType_VREvent_TrackedCamera_StopVideoStream = 1501; - int EVREventType_VREvent_TrackedCamera_PauseVideoStream = 1502; - int EVREventType_VREvent_TrackedCamera_ResumeVideoStream = 1503; - int EVREventType_VREvent_TrackedCamera_EditingSurface = 1550; - int EVREventType_VREvent_PerformanceTest_EnableCapture = 1600; - int EVREventType_VREvent_PerformanceTest_DisableCapture = 1601; - int EVREventType_VREvent_PerformanceTest_FidelityLevel = 1602; - int EVREventType_VREvent_MessageOverlay_Closed = 1650; - int EVREventType_VREvent_MessageOverlayCloseRequested = 1651; - int EVREventType_VREvent_Input_HapticVibration = 1700; - int EVREventType_VREvent_Input_BindingLoadFailed = 1701; - int EVREventType_VREvent_Input_BindingLoadSuccessful = 1702; - int EVREventType_VREvent_Input_ActionManifestReloaded = 1703; - int EVREventType_VREvent_Input_ActionManifestLoadFailed = 1704; - int EVREventType_VREvent_Input_ProgressUpdate = 1705; - int EVREventType_VREvent_Input_TrackerActivated = 1706; - int EVREventType_VREvent_Input_BindingsUpdated = 1707; - int EVREventType_VREvent_SpatialAnchors_PoseUpdated = 1800; - int EVREventType_VREvent_SpatialAnchors_DescriptorUpdated = 1801; - int EVREventType_VREvent_SpatialAnchors_RequestPoseUpdate = 1802; - int EVREventType_VREvent_SpatialAnchors_RequestDescriptorUpdate = 1803; - int EVREventType_VREvent_SystemReport_Started = 1900; - int EVREventType_VREvent_VendorSpecific_Reserved_Start = 10000; - int EVREventType_VREvent_VendorSpecific_Reserved_End = 19999; - } - - public interface EVREye - { - int EVREye_Eye_Left = 0; - int EVREye_Eye_Right = 1; - } - - public interface EVRFinger - { - int EVRFinger_VRFinger_Thumb = 0; - int EVRFinger_VRFinger_Index = 1; - int EVRFinger_VRFinger_Middle = 2; - int EVRFinger_VRFinger_Ring = 3; - int EVRFinger_VRFinger_Pinky = 4; - int EVRFinger_VRFinger_Count = 5; - } - - public interface EVRFingerSplay - { - int EVRFingerSplay_VRFingerSplay_Thumb_Index = 0; - int EVRFingerSplay_VRFingerSplay_Index_Middle = 1; - int EVRFingerSplay_VRFingerSplay_Middle_Ring = 2; - int EVRFingerSplay_VRFingerSplay_Ring_Pinky = 3; - int EVRFingerSplay_VRFingerSplay_Count = 4; - } - - public interface EVRFirmwareError - { - int EVRFirmwareError_VRFirmwareError_None = 0; - int EVRFirmwareError_VRFirmwareError_Success = 1; - int EVRFirmwareError_VRFirmwareError_Fail = 2; - } - - public interface EVRInitError - { - int EVRInitError_VRInitError_None = 0; - int EVRInitError_VRInitError_Unknown = 1; - int EVRInitError_VRInitError_Init_InstallationNotFound = 100; - int EVRInitError_VRInitError_Init_InstallationCorrupt = 101; - int EVRInitError_VRInitError_Init_VRClientDLLNotFound = 102; - int EVRInitError_VRInitError_Init_FileNotFound = 103; - int EVRInitError_VRInitError_Init_FactoryNotFound = 104; - int EVRInitError_VRInitError_Init_InterfaceNotFound = 105; - int EVRInitError_VRInitError_Init_InvalidInterface = 106; - int EVRInitError_VRInitError_Init_UserConfigDirectoryInvalid = 107; - int EVRInitError_VRInitError_Init_HmdNotFound = 108; - int EVRInitError_VRInitError_Init_NotInitialized = 109; - int EVRInitError_VRInitError_Init_PathRegistryNotFound = 110; - int EVRInitError_VRInitError_Init_NoConfigPath = 111; - int EVRInitError_VRInitError_Init_NoLogPath = 112; - int EVRInitError_VRInitError_Init_PathRegistryNotWritable = 113; - int EVRInitError_VRInitError_Init_AppInfoInitFailed = 114; - int EVRInitError_VRInitError_Init_Retry = 115; - int EVRInitError_VRInitError_Init_InitCanceledByUser = 116; - int EVRInitError_VRInitError_Init_AnotherAppLaunching = 117; - int EVRInitError_VRInitError_Init_SettingsInitFailed = 118; - int EVRInitError_VRInitError_Init_ShuttingDown = 119; - int EVRInitError_VRInitError_Init_TooManyObjects = 120; - int EVRInitError_VRInitError_Init_NoServerForBackgroundApp = 121; - int EVRInitError_VRInitError_Init_NotSupportedWithCompositor = 122; - int EVRInitError_VRInitError_Init_NotAvailableToUtilityApps = 123; - int EVRInitError_VRInitError_Init_Internal = 124; - int EVRInitError_VRInitError_Init_HmdDriverIdIsNone = 125; - int EVRInitError_VRInitError_Init_HmdNotFoundPresenceFailed = 126; - int EVRInitError_VRInitError_Init_VRMonitorNotFound = 127; - int EVRInitError_VRInitError_Init_VRMonitorStartupFailed = 128; - int EVRInitError_VRInitError_Init_LowPowerWatchdogNotSupported = 129; - int EVRInitError_VRInitError_Init_InvalidApplicationType = 130; - int EVRInitError_VRInitError_Init_NotAvailableToWatchdogApps = 131; - int EVRInitError_VRInitError_Init_WatchdogDisabledInSettings = 132; - int EVRInitError_VRInitError_Init_VRDashboardNotFound = 133; - int EVRInitError_VRInitError_Init_VRDashboardStartupFailed = 134; - int EVRInitError_VRInitError_Init_VRHomeNotFound = 135; - int EVRInitError_VRInitError_Init_VRHomeStartupFailed = 136; - int EVRInitError_VRInitError_Init_RebootingBusy = 137; - int EVRInitError_VRInitError_Init_FirmwareUpdateBusy = 138; - int EVRInitError_VRInitError_Init_FirmwareRecoveryBusy = 139; - int EVRInitError_VRInitError_Init_USBServiceBusy = 140; - int EVRInitError_VRInitError_Init_VRWebHelperStartupFailed = 141; - int EVRInitError_VRInitError_Init_TrackerManagerInitFailed = 142; - int EVRInitError_VRInitError_Init_AlreadyRunning = 143; - int EVRInitError_VRInitError_Init_FailedForVrMonitor = 144; - int EVRInitError_VRInitError_Driver_Failed = 200; - int EVRInitError_VRInitError_Driver_Unknown = 201; - int EVRInitError_VRInitError_Driver_HmdUnknown = 202; - int EVRInitError_VRInitError_Driver_NotLoaded = 203; - int EVRInitError_VRInitError_Driver_RuntimeOutOfDate = 204; - int EVRInitError_VRInitError_Driver_HmdInUse = 205; - int EVRInitError_VRInitError_Driver_NotCalibrated = 206; - int EVRInitError_VRInitError_Driver_CalibrationInvalid = 207; - int EVRInitError_VRInitError_Driver_HmdDisplayNotFound = 208; - int EVRInitError_VRInitError_Driver_TrackedDeviceInterfaceUnknown = 209; - int EVRInitError_VRInitError_Driver_HmdDriverIdOutOfBounds = 211; - int EVRInitError_VRInitError_Driver_HmdDisplayMirrored = 212; - int EVRInitError_VRInitError_Driver_HmdDisplayNotFoundLaptop = 213; - int EVRInitError_VRInitError_IPC_ServerInitFailed = 300; - int EVRInitError_VRInitError_IPC_ConnectFailed = 301; - int EVRInitError_VRInitError_IPC_SharedStateInitFailed = 302; - int EVRInitError_VRInitError_IPC_CompositorInitFailed = 303; - int EVRInitError_VRInitError_IPC_MutexInitFailed = 304; - int EVRInitError_VRInitError_IPC_Failed = 305; - int EVRInitError_VRInitError_IPC_CompositorConnectFailed = 306; - int EVRInitError_VRInitError_IPC_CompositorInvalidConnectResponse = 307; - int EVRInitError_VRInitError_IPC_ConnectFailedAfterMultipleAttempts = 308; - int EVRInitError_VRInitError_Compositor_Failed = 400; - int EVRInitError_VRInitError_Compositor_D3D11HardwareRequired = 401; - int EVRInitError_VRInitError_Compositor_FirmwareRequiresUpdate = 402; - int EVRInitError_VRInitError_Compositor_OverlayInitFailed = 403; - int EVRInitError_VRInitError_Compositor_ScreenshotsInitFailed = 404; - int EVRInitError_VRInitError_Compositor_UnableToCreateDevice = 405; - int EVRInitError_VRInitError_Compositor_SharedStateIsNull = 406; - int EVRInitError_VRInitError_Compositor_NotificationManagerIsNull = 407; - int EVRInitError_VRInitError_Compositor_ResourceManagerClientIsNull = 408; - int EVRInitError_VRInitError_Compositor_MessageOverlaySharedStateInitFailure = 409; - int EVRInitError_VRInitError_Compositor_PropertiesInterfaceIsNull = 410; - int EVRInitError_VRInitError_Compositor_CreateFullscreenWindowFailed = 411; - int EVRInitError_VRInitError_Compositor_SettingsInterfaceIsNull = 412; - int EVRInitError_VRInitError_Compositor_FailedToShowWindow = 413; - int EVRInitError_VRInitError_Compositor_DistortInterfaceIsNull = 414; - int EVRInitError_VRInitError_Compositor_DisplayFrequencyFailure = 415; - int EVRInitError_VRInitError_Compositor_RendererInitializationFailed = 416; - int EVRInitError_VRInitError_Compositor_DXGIFactoryInterfaceIsNull = 417; - int EVRInitError_VRInitError_Compositor_DXGIFactoryCreateFailed = 418; - int EVRInitError_VRInitError_Compositor_DXGIFactoryQueryFailed = 419; - int EVRInitError_VRInitError_Compositor_InvalidAdapterDesktop = 420; - int EVRInitError_VRInitError_Compositor_InvalidHmdAttachment = 421; - int EVRInitError_VRInitError_Compositor_InvalidOutputDesktop = 422; - int EVRInitError_VRInitError_Compositor_InvalidDeviceProvided = 423; - int EVRInitError_VRInitError_Compositor_D3D11RendererInitializationFailed = 424; - int EVRInitError_VRInitError_Compositor_FailedToFindDisplayMode = 425; - int EVRInitError_VRInitError_Compositor_FailedToCreateSwapChain = 426; - int EVRInitError_VRInitError_Compositor_FailedToGetBackBuffer = 427; - int EVRInitError_VRInitError_Compositor_FailedToCreateRenderTarget = 428; - int EVRInitError_VRInitError_Compositor_FailedToCreateDXGI2SwapChain = 429; - int EVRInitError_VRInitError_Compositor_FailedtoGetDXGI2BackBuffer = 430; - int EVRInitError_VRInitError_Compositor_FailedToCreateDXGI2RenderTarget = 431; - int EVRInitError_VRInitError_Compositor_FailedToGetDXGIDeviceInterface = 432; - int EVRInitError_VRInitError_Compositor_SelectDisplayMode = 433; - int EVRInitError_VRInitError_Compositor_FailedToCreateNvAPIRenderTargets = 434; - int EVRInitError_VRInitError_Compositor_NvAPISetDisplayMode = 435; - int EVRInitError_VRInitError_Compositor_FailedToCreateDirectModeDisplay = 436; - int EVRInitError_VRInitError_Compositor_InvalidHmdPropertyContainer = 437; - int EVRInitError_VRInitError_Compositor_UpdateDisplayFrequency = 438; - int EVRInitError_VRInitError_Compositor_CreateRasterizerState = 439; - int EVRInitError_VRInitError_Compositor_CreateWireframeRasterizerState = 440; - int EVRInitError_VRInitError_Compositor_CreateSamplerState = 441; - int EVRInitError_VRInitError_Compositor_CreateClampToBorderSamplerState = 442; - int EVRInitError_VRInitError_Compositor_CreateAnisoSamplerState = 443; - int EVRInitError_VRInitError_Compositor_CreateOverlaySamplerState = 444; - int EVRInitError_VRInitError_Compositor_CreatePanoramaSamplerState = 445; - int EVRInitError_VRInitError_Compositor_CreateFontSamplerState = 446; - int EVRInitError_VRInitError_Compositor_CreateNoBlendState = 447; - int EVRInitError_VRInitError_Compositor_CreateBlendState = 448; - int EVRInitError_VRInitError_Compositor_CreateAlphaBlendState = 449; - int EVRInitError_VRInitError_Compositor_CreateBlendStateMaskR = 450; - int EVRInitError_VRInitError_Compositor_CreateBlendStateMaskG = 451; - int EVRInitError_VRInitError_Compositor_CreateBlendStateMaskB = 452; - int EVRInitError_VRInitError_Compositor_CreateDepthStencilState = 453; - int EVRInitError_VRInitError_Compositor_CreateDepthStencilStateNoWrite = 454; - int EVRInitError_VRInitError_Compositor_CreateDepthStencilStateNoDepth = 455; - int EVRInitError_VRInitError_Compositor_CreateFlushTexture = 456; - int EVRInitError_VRInitError_Compositor_CreateDistortionSurfaces = 457; - int EVRInitError_VRInitError_Compositor_CreateConstantBuffer = 458; - int EVRInitError_VRInitError_Compositor_CreateHmdPoseConstantBuffer = 459; - int EVRInitError_VRInitError_Compositor_CreateHmdPoseStagingConstantBuffer = 460; - int EVRInitError_VRInitError_Compositor_CreateSharedFrameInfoConstantBuffer = 461; - int EVRInitError_VRInitError_Compositor_CreateOverlayConstantBuffer = 462; - int EVRInitError_VRInitError_Compositor_CreateSceneTextureIndexConstantBuffer = 463; - int EVRInitError_VRInitError_Compositor_CreateReadableSceneTextureIndexConstantBuffer = 464; - int EVRInitError_VRInitError_Compositor_CreateLayerGraphicsTextureIndexConstantBuffer = 465; - int EVRInitError_VRInitError_Compositor_CreateLayerComputeTextureIndexConstantBuffer = 466; - int EVRInitError_VRInitError_Compositor_CreateLayerComputeSceneTextureIndexConstantBuffer = 467; - int EVRInitError_VRInitError_Compositor_CreateComputeHmdPoseConstantBuffer = 468; - int EVRInitError_VRInitError_Compositor_CreateGeomConstantBuffer = 469; - int EVRInitError_VRInitError_Compositor_CreatePanelMaskConstantBuffer = 470; - int EVRInitError_VRInitError_Compositor_CreatePixelSimUBO = 471; - int EVRInitError_VRInitError_Compositor_CreateMSAARenderTextures = 472; - int EVRInitError_VRInitError_Compositor_CreateResolveRenderTextures = 473; - int EVRInitError_VRInitError_Compositor_CreateComputeResolveRenderTextures = 474; - int EVRInitError_VRInitError_Compositor_CreateDriverDirectModeResolveTextures = 475; - int EVRInitError_VRInitError_Compositor_OpenDriverDirectModeResolveTextures = 476; - int EVRInitError_VRInitError_Compositor_CreateFallbackSyncTexture = 477; - int EVRInitError_VRInitError_Compositor_ShareFallbackSyncTexture = 478; - int EVRInitError_VRInitError_Compositor_CreateOverlayIndexBuffer = 479; - int EVRInitError_VRInitError_Compositor_CreateOverlayVertextBuffer = 480; - int EVRInitError_VRInitError_Compositor_CreateTextVertexBuffer = 481; - int EVRInitError_VRInitError_Compositor_CreateTextIndexBuffer = 482; - int EVRInitError_VRInitError_Compositor_CreateMirrorTextures = 483; - int EVRInitError_VRInitError_Compositor_CreateLastFrameRenderTexture = 484; - int EVRInitError_VRInitError_VendorSpecific_UnableToConnectToOculusRuntime = 1000; - int EVRInitError_VRInitError_VendorSpecific_WindowsNotInDevMode = 1001; - int EVRInitError_VRInitError_VendorSpecific_HmdFound_CantOpenDevice = 1101; - int EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart = 1102; - int EVRInitError_VRInitError_VendorSpecific_HmdFound_NoStoredConfig = 1103; - int EVRInitError_VRInitError_VendorSpecific_HmdFound_ConfigTooBig = 1104; - int EVRInitError_VRInitError_VendorSpecific_HmdFound_ConfigTooSmall = 1105; - int EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToInitZLib = 1106; - int EVRInitError_VRInitError_VendorSpecific_HmdFound_CantReadFirmwareVersion = 1107; - int EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToSendUserDataStart = 1108; - int EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataStart = 1109; - int EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataNext = 1110; - int EVRInitError_VRInitError_VendorSpecific_HmdFound_UserDataAddressRange = 1111; - int EVRInitError_VRInitError_VendorSpecific_HmdFound_UserDataError = 1112; - int EVRInitError_VRInitError_VendorSpecific_HmdFound_ConfigFailedSanityCheck = 1113; - int EVRInitError_VRInitError_Steam_SteamInstallationNotFound = 2000; - int EVRInitError_VRInitError_LastError = 2001; - } - - public interface EVRInputError - { - int EVRInputError_VRInputError_None = 0; - int EVRInputError_VRInputError_NameNotFound = 1; - int EVRInputError_VRInputError_WrongType = 2; - int EVRInputError_VRInputError_InvalidHandle = 3; - int EVRInputError_VRInputError_InvalidParam = 4; - int EVRInputError_VRInputError_NoSteam = 5; - int EVRInputError_VRInputError_MaxCapacityReached = 6; - int EVRInputError_VRInputError_IPCError = 7; - int EVRInputError_VRInputError_NoActiveActionSet = 8; - int EVRInputError_VRInputError_InvalidDevice = 9; - int EVRInputError_VRInputError_InvalidSkeleton = 10; - int EVRInputError_VRInputError_InvalidBoneCount = 11; - int EVRInputError_VRInputError_InvalidCompressedData = 12; - int EVRInputError_VRInputError_NoData = 13; - int EVRInputError_VRInputError_BufferTooSmall = 14; - int EVRInputError_VRInputError_MismatchedActionManifest = 15; - int EVRInputError_VRInputError_MissingSkeletonData = 16; - int EVRInputError_VRInputError_InvalidBoneIndex = 17; - } - - public interface EVRInputFilterCancelType - { - int EVRInputFilterCancelType_VRInputFilterCancel_Timers = 0; - int EVRInputFilterCancelType_VRInputFilterCancel_Momentum = 1; - } - - public interface EVRInputStringBits - { - int EVRInputStringBits_VRInputString_Hand = 1; - int EVRInputStringBits_VRInputString_ControllerType = 2; - int EVRInputStringBits_VRInputString_InputSource = 4; - int EVRInputStringBits_VRInputString_All = -1; - } - - public interface EVRMouseButton - { - int EVRMouseButton_VRMouseButton_Left = 1; - int EVRMouseButton_VRMouseButton_Right = 2; - int EVRMouseButton_VRMouseButton_Middle = 4; - } - - public interface EVRMuraCorrectionMode - { - int EVRMuraCorrectionMode_Default = 0; - int EVRMuraCorrectionMode_NoCorrection = 1; - } - - public interface EVRNotificationError - { - int EVRNotificationError_VRNotificationError_OK = 0; - int EVRNotificationError_VRNotificationError_InvalidNotificationId = 100; - int EVRNotificationError_VRNotificationError_NotificationQueueFull = 101; - int EVRNotificationError_VRNotificationError_InvalidOverlayHandle = 102; - int EVRNotificationError_VRNotificationError_SystemWithUserValueAlreadyExists = 103; - } - - public interface EVRNotificationStyle - { - int EVRNotificationStyle_None = 0; - int EVRNotificationStyle_Application = 100; - int EVRNotificationStyle_Contact_Disabled = 200; - int EVRNotificationStyle_Contact_Enabled = 201; - int EVRNotificationStyle_Contact_Active = 202; - } - - public interface EVRNotificationType - { - int EVRNotificationType_Transient = 0; - int EVRNotificationType_Persistent = 1; - int EVRNotificationType_Transient_SystemWithUserValue = 2; - } - - public interface EVROverlayError - { - int EVROverlayError_VROverlayError_None = 0; - int EVROverlayError_VROverlayError_UnknownOverlay = 10; - int EVROverlayError_VROverlayError_InvalidHandle = 11; - int EVROverlayError_VROverlayError_PermissionDenied = 12; - int EVROverlayError_VROverlayError_OverlayLimitExceeded = 13; - int EVROverlayError_VROverlayError_WrongVisibilityType = 14; - int EVROverlayError_VROverlayError_KeyTooLong = 15; - int EVROverlayError_VROverlayError_NameTooLong = 16; - int EVROverlayError_VROverlayError_KeyInUse = 17; - int EVROverlayError_VROverlayError_WrongTransformType = 18; - int EVROverlayError_VROverlayError_InvalidTrackedDevice = 19; - int EVROverlayError_VROverlayError_InvalidParameter = 20; - int EVROverlayError_VROverlayError_ThumbnailCantBeDestroyed = 21; - int EVROverlayError_VROverlayError_ArrayTooSmall = 22; - int EVROverlayError_VROverlayError_RequestFailed = 23; - int EVROverlayError_VROverlayError_InvalidTexture = 24; - int EVROverlayError_VROverlayError_UnableToLoadFile = 25; - int EVROverlayError_VROverlayError_KeyboardAlreadyInUse = 26; - int EVROverlayError_VROverlayError_NoNeighbor = 27; - int EVROverlayError_VROverlayError_TooManyMaskPrimitives = 29; - int EVROverlayError_VROverlayError_BadMaskPrimitive = 30; - int EVROverlayError_VROverlayError_TextureAlreadyLocked = 31; - int EVROverlayError_VROverlayError_TextureLockCapacityReached = 32; - int EVROverlayError_VROverlayError_TextureNotLocked = 33; - } - - public interface EVROverlayIntersectionMaskPrimitiveType - { - int EVROverlayIntersectionMaskPrimitiveType_OverlayIntersectionPrimitiveType_Rectangle = 0; - int EVROverlayIntersectionMaskPrimitiveType_OverlayIntersectionPrimitiveType_Circle = 1; - } - - public interface EVRRenderModelError - { - int EVRRenderModelError_VRRenderModelError_None = 0; - int EVRRenderModelError_VRRenderModelError_Loading = 100; - int EVRRenderModelError_VRRenderModelError_NotSupported = 200; - int EVRRenderModelError_VRRenderModelError_InvalidArg = 300; - int EVRRenderModelError_VRRenderModelError_InvalidModel = 301; - int EVRRenderModelError_VRRenderModelError_NoShapes = 302; - int EVRRenderModelError_VRRenderModelError_MultipleShapes = 303; - int EVRRenderModelError_VRRenderModelError_TooManyVertices = 304; - int EVRRenderModelError_VRRenderModelError_MultipleTextures = 305; - int EVRRenderModelError_VRRenderModelError_BufferTooSmall = 306; - int EVRRenderModelError_VRRenderModelError_NotEnoughNormals = 307; - int EVRRenderModelError_VRRenderModelError_NotEnoughTexCoords = 308; - int EVRRenderModelError_VRRenderModelError_InvalidTexture = 400; - } - - public interface EVRScreenshotError - { - int EVRScreenshotError_VRScreenshotError_None = 0; - int EVRScreenshotError_VRScreenshotError_RequestFailed = 1; - int EVRScreenshotError_VRScreenshotError_IncompatibleVersion = 100; - int EVRScreenshotError_VRScreenshotError_NotFound = 101; - int EVRScreenshotError_VRScreenshotError_BufferTooSmall = 102; - int EVRScreenshotError_VRScreenshotError_ScreenshotAlreadyInProgress = 108; - } - - public interface EVRScreenshotPropertyFilenames - { - int EVRScreenshotPropertyFilenames_VRScreenshotPropertyFilenames_Preview = 0; - int EVRScreenshotPropertyFilenames_VRScreenshotPropertyFilenames_VR = 1; - } - - public interface EVRScreenshotType - { - int EVRScreenshotType_VRScreenshotType_None = 0; - int EVRScreenshotType_VRScreenshotType_Mono = 1; - int EVRScreenshotType_VRScreenshotType_Stereo = 2; - int EVRScreenshotType_VRScreenshotType_Cubemap = 3; - int EVRScreenshotType_VRScreenshotType_MonoPanorama = 4; - int EVRScreenshotType_VRScreenshotType_StereoPanorama = 5; - } - - public interface EVRSettingsError - { - int EVRSettingsError_VRSettingsError_None = 0; - int EVRSettingsError_VRSettingsError_IPCFailed = 1; - int EVRSettingsError_VRSettingsError_WriteFailed = 2; - int EVRSettingsError_VRSettingsError_ReadFailed = 3; - int EVRSettingsError_VRSettingsError_JsonParseFailed = 4; - int EVRSettingsError_VRSettingsError_UnsetSettingHasNoDefault = 5; - } - - public interface EVRSkeletalMotionRange - { - int EVRSkeletalMotionRange_VRSkeletalMotionRange_WithController = 0; - int EVRSkeletalMotionRange_VRSkeletalMotionRange_WithoutController = 1; - } - - public interface EVRSkeletalReferencePose - { - int EVRSkeletalReferencePose_VRSkeletalReferencePose_BindPose = 0; - int EVRSkeletalReferencePose_VRSkeletalReferencePose_OpenHand = 1; - int EVRSkeletalReferencePose_VRSkeletalReferencePose_Fist = 2; - int EVRSkeletalReferencePose_VRSkeletalReferencePose_GripLimit = 3; - } - - public interface EVRSkeletalTrackingLevel - { - int EVRSkeletalTrackingLevel_VRSkeletalTracking_Estimated = 0; - int EVRSkeletalTrackingLevel_VRSkeletalTracking_Partial = 1; - int EVRSkeletalTrackingLevel_VRSkeletalTracking_Full = 2; - int EVRSkeletalTrackingLevel_VRSkeletalTrackingLevel_Count = 3; - int EVRSkeletalTrackingLevel_VRSkeletalTrackingLevel_Max = 2; - } - - public interface EVRSkeletalTransformSpace - { - int EVRSkeletalTransformSpace_VRSkeletalTransformSpace_Model = 0; - int EVRSkeletalTransformSpace_VRSkeletalTransformSpace_Parent = 1; - } - - public interface EVRSpatialAnchorError - { - int EVRSpatialAnchorError_VRSpatialAnchorError_Success = 0; - int EVRSpatialAnchorError_VRSpatialAnchorError_Internal = 1; - int EVRSpatialAnchorError_VRSpatialAnchorError_UnknownHandle = 2; - int EVRSpatialAnchorError_VRSpatialAnchorError_ArrayTooSmall = 3; - int EVRSpatialAnchorError_VRSpatialAnchorError_InvalidDescriptorChar = 4; - int EVRSpatialAnchorError_VRSpatialAnchorError_NotYetAvailable = 5; - int EVRSpatialAnchorError_VRSpatialAnchorError_NotAvailableInThisUniverse = 6; - int EVRSpatialAnchorError_VRSpatialAnchorError_PermanentlyUnavailable = 7; - int EVRSpatialAnchorError_VRSpatialAnchorError_WrongDriver = 8; - int EVRSpatialAnchorError_VRSpatialAnchorError_DescriptorTooLong = 9; - int EVRSpatialAnchorError_VRSpatialAnchorError_Unknown = 10; - int EVRSpatialAnchorError_VRSpatialAnchorError_NoRoomCalibration = 11; - int EVRSpatialAnchorError_VRSpatialAnchorError_InvalidArgument = 12; - int EVRSpatialAnchorError_VRSpatialAnchorError_UnknownDriver = 13; - } - - public interface EVRState - { - int EVRState_VRState_Undefined = -1; - int EVRState_VRState_Off = 0; - int EVRState_VRState_Searching = 1; - int EVRState_VRState_Searching_Alert = 2; - int EVRState_VRState_Ready = 3; - int EVRState_VRState_Ready_Alert = 4; - int EVRState_VRState_NotReady = 5; - int EVRState_VRState_Standby = 6; - int EVRState_VRState_Ready_Alert_Low = 7; - } - - public interface EVRSubmitFlags - { - int EVRSubmitFlags_Submit_Default = 0; - int EVRSubmitFlags_Submit_LensDistortionAlreadyApplied = 1; - int EVRSubmitFlags_Submit_GlRenderBuffer = 2; - int EVRSubmitFlags_Submit_Reserved = 4; - int EVRSubmitFlags_Submit_TextureWithPose = 8; - int EVRSubmitFlags_Submit_TextureWithDepth = 16; - } - - public interface EVRSummaryType - { - int EVRSummaryType_VRSummaryType_FromAnimation = 0; - int EVRSummaryType_VRSummaryType_FromDevice = 1; - } - - public interface EVRTrackedCameraError - { - int EVRTrackedCameraError_VRTrackedCameraError_None = 0; - int EVRTrackedCameraError_VRTrackedCameraError_OperationFailed = 100; - int EVRTrackedCameraError_VRTrackedCameraError_InvalidHandle = 101; - int EVRTrackedCameraError_VRTrackedCameraError_InvalidFrameHeaderVersion = 102; - int EVRTrackedCameraError_VRTrackedCameraError_OutOfHandles = 103; - int EVRTrackedCameraError_VRTrackedCameraError_IPCFailure = 104; - int EVRTrackedCameraError_VRTrackedCameraError_NotSupportedForThisDevice = 105; - int EVRTrackedCameraError_VRTrackedCameraError_SharedMemoryFailure = 106; - int EVRTrackedCameraError_VRTrackedCameraError_FrameBufferingFailure = 107; - int EVRTrackedCameraError_VRTrackedCameraError_StreamSetupFailure = 108; - int EVRTrackedCameraError_VRTrackedCameraError_InvalidGLTextureId = 109; - int EVRTrackedCameraError_VRTrackedCameraError_InvalidSharedTextureHandle = 110; - int EVRTrackedCameraError_VRTrackedCameraError_FailedToGetGLTextureId = 111; - int EVRTrackedCameraError_VRTrackedCameraError_SharedTextureFailure = 112; - int EVRTrackedCameraError_VRTrackedCameraError_NoFrameAvailable = 113; - int EVRTrackedCameraError_VRTrackedCameraError_InvalidArgument = 114; - int EVRTrackedCameraError_VRTrackedCameraError_InvalidFrameBufferSize = 115; - } - - public interface EVRTrackedCameraFrameLayout - { - int EVRTrackedCameraFrameLayout_Mono = 1; - int EVRTrackedCameraFrameLayout_Stereo = 2; - int EVRTrackedCameraFrameLayout_VerticalLayout = 16; - int EVRTrackedCameraFrameLayout_HorizontalLayout = 32; - } - - public interface EVRTrackedCameraFrameType - { - int EVRTrackedCameraFrameType_VRTrackedCameraFrameType_Distorted = 0; - int EVRTrackedCameraFrameType_VRTrackedCameraFrameType_Undistorted = 1; - int EVRTrackedCameraFrameType_VRTrackedCameraFrameType_MaximumUndistorted = 2; - int EVRTrackedCameraFrameType_MAX_CAMERA_FRAME_TYPES = 3; - } - - public interface EVSync - { - int EVSync_VSync_None = 0; - int EVSync_VSync_WaitRender = 1; - int EVSync_VSync_NoWaitRender = 2; - } - - public static class ID3D12CommandQueue extends PointerType - { - public ID3D12CommandQueue(Pointer address) - { - super(address); - } - - public ID3D12CommandQueue() - { - } - } - - public static class ID3D12Resource extends PointerType - { - public ID3D12Resource(Pointer address) - { - super(address); - } - - public ID3D12Resource() - { - } - } - - public interface Imu_OffScaleFlags - { - int Imu_OffScaleFlags_OffScale_AccelX = 1; - int Imu_OffScaleFlags_OffScale_AccelY = 2; - int Imu_OffScaleFlags_OffScale_AccelZ = 4; - int Imu_OffScaleFlags_OffScale_GyroX = 8; - int Imu_OffScaleFlags_OffScale_GyroY = 16; - int Imu_OffScaleFlags_OffScale_GyroZ = 32; - } - - public interface VRMessageOverlayResponse - { - int VRMessageOverlayResponse_ButtonPress_0 = 0; - int VRMessageOverlayResponse_ButtonPress_1 = 1; - int VRMessageOverlayResponse_ButtonPress_2 = 2; - int VRMessageOverlayResponse_ButtonPress_3 = 3; - int VRMessageOverlayResponse_CouldntFindSystemOverlay = 4; - int VRMessageOverlayResponse_CouldntFindOrCreateClientOverlay = 5; - int VRMessageOverlayResponse_ApplicationQuit = 6; - } - - public interface VROverlayFlags - { - int VROverlayFlags_None = 0; - int VROverlayFlags_Curved = 1; - int VROverlayFlags_RGSS4X = 2; - int VROverlayFlags_NoDashboardTab = 3; - int VROverlayFlags_AcceptsGamepadEvents = 4; - int VROverlayFlags_ShowGamepadFocus = 5; - int VROverlayFlags_SendVRDiscreteScrollEvents = 6; - int VROverlayFlags_SendVRTouchpadEvents = 7; - int VROverlayFlags_ShowTouchPadScrollWheel = 8; - int VROverlayFlags_TransferOwnershipToInternalProcess = 9; - int VROverlayFlags_SideBySide_Parallel = 10; - int VROverlayFlags_SideBySide_Crossed = 11; - int VROverlayFlags_Panorama = 12; - int VROverlayFlags_StereoPanorama = 13; - int VROverlayFlags_SortWithNonSceneOverlays = 14; - int VROverlayFlags_VisibleInDashboard = 15; - int VROverlayFlags_MakeOverlaysInteractiveIfVisible = 16; - int VROverlayFlags_SendVRSmoothScrollEvents = 17; - } - - public interface VROverlayInputMethod - { - int VROverlayInputMethod_None = 0; - int VROverlayInputMethod_Mouse = 1; - int VROverlayInputMethod_DualAnalog = 2; - } - - public interface VROverlayTransformType - { - int VROverlayTransformType_VROverlayTransform_Absolute = 0; - int VROverlayTransformType_VROverlayTransform_TrackedDeviceRelative = 1; - int VROverlayTransformType_VROverlayTransform_SystemOverlay = 2; - int VROverlayTransformType_VROverlayTransform_TrackedComponent = 3; - } - - public static class VkDevice_T extends PointerType - { - public VkDevice_T(Pointer address) - { - super(address); - } - - public VkDevice_T() - { - } - } - - public static class VkInstance_T extends PointerType - { - public VkInstance_T(Pointer address) - { - super(address); - } - - public VkInstance_T() - { - } - } - - public static class VkPhysicalDevice_T extends PointerType - { - public VkPhysicalDevice_T(Pointer address) - { - super(address); - } - - public VkPhysicalDevice_T() - { - } - } - - public static class VkQueue_T extends PointerType - { - public VkQueue_T(Pointer address) - { - super(address); - } - - public VkQueue_T() - { - } - } -} diff --git a/common/src/main/java/jopenvr/MispackedStructure.java b/common/src/main/java/jopenvr/MispackedStructure.java deleted file mode 100644 index 4258dabd1..000000000 --- a/common/src/main/java/jopenvr/MispackedStructure.java +++ /dev/null @@ -1,30 +0,0 @@ -package jopenvr; - -import com.sun.jna.Platform; -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -abstract class MispackedStructure extends Structure -{ - protected MispackedStructure() - { - } - - protected MispackedStructure(Pointer peer) - { - super(peer); - } - - protected int getNativeAlignment(Class type, Object value, boolean isFirstElement) - { - if (!Platform.isLinux() && !Platform.isMac()) - { - return super.getNativeAlignment(type, value, isFirstElement); - } - else - { - int i = super.getNativeAlignment(type, value, isFirstElement); - return i > 4 ? 4 : i; - } - } -} diff --git a/common/src/main/java/jopenvr/NativeLong64.java b/common/src/main/java/jopenvr/NativeLong64.java deleted file mode 100644 index 37d0ae3e9..000000000 --- a/common/src/main/java/jopenvr/NativeLong64.java +++ /dev/null @@ -1,18 +0,0 @@ -package jopenvr; - -import com.sun.jna.IntegerType; - -public class NativeLong64 extends IntegerType -{ - public static final int SIZE = 8; - - public NativeLong64() - { - this(0L); - } - - public NativeLong64(long value) - { - super(8, value); - } -} diff --git a/common/src/main/java/jopenvr/NotificationBitmap_t.java b/common/src/main/java/jopenvr/NotificationBitmap_t.java deleted file mode 100644 index 739e76d99..000000000 --- a/common/src/main/java/jopenvr/NotificationBitmap_t.java +++ /dev/null @@ -1,45 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class NotificationBitmap_t extends Structure -{ - public Pointer m_pImageData; - public int m_nWidth; - public int m_nHeight; - public int m_nBytesPerPixel; - - public NotificationBitmap_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("m_pImageData", "m_nWidth", "m_nHeight", "m_nBytesPerPixel"); - } - - public NotificationBitmap_t(Pointer m_pImageData, int m_nWidth, int m_nHeight, int m_nBytesPerPixel) - { - this.m_pImageData = m_pImageData; - this.m_nWidth = m_nWidth; - this.m_nHeight = m_nHeight; - this.m_nBytesPerPixel = m_nBytesPerPixel; - } - - public NotificationBitmap_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends NotificationBitmap_t implements Structure.ByReference - { - } - - public static class ByValue extends NotificationBitmap_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/RenderModel_ComponentState_t.java b/common/src/main/java/jopenvr/RenderModel_ComponentState_t.java deleted file mode 100644 index d7c29e5b7..000000000 --- a/common/src/main/java/jopenvr/RenderModel_ComponentState_t.java +++ /dev/null @@ -1,43 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class RenderModel_ComponentState_t extends Structure -{ - public HmdMatrix34_t mTrackingToComponentRenderModel; - public HmdMatrix34_t mTrackingToComponentLocal; - public int uProperties; - - public RenderModel_ComponentState_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("mTrackingToComponentRenderModel", "mTrackingToComponentLocal", "uProperties"); - } - - public RenderModel_ComponentState_t(HmdMatrix34_t mTrackingToComponentRenderModel, HmdMatrix34_t mTrackingToComponentLocal, int uProperties) - { - this.mTrackingToComponentRenderModel = mTrackingToComponentRenderModel; - this.mTrackingToComponentLocal = mTrackingToComponentLocal; - this.uProperties = uProperties; - } - - public RenderModel_ComponentState_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends RenderModel_ComponentState_t implements Structure.ByReference - { - } - - public static class ByValue extends RenderModel_ComponentState_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/RenderModel_ControllerMode_State_t.java b/common/src/main/java/jopenvr/RenderModel_ControllerMode_State_t.java deleted file mode 100644 index 62f4270a6..000000000 --- a/common/src/main/java/jopenvr/RenderModel_ControllerMode_State_t.java +++ /dev/null @@ -1,39 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class RenderModel_ControllerMode_State_t extends Structure -{ - public byte bScrollWheelVisible; - - public RenderModel_ControllerMode_State_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("bScrollWheelVisible"); - } - - public RenderModel_ControllerMode_State_t(byte bScrollWheelVisible) - { - this.bScrollWheelVisible = bScrollWheelVisible; - } - - public RenderModel_ControllerMode_State_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends RenderModel_ControllerMode_State_t implements Structure.ByReference - { - } - - public static class ByValue extends RenderModel_ControllerMode_State_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/RenderModel_TextureMap_t.java b/common/src/main/java/jopenvr/RenderModel_TextureMap_t.java deleted file mode 100644 index a32ae814c..000000000 --- a/common/src/main/java/jopenvr/RenderModel_TextureMap_t.java +++ /dev/null @@ -1,42 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; - -import java.util.Arrays; -import java.util.List; - -public class RenderModel_TextureMap_t extends MispackedStructure -{ - public short unWidth; - public short unHeight; - public Pointer rubTextureMapData; - - public RenderModel_TextureMap_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("unWidth", "unHeight", "rubTextureMapData"); - } - - public RenderModel_TextureMap_t(short unWidth, short unHeight, Pointer rubTextureMapData) - { - this.unWidth = unWidth; - this.unHeight = unHeight; - this.rubTextureMapData = rubTextureMapData; - } - - public RenderModel_TextureMap_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends RenderModel_TextureMap_t implements com.sun.jna.Structure.ByReference - { - } - - public static class ByValue extends RenderModel_TextureMap_t implements com.sun.jna.Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/RenderModel_Vertex_t.java b/common/src/main/java/jopenvr/RenderModel_Vertex_t.java deleted file mode 100644 index 56b42abd9..000000000 --- a/common/src/main/java/jopenvr/RenderModel_Vertex_t.java +++ /dev/null @@ -1,51 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class RenderModel_Vertex_t extends Structure -{ - public HmdVector3_t vPosition; - public HmdVector3_t vNormal; - public float[] rfTextureCoord = new float[2]; - - public RenderModel_Vertex_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("vPosition", "vNormal", "rfTextureCoord"); - } - - public RenderModel_Vertex_t(HmdVector3_t vPosition, HmdVector3_t vNormal, float[] rfTextureCoord) - { - this.vPosition = vPosition; - this.vNormal = vNormal; - - if (rfTextureCoord.length != this.rfTextureCoord.length) - { - throw new IllegalArgumentException("Wrong array size !"); - } - else - { - this.rfTextureCoord = rfTextureCoord; - } - } - - public RenderModel_Vertex_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends RenderModel_Vertex_t implements Structure.ByReference - { - } - - public static class ByValue extends RenderModel_Vertex_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/RenderModel_t.java b/common/src/main/java/jopenvr/RenderModel_t.java deleted file mode 100644 index 1e9790bbc..000000000 --- a/common/src/main/java/jopenvr/RenderModel_t.java +++ /dev/null @@ -1,47 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.ptr.ShortByReference; - -import java.util.Arrays; -import java.util.List; - -public class RenderModel_t extends MispackedStructure -{ - public RenderModel_Vertex_t.ByReference rVertexData; - public int unVertexCount; - public ShortByReference rIndexData; - public int unTriangleCount; - public int diffuseTextureId; - - public RenderModel_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("rVertexData", "unVertexCount", "rIndexData", "unTriangleCount", "diffuseTextureId"); - } - - public RenderModel_t(RenderModel_Vertex_t.ByReference rVertexData, int unVertexCount, ShortByReference rIndexData, int unTriangleCount, int diffuseTextureId) - { - this.rVertexData = rVertexData; - this.unVertexCount = unVertexCount; - this.rIndexData = rIndexData; - this.unTriangleCount = unTriangleCount; - this.diffuseTextureId = diffuseTextureId; - } - - public RenderModel_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends RenderModel_t implements com.sun.jna.Structure.ByReference - { - } - - public static class ByValue extends RenderModel_t implements com.sun.jna.Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/SpatialAnchorPose_t.java b/common/src/main/java/jopenvr/SpatialAnchorPose_t.java deleted file mode 100644 index 53c10add9..000000000 --- a/common/src/main/java/jopenvr/SpatialAnchorPose_t.java +++ /dev/null @@ -1,39 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class SpatialAnchorPose_t extends Structure -{ - public HmdMatrix34_t mAnchorToAbsoluteTracking; - - public SpatialAnchorPose_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("mAnchorToAbsoluteTracking"); - } - - public SpatialAnchorPose_t(HmdMatrix34_t mAnchorToAbsoluteTracking) - { - this.mAnchorToAbsoluteTracking = mAnchorToAbsoluteTracking; - } - - public SpatialAnchorPose_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends SpatialAnchorPose_t implements Structure.ByReference - { - } - - public static class ByValue extends SpatialAnchorPose_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/Texture_t.java b/common/src/main/java/jopenvr/Texture_t.java deleted file mode 100644 index ceb85e218..000000000 --- a/common/src/main/java/jopenvr/Texture_t.java +++ /dev/null @@ -1,43 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class Texture_t extends Structure -{ - public Pointer handle; - public int eType; - public int eColorSpace; - - public Texture_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("handle", "eType", "eColorSpace"); - } - - public Texture_t(Pointer handle, int eType, int eColorSpace) - { - this.handle = handle; - this.eType = eType; - this.eColorSpace = eColorSpace; - } - - public Texture_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends Texture_t implements Structure.ByReference - { - } - - public static class ByValue extends Texture_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/TrackedDevicePose_t.java b/common/src/main/java/jopenvr/TrackedDevicePose_t.java deleted file mode 100644 index af2dccbef..000000000 --- a/common/src/main/java/jopenvr/TrackedDevicePose_t.java +++ /dev/null @@ -1,49 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class TrackedDevicePose_t extends Structure -{ - public HmdMatrix34_t mDeviceToAbsoluteTracking; - public HmdVector3_t vVelocity; - public HmdVector3_t vAngularVelocity; - public int eTrackingResult; - public byte bPoseIsValid; - public byte bDeviceIsConnected; - - public TrackedDevicePose_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("mDeviceToAbsoluteTracking", "vVelocity", "vAngularVelocity", "eTrackingResult", "bPoseIsValid", "bDeviceIsConnected"); - } - - public TrackedDevicePose_t(HmdMatrix34_t mDeviceToAbsoluteTracking, HmdVector3_t vVelocity, HmdVector3_t vAngularVelocity, int eTrackingResult, byte bPoseIsValid, byte bDeviceIsConnected) - { - this.mDeviceToAbsoluteTracking = mDeviceToAbsoluteTracking; - this.vVelocity = vVelocity; - this.vAngularVelocity = vAngularVelocity; - this.eTrackingResult = eTrackingResult; - this.bPoseIsValid = bPoseIsValid; - this.bDeviceIsConnected = bDeviceIsConnected; - } - - public TrackedDevicePose_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends TrackedDevicePose_t implements Structure.ByReference - { - } - - public static class ByValue extends TrackedDevicePose_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VRActiveActionSet_t.java b/common/src/main/java/jopenvr/VRActiveActionSet_t.java deleted file mode 100644 index 8da7f9f7f..000000000 --- a/common/src/main/java/jopenvr/VRActiveActionSet_t.java +++ /dev/null @@ -1,47 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VRActiveActionSet_t extends Structure -{ - public long ulActionSet; - public long ulRestrictedToDevice; - public long ulSecondaryActionSet; - public int unPadding; - public int nPriority; - - public VRActiveActionSet_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("ulActionSet", "ulRestrictedToDevice", "ulSecondaryActionSet", "unPadding", "nPriority"); - } - - public VRActiveActionSet_t(long ulActionSet, long ulRestrictedToDevice, long ulSecondaryActionSet, int unPadding, int nPriority) - { - this.ulActionSet = ulActionSet; - this.ulRestrictedToDevice = ulRestrictedToDevice; - this.ulSecondaryActionSet = ulSecondaryActionSet; - this.unPadding = unPadding; - this.nPriority = nPriority; - } - - public VRActiveActionSet_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VRActiveActionSet_t implements Structure.ByReference - { - } - - public static class ByValue extends VRActiveActionSet_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VRBoneTransform_t.java b/common/src/main/java/jopenvr/VRBoneTransform_t.java deleted file mode 100644 index d2d5c25fd..000000000 --- a/common/src/main/java/jopenvr/VRBoneTransform_t.java +++ /dev/null @@ -1,41 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VRBoneTransform_t extends Structure -{ - public HmdVector4_t position; - public HmdQuaternionf_t orientation; - - public VRBoneTransform_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("position", "orientation"); - } - - public VRBoneTransform_t(HmdVector4_t position, HmdQuaternionf_t orientation) - { - this.position = position; - this.orientation = orientation; - } - - public VRBoneTransform_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VRBoneTransform_t implements Structure.ByReference - { - } - - public static class ByValue extends VRBoneTransform_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VRControllerAxis_t.java b/common/src/main/java/jopenvr/VRControllerAxis_t.java deleted file mode 100644 index 1dd0c1ac6..000000000 --- a/common/src/main/java/jopenvr/VRControllerAxis_t.java +++ /dev/null @@ -1,41 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VRControllerAxis_t extends Structure -{ - public float x; - public float y; - - public VRControllerAxis_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("x", "y"); - } - - public VRControllerAxis_t(float x, float y) - { - this.x = x; - this.y = y; - } - - public VRControllerAxis_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VRControllerAxis_t implements Structure.ByReference - { - } - - public static class ByValue extends VRControllerAxis_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VRControllerState_t.java b/common/src/main/java/jopenvr/VRControllerState_t.java deleted file mode 100644 index 54d8d3380..000000000 --- a/common/src/main/java/jopenvr/VRControllerState_t.java +++ /dev/null @@ -1,52 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; - -import java.util.Arrays; -import java.util.List; - -public class VRControllerState_t extends MispackedStructure -{ - public int unPacketNum; - public long ulButtonPressed; - public long ulButtonTouched; - public VRControllerAxis_t[] rAxis = new VRControllerAxis_t[5]; - - public VRControllerState_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("unPacketNum", "ulButtonPressed", "ulButtonTouched", "rAxis"); - } - - public VRControllerState_t(int unPacketNum, long ulButtonPressed, long ulButtonTouched, VRControllerAxis_t[] rAxis) - { - this.unPacketNum = unPacketNum; - this.ulButtonPressed = ulButtonPressed; - this.ulButtonTouched = ulButtonTouched; - - if (rAxis.length != this.rAxis.length) - { - throw new IllegalArgumentException("Wrong array size !"); - } - else - { - this.rAxis = rAxis; - } - } - - public VRControllerState_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VRControllerState_t implements com.sun.jna.Structure.ByReference - { - } - - public static class ByValue extends VRControllerState_t implements com.sun.jna.Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_ApplicationLaunch_t.java b/common/src/main/java/jopenvr/VREvent_ApplicationLaunch_t.java deleted file mode 100644 index 2f0c2d8de..000000000 --- a/common/src/main/java/jopenvr/VREvent_ApplicationLaunch_t.java +++ /dev/null @@ -1,41 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_ApplicationLaunch_t extends Structure -{ - public int pid; - public int unArgsHandle; - - public VREvent_ApplicationLaunch_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("pid", "unArgsHandle"); - } - - public VREvent_ApplicationLaunch_t(int pid, int unArgsHandle) - { - this.pid = pid; - this.unArgsHandle = unArgsHandle; - } - - public VREvent_ApplicationLaunch_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_ApplicationLaunch_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_ApplicationLaunch_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_Chaperone_t.java b/common/src/main/java/jopenvr/VREvent_Chaperone_t.java deleted file mode 100644 index 290316e9e..000000000 --- a/common/src/main/java/jopenvr/VREvent_Chaperone_t.java +++ /dev/null @@ -1,41 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_Chaperone_t extends Structure -{ - public long m_nPreviousUniverse; - public long m_nCurrentUniverse; - - public VREvent_Chaperone_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("m_nPreviousUniverse", "m_nCurrentUniverse"); - } - - public VREvent_Chaperone_t(long m_nPreviousUniverse, long m_nCurrentUniverse) - { - this.m_nPreviousUniverse = m_nPreviousUniverse; - this.m_nCurrentUniverse = m_nCurrentUniverse; - } - - public VREvent_Chaperone_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_Chaperone_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_Chaperone_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_Controller_t.java b/common/src/main/java/jopenvr/VREvent_Controller_t.java deleted file mode 100644 index 447b389a5..000000000 --- a/common/src/main/java/jopenvr/VREvent_Controller_t.java +++ /dev/null @@ -1,39 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_Controller_t extends Structure -{ - public int button; - - public VREvent_Controller_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("button"); - } - - public VREvent_Controller_t(int button) - { - this.button = button; - } - - public VREvent_Controller_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_Controller_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_Controller_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_Data_t.java b/common/src/main/java/jopenvr/VREvent_Data_t.java deleted file mode 100644 index eaf69afcd..000000000 --- a/common/src/main/java/jopenvr/VREvent_Data_t.java +++ /dev/null @@ -1,207 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Union; - -public class VREvent_Data_t extends Union -{ - public VREvent_Reserved_t reserved; - public VREvent_Controller_t controller; - public VREvent_Mouse_t mouse; - public VREvent_Scroll_t scroll; - public VREvent_Process_t process; - public VREvent_Notification_t notification; - public VREvent_Overlay_t overlay; - public VREvent_Status_t status; - public VREvent_Keyboard_t keyboard; - public VREvent_Ipd_t ipd; - public VREvent_Chaperone_t chaperone; - public VREvent_PerformanceTest_t performanceTest; - public VREvent_TouchPadMove_t touchPadMove; - public VREvent_SeatedZeroPoseReset_t seatedZeroPoseReset; - public VREvent_Screenshot_t screenshot; - public VREvent_ScreenshotProgress_t screenshotProgress; - public VREvent_ApplicationLaunch_t applicationLaunch; - public VREvent_EditingCameraSurface_t cameraSurface; - public VREvent_MessageOverlay_t messageOverlay; - public VREvent_Property_t property; - public VREvent_DualAnalog_t dualAnalog; - public VREvent_HapticVibration_t hapticVibration; - public VREvent_WebConsole_t webConsole; - public VREvent_InputBindingLoad_t inputBinding; - public VREvent_InputActionManifestLoad_t actionManifest; - public VREvent_SpatialAnchor_t spatialAnchor; - - public VREvent_Data_t() - { - } - - public VREvent_Data_t(VREvent_Reserved_t reserved) - { - this.reserved = reserved; - this.setType(VREvent_Reserved_t.class); - } - - public VREvent_Data_t(VREvent_Controller_t controller) - { - this.controller = controller; - this.setType(VREvent_Controller_t.class); - } - - public VREvent_Data_t(VREvent_Mouse_t mouse) - { - this.mouse = mouse; - this.setType(VREvent_Mouse_t.class); - } - - public VREvent_Data_t(VREvent_Scroll_t scroll) - { - this.scroll = scroll; - this.setType(VREvent_Scroll_t.class); - } - - public VREvent_Data_t(VREvent_Process_t process) - { - this.process = process; - this.setType(VREvent_Process_t.class); - } - - public VREvent_Data_t(VREvent_Notification_t notification) - { - this.notification = notification; - this.setType(VREvent_Notification_t.class); - } - - public VREvent_Data_t(VREvent_Overlay_t overlay) - { - this.overlay = overlay; - this.setType(VREvent_Overlay_t.class); - } - - public VREvent_Data_t(VREvent_Status_t status) - { - this.status = status; - this.setType(VREvent_Status_t.class); - } - - public VREvent_Data_t(VREvent_Keyboard_t keyboard) - { - this.keyboard = keyboard; - this.setType(VREvent_Keyboard_t.class); - } - - public VREvent_Data_t(VREvent_Ipd_t ipd) - { - this.ipd = ipd; - this.setType(VREvent_Ipd_t.class); - } - - public VREvent_Data_t(VREvent_Chaperone_t chaperone) - { - this.chaperone = chaperone; - this.setType(VREvent_Chaperone_t.class); - } - - public VREvent_Data_t(VREvent_PerformanceTest_t performanceTest) - { - this.performanceTest = performanceTest; - this.setType(VREvent_PerformanceTest_t.class); - } - - public VREvent_Data_t(VREvent_TouchPadMove_t touchPadMove) - { - this.touchPadMove = touchPadMove; - this.setType(VREvent_TouchPadMove_t.class); - } - - public VREvent_Data_t(VREvent_SeatedZeroPoseReset_t seatedZeroPoseReset) - { - this.seatedZeroPoseReset = seatedZeroPoseReset; - this.setType(VREvent_SeatedZeroPoseReset_t.class); - } - - public VREvent_Data_t(VREvent_Screenshot_t screenshot) - { - this.screenshot = screenshot; - this.setType(VREvent_Screenshot_t.class); - } - - public VREvent_Data_t(VREvent_ScreenshotProgress_t screenshotProgress) - { - this.screenshotProgress = screenshotProgress; - this.setType(VREvent_ScreenshotProgress_t.class); - } - - public VREvent_Data_t(VREvent_ApplicationLaunch_t applicationLaunch) - { - this.applicationLaunch = applicationLaunch; - this.setType(VREvent_ApplicationLaunch_t.class); - } - - public VREvent_Data_t(VREvent_EditingCameraSurface_t cameraSurface) - { - this.cameraSurface = cameraSurface; - this.setType(VREvent_EditingCameraSurface_t.class); - } - - public VREvent_Data_t(VREvent_MessageOverlay_t messageOverlay) - { - this.messageOverlay = messageOverlay; - this.setType(VREvent_MessageOverlay_t.class); - } - - public VREvent_Data_t(VREvent_Property_t property) - { - this.property = property; - this.setType(VREvent_Property_t.class); - } - - public VREvent_Data_t(VREvent_DualAnalog_t dualAnalog) - { - this.dualAnalog = dualAnalog; - this.setType(VREvent_DualAnalog_t.class); - } - - public VREvent_Data_t(VREvent_HapticVibration_t hapticVibration) - { - this.hapticVibration = hapticVibration; - this.setType(VREvent_HapticVibration_t.class); - } - - public VREvent_Data_t(VREvent_WebConsole_t webConsole) - { - this.webConsole = webConsole; - this.setType(VREvent_WebConsole_t.class); - } - - public VREvent_Data_t(VREvent_InputBindingLoad_t inputBinding) - { - this.inputBinding = inputBinding; - this.setType(VREvent_InputBindingLoad_t.class); - } - - public VREvent_Data_t(VREvent_InputActionManifestLoad_t actionManifest) - { - this.actionManifest = actionManifest; - this.setType(VREvent_InputActionManifestLoad_t.class); - } - - public VREvent_Data_t(VREvent_SpatialAnchor_t spatialAnchor) - { - this.spatialAnchor = spatialAnchor; - this.setType(VREvent_SpatialAnchor_t.class); - } - - public VREvent_Data_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_Data_t implements com.sun.jna.Structure.ByReference - { - } - - public static class ByValue extends VREvent_Data_t implements com.sun.jna.Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_DualAnalog_t.java b/common/src/main/java/jopenvr/VREvent_DualAnalog_t.java deleted file mode 100644 index 609d6c2d2..000000000 --- a/common/src/main/java/jopenvr/VREvent_DualAnalog_t.java +++ /dev/null @@ -1,47 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_DualAnalog_t extends Structure -{ - public float x; - public float y; - public float transformedX; - public float transformedY; - public int which; - - public VREvent_DualAnalog_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("x", "y", "transformedX", "transformedY", "which"); - } - - public VREvent_DualAnalog_t(float x, float y, float transformedX, float transformedY, int which) - { - this.x = x; - this.y = y; - this.transformedX = transformedX; - this.transformedY = transformedY; - this.which = which; - } - - public VREvent_DualAnalog_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_DualAnalog_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_DualAnalog_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_EditingCameraSurface_t.java b/common/src/main/java/jopenvr/VREvent_EditingCameraSurface_t.java deleted file mode 100644 index 1971e3c6b..000000000 --- a/common/src/main/java/jopenvr/VREvent_EditingCameraSurface_t.java +++ /dev/null @@ -1,41 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_EditingCameraSurface_t extends Structure -{ - public long overlayHandle; - public int nVisualMode; - - public VREvent_EditingCameraSurface_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("overlayHandle", "nVisualMode"); - } - - public VREvent_EditingCameraSurface_t(long overlayHandle, int nVisualMode) - { - this.overlayHandle = overlayHandle; - this.nVisualMode = nVisualMode; - } - - public VREvent_EditingCameraSurface_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_EditingCameraSurface_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_EditingCameraSurface_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_HDCPError_t.java b/common/src/main/java/jopenvr/VREvent_HDCPError_t.java deleted file mode 100644 index 61342af7c..000000000 --- a/common/src/main/java/jopenvr/VREvent_HDCPError_t.java +++ /dev/null @@ -1,39 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_HDCPError_t extends Structure -{ - public int eCode; - - public VREvent_HDCPError_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("eCode"); - } - - public VREvent_HDCPError_t(int eCode) - { - this.eCode = eCode; - } - - public VREvent_HDCPError_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_HDCPError_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_HDCPError_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_HapticVibration_t.java b/common/src/main/java/jopenvr/VREvent_HapticVibration_t.java deleted file mode 100644 index 0493fd6a5..000000000 --- a/common/src/main/java/jopenvr/VREvent_HapticVibration_t.java +++ /dev/null @@ -1,47 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_HapticVibration_t extends Structure -{ - public long containerHandle; - public long componentHandle; - public float fDurationSeconds; - public float fFrequency; - public float fAmplitude; - - public VREvent_HapticVibration_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("containerHandle", "componentHandle", "fDurationSeconds", "fFrequency", "fAmplitude"); - } - - public VREvent_HapticVibration_t(long containerHandle, long componentHandle, float fDurationSeconds, float fFrequency, float fAmplitude) - { - this.containerHandle = containerHandle; - this.componentHandle = componentHandle; - this.fDurationSeconds = fDurationSeconds; - this.fFrequency = fFrequency; - this.fAmplitude = fAmplitude; - } - - public VREvent_HapticVibration_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_HapticVibration_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_HapticVibration_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_InputActionManifestLoad_t.java b/common/src/main/java/jopenvr/VREvent_InputActionManifestLoad_t.java deleted file mode 100644 index 1f05cbfab..000000000 --- a/common/src/main/java/jopenvr/VREvent_InputActionManifestLoad_t.java +++ /dev/null @@ -1,45 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_InputActionManifestLoad_t extends Structure -{ - public long pathAppKey; - public long pathMessage; - public long pathMessageParam; - public long pathManifestPath; - - public VREvent_InputActionManifestLoad_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("pathAppKey", "pathMessage", "pathMessageParam", "pathManifestPath"); - } - - public VREvent_InputActionManifestLoad_t(long pathAppKey, long pathMessage, long pathMessageParam, long pathManifestPath) - { - this.pathAppKey = pathAppKey; - this.pathMessage = pathMessage; - this.pathMessageParam = pathMessageParam; - this.pathManifestPath = pathManifestPath; - } - - public VREvent_InputActionManifestLoad_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_InputActionManifestLoad_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_InputActionManifestLoad_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_InputBindingLoad_t.java b/common/src/main/java/jopenvr/VREvent_InputBindingLoad_t.java deleted file mode 100644 index 36ef8c5e4..000000000 --- a/common/src/main/java/jopenvr/VREvent_InputBindingLoad_t.java +++ /dev/null @@ -1,45 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_InputBindingLoad_t extends Structure -{ - public long ulAppContainer; - public long pathMessage; - public long pathUrl; - public long pathControllerType; - - public VREvent_InputBindingLoad_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("ulAppContainer", "pathMessage", "pathUrl", "pathControllerType"); - } - - public VREvent_InputBindingLoad_t(long ulAppContainer, long pathMessage, long pathUrl, long pathControllerType) - { - this.ulAppContainer = ulAppContainer; - this.pathMessage = pathMessage; - this.pathUrl = pathUrl; - this.pathControllerType = pathControllerType; - } - - public VREvent_InputBindingLoad_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_InputBindingLoad_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_InputBindingLoad_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_Ipd_t.java b/common/src/main/java/jopenvr/VREvent_Ipd_t.java deleted file mode 100644 index 905b03a99..000000000 --- a/common/src/main/java/jopenvr/VREvent_Ipd_t.java +++ /dev/null @@ -1,39 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_Ipd_t extends Structure -{ - public float ipdMeters; - - public VREvent_Ipd_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("ipdMeters"); - } - - public VREvent_Ipd_t(float ipdMeters) - { - this.ipdMeters = ipdMeters; - } - - public VREvent_Ipd_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_Ipd_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_Ipd_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_Keyboard_t.java b/common/src/main/java/jopenvr/VREvent_Keyboard_t.java deleted file mode 100644 index 29593e877..000000000 --- a/common/src/main/java/jopenvr/VREvent_Keyboard_t.java +++ /dev/null @@ -1,48 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_Keyboard_t extends Structure -{ - public byte[] cNewInput = new byte[8]; - public long uUserValue; - - public VREvent_Keyboard_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("cNewInput", "uUserValue"); - } - - public VREvent_Keyboard_t(byte[] cNewInput, long uUserValue) - { - if (cNewInput.length != this.cNewInput.length) - { - throw new IllegalArgumentException("Wrong array size !"); - } - else - { - this.cNewInput = cNewInput; - this.uUserValue = uUserValue; - } - } - - public VREvent_Keyboard_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_Keyboard_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_Keyboard_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_MessageOverlay_t.java b/common/src/main/java/jopenvr/VREvent_MessageOverlay_t.java deleted file mode 100644 index ca69595f6..000000000 --- a/common/src/main/java/jopenvr/VREvent_MessageOverlay_t.java +++ /dev/null @@ -1,39 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_MessageOverlay_t extends Structure -{ - public int unVRMessageOverlayResponse; - - public VREvent_MessageOverlay_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("unVRMessageOverlayResponse"); - } - - public VREvent_MessageOverlay_t(int unVRMessageOverlayResponse) - { - this.unVRMessageOverlayResponse = unVRMessageOverlayResponse; - } - - public VREvent_MessageOverlay_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_MessageOverlay_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_MessageOverlay_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_Mouse_t.java b/common/src/main/java/jopenvr/VREvent_Mouse_t.java deleted file mode 100644 index 577f0e5c4..000000000 --- a/common/src/main/java/jopenvr/VREvent_Mouse_t.java +++ /dev/null @@ -1,43 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_Mouse_t extends Structure -{ - public float x; - public float y; - public int button; - - public VREvent_Mouse_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("x", "y", "button"); - } - - public VREvent_Mouse_t(float x, float y, int button) - { - this.x = x; - this.y = y; - this.button = button; - } - - public VREvent_Mouse_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_Mouse_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_Mouse_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_Notification_t.java b/common/src/main/java/jopenvr/VREvent_Notification_t.java deleted file mode 100644 index ab9f1d4e8..000000000 --- a/common/src/main/java/jopenvr/VREvent_Notification_t.java +++ /dev/null @@ -1,41 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_Notification_t extends Structure -{ - public long ulUserValue; - public int notificationId; - - public VREvent_Notification_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("ulUserValue", "notificationId"); - } - - public VREvent_Notification_t(long ulUserValue, int notificationId) - { - this.ulUserValue = ulUserValue; - this.notificationId = notificationId; - } - - public VREvent_Notification_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_Notification_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_Notification_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_Overlay_t.java b/common/src/main/java/jopenvr/VREvent_Overlay_t.java deleted file mode 100644 index 66a81c998..000000000 --- a/common/src/main/java/jopenvr/VREvent_Overlay_t.java +++ /dev/null @@ -1,41 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_Overlay_t extends Structure -{ - public long overlayHandle; - public long devicePath; - - public VREvent_Overlay_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("overlayHandle", "devicePath"); - } - - public VREvent_Overlay_t(long overlayHandle, long devicePath) - { - this.overlayHandle = overlayHandle; - this.devicePath = devicePath; - } - - public VREvent_Overlay_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_Overlay_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_Overlay_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_PerformanceTest_t.java b/common/src/main/java/jopenvr/VREvent_PerformanceTest_t.java deleted file mode 100644 index 3624aed06..000000000 --- a/common/src/main/java/jopenvr/VREvent_PerformanceTest_t.java +++ /dev/null @@ -1,39 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_PerformanceTest_t extends Structure -{ - public int m_nFidelityLevel; - - public VREvent_PerformanceTest_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("m_nFidelityLevel"); - } - - public VREvent_PerformanceTest_t(int m_nFidelityLevel) - { - this.m_nFidelityLevel = m_nFidelityLevel; - } - - public VREvent_PerformanceTest_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_PerformanceTest_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_PerformanceTest_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_Process_t.java b/common/src/main/java/jopenvr/VREvent_Process_t.java deleted file mode 100644 index 5821e7b77..000000000 --- a/common/src/main/java/jopenvr/VREvent_Process_t.java +++ /dev/null @@ -1,45 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_Process_t extends Structure -{ - public int pid; - public int oldPid; - public byte bForced; - public byte bConnectionLost; - - public VREvent_Process_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("pid", "oldPid", "bForced", "bConnectionLost"); - } - - public VREvent_Process_t(int pid, int oldPid, byte bForced, byte bConnectionLost) - { - this.pid = pid; - this.oldPid = oldPid; - this.bForced = bForced; - this.bConnectionLost = bConnectionLost; - } - - public VREvent_Process_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_Process_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_Process_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_ProgressUpdate_t.java b/common/src/main/java/jopenvr/VREvent_ProgressUpdate_t.java deleted file mode 100644 index 04ff37016..000000000 --- a/common/src/main/java/jopenvr/VREvent_ProgressUpdate_t.java +++ /dev/null @@ -1,49 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_ProgressUpdate_t extends Structure -{ - public long ulApplicationPropertyContainer; - public long pathDevice; - public long pathInputSource; - public long pathProgressAction; - public long pathIcon; - public float fProgress; - - public VREvent_ProgressUpdate_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("ulApplicationPropertyContainer", "pathDevice", "pathInputSource", "pathProgressAction", "pathIcon", "fProgress"); - } - - public VREvent_ProgressUpdate_t(long ulApplicationPropertyContainer, long pathDevice, long pathInputSource, long pathProgressAction, long pathIcon, float fProgress) - { - this.ulApplicationPropertyContainer = ulApplicationPropertyContainer; - this.pathDevice = pathDevice; - this.pathInputSource = pathInputSource; - this.pathProgressAction = pathProgressAction; - this.pathIcon = pathIcon; - this.fProgress = fProgress; - } - - public VREvent_ProgressUpdate_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_ProgressUpdate_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_ProgressUpdate_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_Property_t.java b/common/src/main/java/jopenvr/VREvent_Property_t.java deleted file mode 100644 index 9c142843e..000000000 --- a/common/src/main/java/jopenvr/VREvent_Property_t.java +++ /dev/null @@ -1,41 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_Property_t extends Structure -{ - public long container; - public int prop; - - public VREvent_Property_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("container", "prop"); - } - - public VREvent_Property_t(long container, int prop) - { - this.container = container; - this.prop = prop; - } - - public VREvent_Property_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_Property_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_Property_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_Reserved_t.java b/common/src/main/java/jopenvr/VREvent_Reserved_t.java deleted file mode 100644 index 11c4fbdf8..000000000 --- a/common/src/main/java/jopenvr/VREvent_Reserved_t.java +++ /dev/null @@ -1,49 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_Reserved_t extends Structure -{ - public long reserved0; - public long reserved1; - public long reserved2; - public long reserved3; - public long reserved4; - public long reserved5; - - public VREvent_Reserved_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("reserved0", "reserved1", "reserved2", "reserved3", "reserved4", "reserved5"); - } - - public VREvent_Reserved_t(long reserved0, long reserved1, long reserved2, long reserved3, long reserved4, long reserved5) - { - this.reserved0 = reserved0; - this.reserved1 = reserved1; - this.reserved2 = reserved2; - this.reserved3 = reserved3; - this.reserved4 = reserved4; - this.reserved5 = reserved5; - } - - public VREvent_Reserved_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_Reserved_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_Reserved_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_ScreenshotProgress_t.java b/common/src/main/java/jopenvr/VREvent_ScreenshotProgress_t.java deleted file mode 100644 index bddeec997..000000000 --- a/common/src/main/java/jopenvr/VREvent_ScreenshotProgress_t.java +++ /dev/null @@ -1,39 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_ScreenshotProgress_t extends Structure -{ - public float progress; - - public VREvent_ScreenshotProgress_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("progress"); - } - - public VREvent_ScreenshotProgress_t(float progress) - { - this.progress = progress; - } - - public VREvent_ScreenshotProgress_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_ScreenshotProgress_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_ScreenshotProgress_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_Screenshot_t.java b/common/src/main/java/jopenvr/VREvent_Screenshot_t.java deleted file mode 100644 index 8ab8fa1e0..000000000 --- a/common/src/main/java/jopenvr/VREvent_Screenshot_t.java +++ /dev/null @@ -1,41 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_Screenshot_t extends Structure -{ - public int handle; - public int type; - - public VREvent_Screenshot_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("handle", "type"); - } - - public VREvent_Screenshot_t(int handle, int type) - { - this.handle = handle; - this.type = type; - } - - public VREvent_Screenshot_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_Screenshot_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_Screenshot_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_Scroll_t.java b/common/src/main/java/jopenvr/VREvent_Scroll_t.java deleted file mode 100644 index b52ecea32..000000000 --- a/common/src/main/java/jopenvr/VREvent_Scroll_t.java +++ /dev/null @@ -1,45 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_Scroll_t extends Structure -{ - public float xdelta; - public float ydelta; - public int unused; - public float viewportscale; - - public VREvent_Scroll_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("xdelta", "ydelta", "unused", "viewportscale"); - } - - public VREvent_Scroll_t(float xdelta, float ydelta, int unused, float viewportscale) - { - this.xdelta = xdelta; - this.ydelta = ydelta; - this.unused = unused; - this.viewportscale = viewportscale; - } - - public VREvent_Scroll_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_Scroll_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_Scroll_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_SeatedZeroPoseReset_t.java b/common/src/main/java/jopenvr/VREvent_SeatedZeroPoseReset_t.java deleted file mode 100644 index 4da5508e9..000000000 --- a/common/src/main/java/jopenvr/VREvent_SeatedZeroPoseReset_t.java +++ /dev/null @@ -1,39 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_SeatedZeroPoseReset_t extends Structure -{ - public byte bResetBySystemMenu; - - public VREvent_SeatedZeroPoseReset_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("bResetBySystemMenu"); - } - - public VREvent_SeatedZeroPoseReset_t(byte bResetBySystemMenu) - { - this.bResetBySystemMenu = bResetBySystemMenu; - } - - public VREvent_SeatedZeroPoseReset_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_SeatedZeroPoseReset_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_SeatedZeroPoseReset_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_ShowDevTools_t.java b/common/src/main/java/jopenvr/VREvent_ShowDevTools_t.java deleted file mode 100644 index fcbb43404..000000000 --- a/common/src/main/java/jopenvr/VREvent_ShowDevTools_t.java +++ /dev/null @@ -1,39 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_ShowDevTools_t extends Structure -{ - public int nBrowserIdentifier; - - public VREvent_ShowDevTools_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("nBrowserIdentifier"); - } - - public VREvent_ShowDevTools_t(int nBrowserIdentifier) - { - this.nBrowserIdentifier = nBrowserIdentifier; - } - - public VREvent_ShowDevTools_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_ShowDevTools_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_ShowDevTools_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_ShowUI_t.java b/common/src/main/java/jopenvr/VREvent_ShowUI_t.java deleted file mode 100644 index 7414ce0ac..000000000 --- a/common/src/main/java/jopenvr/VREvent_ShowUI_t.java +++ /dev/null @@ -1,39 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_ShowUI_t extends Structure -{ - public int eType; - - public VREvent_ShowUI_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("eType"); - } - - public VREvent_ShowUI_t(int eType) - { - this.eType = eType; - } - - public VREvent_ShowUI_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_ShowUI_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_ShowUI_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_SpatialAnchor_t.java b/common/src/main/java/jopenvr/VREvent_SpatialAnchor_t.java deleted file mode 100644 index c7eab8048..000000000 --- a/common/src/main/java/jopenvr/VREvent_SpatialAnchor_t.java +++ /dev/null @@ -1,39 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_SpatialAnchor_t extends Structure -{ - public int unHandle; - - public VREvent_SpatialAnchor_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("unHandle"); - } - - public VREvent_SpatialAnchor_t(int unHandle) - { - this.unHandle = unHandle; - } - - public VREvent_SpatialAnchor_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_SpatialAnchor_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_SpatialAnchor_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_Status_t.java b/common/src/main/java/jopenvr/VREvent_Status_t.java deleted file mode 100644 index 4f860f674..000000000 --- a/common/src/main/java/jopenvr/VREvent_Status_t.java +++ /dev/null @@ -1,39 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_Status_t extends Structure -{ - public int statusState; - - public VREvent_Status_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("statusState"); - } - - public VREvent_Status_t(int statusState) - { - this.statusState = statusState; - } - - public VREvent_Status_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_Status_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_Status_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_TouchPadMove_t.java b/common/src/main/java/jopenvr/VREvent_TouchPadMove_t.java deleted file mode 100644 index 08c6c98b0..000000000 --- a/common/src/main/java/jopenvr/VREvent_TouchPadMove_t.java +++ /dev/null @@ -1,49 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_TouchPadMove_t extends Structure -{ - public byte bFingerDown; - public float flSecondsFingerDown; - public float fValueXFirst; - public float fValueYFirst; - public float fValueXRaw; - public float fValueYRaw; - - public VREvent_TouchPadMove_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("bFingerDown", "flSecondsFingerDown", "fValueXFirst", "fValueYFirst", "fValueXRaw", "fValueYRaw"); - } - - public VREvent_TouchPadMove_t(byte bFingerDown, float flSecondsFingerDown, float fValueXFirst, float fValueYFirst, float fValueXRaw, float fValueYRaw) - { - this.bFingerDown = bFingerDown; - this.flSecondsFingerDown = flSecondsFingerDown; - this.fValueXFirst = fValueXFirst; - this.fValueYFirst = fValueYFirst; - this.fValueXRaw = fValueXRaw; - this.fValueYRaw = fValueYRaw; - } - - public VREvent_TouchPadMove_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_TouchPadMove_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_TouchPadMove_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_WebConsole_t.java b/common/src/main/java/jopenvr/VREvent_WebConsole_t.java deleted file mode 100644 index 4e2abac5d..000000000 --- a/common/src/main/java/jopenvr/VREvent_WebConsole_t.java +++ /dev/null @@ -1,39 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_WebConsole_t extends Structure -{ - public long webConsoleHandle; - - public VREvent_WebConsole_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("webConsoleHandle"); - } - - public VREvent_WebConsole_t(long webConsoleHandle) - { - this.webConsoleHandle = webConsoleHandle; - } - - public VREvent_WebConsole_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_WebConsole_t implements Structure.ByReference - { - } - - public static class ByValue extends VREvent_WebConsole_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VREvent_t.java b/common/src/main/java/jopenvr/VREvent_t.java deleted file mode 100644 index aaed06de2..000000000 --- a/common/src/main/java/jopenvr/VREvent_t.java +++ /dev/null @@ -1,44 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; - -import java.util.Arrays; -import java.util.List; - -public class VREvent_t extends MispackedStructure -{ - public int eventType; - public int trackedDeviceIndex; - public float eventAgeSeconds; - public VREvent_Data_t data; - - public VREvent_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("eventType", "trackedDeviceIndex", "eventAgeSeconds", "data"); - } - - public VREvent_t(int eventType, int trackedDeviceIndex, float eventAgeSeconds, VREvent_Data_t data) - { - this.eventType = eventType; - this.trackedDeviceIndex = trackedDeviceIndex; - this.eventAgeSeconds = eventAgeSeconds; - this.data = data; - } - - public VREvent_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VREvent_t implements com.sun.jna.Structure.ByReference - { - } - - public static class ByValue extends VREvent_t implements com.sun.jna.Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VROverlayIntersectionMaskPrimitive_Data_t.java b/common/src/main/java/jopenvr/VROverlayIntersectionMaskPrimitive_Data_t.java deleted file mode 100644 index 789476306..000000000 --- a/common/src/main/java/jopenvr/VROverlayIntersectionMaskPrimitive_Data_t.java +++ /dev/null @@ -1,39 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Union; - -public class VROverlayIntersectionMaskPrimitive_Data_t extends Union -{ - public IntersectionMaskRectangle_t m_Rectangle; - public IntersectionMaskCircle_t m_Circle; - - public VROverlayIntersectionMaskPrimitive_Data_t() - { - } - - public VROverlayIntersectionMaskPrimitive_Data_t(IntersectionMaskRectangle_t m_Rectangle) - { - this.m_Rectangle = m_Rectangle; - this.setType(IntersectionMaskRectangle_t.class); - } - - public VROverlayIntersectionMaskPrimitive_Data_t(IntersectionMaskCircle_t m_Circle) - { - this.m_Circle = m_Circle; - this.setType(IntersectionMaskCircle_t.class); - } - - public VROverlayIntersectionMaskPrimitive_Data_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VROverlayIntersectionMaskPrimitive_Data_t implements com.sun.jna.Structure.ByReference - { - } - - public static class ByValue extends VROverlayIntersectionMaskPrimitive_Data_t implements com.sun.jna.Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VROverlayIntersectionMaskPrimitive_t.java b/common/src/main/java/jopenvr/VROverlayIntersectionMaskPrimitive_t.java deleted file mode 100644 index 921372bea..000000000 --- a/common/src/main/java/jopenvr/VROverlayIntersectionMaskPrimitive_t.java +++ /dev/null @@ -1,41 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VROverlayIntersectionMaskPrimitive_t extends Structure -{ - public int m_nPrimitiveType; - public VROverlayIntersectionMaskPrimitive_Data_t m_Primitive; - - public VROverlayIntersectionMaskPrimitive_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("m_nPrimitiveType", "m_Primitive"); - } - - public VROverlayIntersectionMaskPrimitive_t(int m_nPrimitiveType, VROverlayIntersectionMaskPrimitive_Data_t m_Primitive) - { - this.m_nPrimitiveType = m_nPrimitiveType; - this.m_Primitive = m_Primitive; - } - - public VROverlayIntersectionMaskPrimitive_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VROverlayIntersectionMaskPrimitive_t implements Structure.ByReference - { - } - - public static class ByValue extends VROverlayIntersectionMaskPrimitive_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VROverlayIntersectionParams_t.java b/common/src/main/java/jopenvr/VROverlayIntersectionParams_t.java deleted file mode 100644 index b228a0adb..000000000 --- a/common/src/main/java/jopenvr/VROverlayIntersectionParams_t.java +++ /dev/null @@ -1,43 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VROverlayIntersectionParams_t extends Structure -{ - public HmdVector3_t vSource; - public HmdVector3_t vDirection; - public int eOrigin; - - public VROverlayIntersectionParams_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("vSource", "vDirection", "eOrigin"); - } - - public VROverlayIntersectionParams_t(HmdVector3_t vSource, HmdVector3_t vDirection, int eOrigin) - { - this.vSource = vSource; - this.vDirection = vDirection; - this.eOrigin = eOrigin; - } - - public VROverlayIntersectionParams_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VROverlayIntersectionParams_t implements Structure.ByReference - { - } - - public static class ByValue extends VROverlayIntersectionParams_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VROverlayIntersectionResults_t.java b/common/src/main/java/jopenvr/VROverlayIntersectionResults_t.java deleted file mode 100644 index dddd2a377..000000000 --- a/common/src/main/java/jopenvr/VROverlayIntersectionResults_t.java +++ /dev/null @@ -1,45 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VROverlayIntersectionResults_t extends Structure -{ - public HmdVector3_t vPoint; - public HmdVector3_t vNormal; - public HmdVector2_t vUVs; - public float fDistance; - - public VROverlayIntersectionResults_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("vPoint", "vNormal", "vUVs", "fDistance"); - } - - public VROverlayIntersectionResults_t(HmdVector3_t vPoint, HmdVector3_t vNormal, HmdVector2_t vUVs, float fDistance) - { - this.vPoint = vPoint; - this.vNormal = vNormal; - this.vUVs = vUVs; - this.fDistance = fDistance; - } - - public VROverlayIntersectionResults_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VROverlayIntersectionResults_t implements Structure.ByReference - { - } - - public static class ByValue extends VROverlayIntersectionResults_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VRSkeletalSummaryData_t.java b/common/src/main/java/jopenvr/VRSkeletalSummaryData_t.java deleted file mode 100644 index 7fb411fcc..000000000 --- a/common/src/main/java/jopenvr/VRSkeletalSummaryData_t.java +++ /dev/null @@ -1,56 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VRSkeletalSummaryData_t extends Structure -{ - public float[] flFingerCurl = new float[5]; - public float[] flFingerSplay = new float[4]; - - public VRSkeletalSummaryData_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("flFingerCurl", "flFingerSplay"); - } - - public VRSkeletalSummaryData_t(float[] flFingerCurl, float[] flFingerSplay) - { - if (flFingerCurl.length != this.flFingerCurl.length) - { - throw new IllegalArgumentException("Wrong array size !"); - } - else - { - this.flFingerCurl = flFingerCurl; - - if (flFingerSplay.length != this.flFingerSplay.length) - { - throw new IllegalArgumentException("Wrong array size !"); - } - else - { - this.flFingerSplay = flFingerSplay; - } - } - } - - public VRSkeletalSummaryData_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VRSkeletalSummaryData_t implements Structure.ByReference - { - } - - public static class ByValue extends VRSkeletalSummaryData_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VRTextureBounds_t.java b/common/src/main/java/jopenvr/VRTextureBounds_t.java deleted file mode 100644 index 1b7ce1e2c..000000000 --- a/common/src/main/java/jopenvr/VRTextureBounds_t.java +++ /dev/null @@ -1,45 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VRTextureBounds_t extends Structure -{ - public float uMin; - public float vMin; - public float uMax; - public float vMax; - - public VRTextureBounds_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("uMin", "vMin", "uMax", "vMax"); - } - - public VRTextureBounds_t(float uMin, float vMin, float uMax, float vMax) - { - this.uMin = uMin; - this.vMin = vMin; - this.uMax = uMax; - this.vMax = vMax; - } - - public VRTextureBounds_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VRTextureBounds_t implements Structure.ByReference - { - } - - public static class ByValue extends VRTextureBounds_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VRTextureDepthInfo_t.java b/common/src/main/java/jopenvr/VRTextureDepthInfo_t.java deleted file mode 100644 index e33d8d602..000000000 --- a/common/src/main/java/jopenvr/VRTextureDepthInfo_t.java +++ /dev/null @@ -1,43 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VRTextureDepthInfo_t extends Structure -{ - public Pointer handle; - public HmdMatrix44_t mProjection; - public HmdVector2_t vRange; - - public VRTextureDepthInfo_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("handle", "mProjection", "vRange"); - } - - public VRTextureDepthInfo_t(Pointer handle, HmdMatrix44_t mProjection, HmdVector2_t vRange) - { - this.handle = handle; - this.mProjection = mProjection; - this.vRange = vRange; - } - - public VRTextureDepthInfo_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VRTextureDepthInfo_t implements Structure.ByReference - { - } - - public static class ByValue extends VRTextureDepthInfo_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VRTextureWithDepth_t.java b/common/src/main/java/jopenvr/VRTextureWithDepth_t.java deleted file mode 100644 index c1ed6c203..000000000 --- a/common/src/main/java/jopenvr/VRTextureWithDepth_t.java +++ /dev/null @@ -1,38 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; - -import java.util.Arrays; -import java.util.List; - -public class VRTextureWithDepth_t extends Texture_t -{ - public VRTextureDepthInfo_t depth; - - public VRTextureWithDepth_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("handle", "eType", "eColorSpace", "depth"); - } - - public VRTextureWithDepth_t(VRTextureDepthInfo_t depth) - { - this.depth = depth; - } - - public VRTextureWithDepth_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VRTextureWithDepth_t implements com.sun.jna.Structure.ByReference - { - } - - public static class ByValue extends VRTextureWithDepth_t implements com.sun.jna.Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VRTextureWithPoseAndDepth_t.java b/common/src/main/java/jopenvr/VRTextureWithPoseAndDepth_t.java deleted file mode 100644 index be9c84091..000000000 --- a/common/src/main/java/jopenvr/VRTextureWithPoseAndDepth_t.java +++ /dev/null @@ -1,39 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VRTextureWithPoseAndDepth_t extends Structure -{ - public VRTextureDepthInfo_t depth; - - public VRTextureWithPoseAndDepth_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("depth"); - } - - public VRTextureWithPoseAndDepth_t(VRTextureDepthInfo_t depth) - { - this.depth = depth; - } - - public VRTextureWithPoseAndDepth_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VRTextureWithPoseAndDepth_t implements Structure.ByReference - { - } - - public static class ByValue extends VRTextureWithPoseAndDepth_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VRTextureWithPose_t.java b/common/src/main/java/jopenvr/VRTextureWithPose_t.java deleted file mode 100644 index fcb8c22a6..000000000 --- a/common/src/main/java/jopenvr/VRTextureWithPose_t.java +++ /dev/null @@ -1,39 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VRTextureWithPose_t extends Structure -{ - public HmdMatrix34_t mDeviceToAbsoluteTracking; - - public VRTextureWithPose_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("mDeviceToAbsoluteTracking"); - } - - public VRTextureWithPose_t(HmdMatrix34_t mDeviceToAbsoluteTracking) - { - this.mDeviceToAbsoluteTracking = mDeviceToAbsoluteTracking; - } - - public VRTextureWithPose_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VRTextureWithPose_t implements Structure.ByReference - { - } - - public static class ByValue extends VRTextureWithPose_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VRVulkanTextureData_t.java b/common/src/main/java/jopenvr/VRVulkanTextureData_t.java deleted file mode 100644 index c947ba042..000000000 --- a/common/src/main/java/jopenvr/VRVulkanTextureData_t.java +++ /dev/null @@ -1,43 +0,0 @@ -package jopenvr; - -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VRVulkanTextureData_t extends Structure -{ - public long m_nImage; - public JOpenVRLibrary.VkDevice_T m_pDevice; - public JOpenVRLibrary.VkPhysicalDevice_T m_pPhysicalDevice; - public JOpenVRLibrary.VkInstance_T m_pInstance; - public JOpenVRLibrary.VkQueue_T m_pQueue; - public int m_nQueueFamilyIndex; - public int m_nWidth; - public int m_nHeight; - public int m_nFormat; - public int m_nSampleCount; - - public VRVulkanTextureData_t() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("m_nImage", "m_pDevice", "m_pPhysicalDevice", "m_pInstance", "m_pQueue", "m_nQueueFamilyIndex", "m_nWidth", "m_nHeight", "m_nFormat", "m_nSampleCount"); - } - - public VRVulkanTextureData_t(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VRVulkanTextureData_t implements Structure.ByReference - { - } - - public static class ByValue extends VRVulkanTextureData_t implements Structure.ByValue - { - } -} diff --git a/common/src/main/java/jopenvr/VR_IVRApplications_FnTable.java b/common/src/main/java/jopenvr/VR_IVRApplications_FnTable.java deleted file mode 100644 index 4b6fbb0ae..000000000 --- a/common/src/main/java/jopenvr/VR_IVRApplications_FnTable.java +++ /dev/null @@ -1,221 +0,0 @@ -package jopenvr; - -import com.sun.jna.Callback; -import com.sun.jna.Pointer; -import com.sun.jna.Structure; -import com.sun.jna.ptr.IntByReference; - -import java.util.Arrays; -import java.util.List; - -public class VR_IVRApplications_FnTable extends Structure -{ - public AddApplicationManifest_callback AddApplicationManifest; - public RemoveApplicationManifest_callback RemoveApplicationManifest; - public IsApplicationInstalled_callback IsApplicationInstalled; - public GetApplicationCount_callback GetApplicationCount; - public GetApplicationKeyByIndex_callback GetApplicationKeyByIndex; - public GetApplicationKeyByProcessId_callback GetApplicationKeyByProcessId; - public LaunchApplication_callback LaunchApplication; - public LaunchTemplateApplication_callback LaunchTemplateApplication; - public LaunchApplicationFromMimeType_callback LaunchApplicationFromMimeType; - public LaunchDashboardOverlay_callback LaunchDashboardOverlay; - public CancelApplicationLaunch_callback CancelApplicationLaunch; - public IdentifyApplication_callback IdentifyApplication; - public GetApplicationProcessId_callback GetApplicationProcessId; - public GetApplicationsErrorNameFromEnum_callback GetApplicationsErrorNameFromEnum; - public GetApplicationPropertyString_callback GetApplicationPropertyString; - public GetApplicationPropertyBool_callback GetApplicationPropertyBool; - public GetApplicationPropertyUint64_callback GetApplicationPropertyUint64; - public SetApplicationAutoLaunch_callback SetApplicationAutoLaunch; - public GetApplicationAutoLaunch_callback GetApplicationAutoLaunch; - public SetDefaultApplicationForMimeType_callback SetDefaultApplicationForMimeType; - public GetDefaultApplicationForMimeType_callback GetDefaultApplicationForMimeType; - public GetApplicationSupportedMimeTypes_callback GetApplicationSupportedMimeTypes; - public GetApplicationsThatSupportMimeType_callback GetApplicationsThatSupportMimeType; - public GetApplicationLaunchArguments_callback GetApplicationLaunchArguments; - public GetStartingApplication_callback GetStartingApplication; - public GetTransitionState_callback GetTransitionState; - public PerformApplicationPrelaunchCheck_callback PerformApplicationPrelaunchCheck; - public GetApplicationsTransitionStateNameFromEnum_callback GetApplicationsTransitionStateNameFromEnum; - public IsQuitUserPromptRequested_callback IsQuitUserPromptRequested; - public LaunchInternalProcess_callback LaunchInternalProcess; - public GetCurrentSceneProcessId_callback GetCurrentSceneProcessId; - - public VR_IVRApplications_FnTable() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("AddApplicationManifest", "RemoveApplicationManifest", "IsApplicationInstalled", "GetApplicationCount", "GetApplicationKeyByIndex", "GetApplicationKeyByProcessId", "LaunchApplication", "LaunchTemplateApplication", "LaunchApplicationFromMimeType", "LaunchDashboardOverlay", "CancelApplicationLaunch", "IdentifyApplication", "GetApplicationProcessId", "GetApplicationsErrorNameFromEnum", "GetApplicationPropertyString", "GetApplicationPropertyBool", "GetApplicationPropertyUint64", "SetApplicationAutoLaunch", "GetApplicationAutoLaunch", "SetDefaultApplicationForMimeType", "GetDefaultApplicationForMimeType", "GetApplicationSupportedMimeTypes", "GetApplicationsThatSupportMimeType", "GetApplicationLaunchArguments", "GetStartingApplication", "GetTransitionState", "PerformApplicationPrelaunchCheck", "GetApplicationsTransitionStateNameFromEnum", "IsQuitUserPromptRequested", "LaunchInternalProcess", "GetCurrentSceneProcessId"); - } - - public VR_IVRApplications_FnTable(Pointer peer) - { - super(peer); - } - - public interface AddApplicationManifest_callback extends Callback - { - int apply(Pointer var1, byte var2); - } - - public static class ByReference extends VR_IVRApplications_FnTable implements Structure.ByReference - { - } - - public static class ByValue extends VR_IVRApplications_FnTable implements Structure.ByValue - { - } - - public interface CancelApplicationLaunch_callback extends Callback - { - byte apply(Pointer var1); - } - - public interface GetApplicationAutoLaunch_callback extends Callback - { - byte apply(Pointer var1); - } - - public interface GetApplicationCount_callback extends Callback - { - int apply(); - } - - public interface GetApplicationKeyByIndex_callback extends Callback - { - int apply(int var1, Pointer var2, int var3); - } - - public interface GetApplicationKeyByProcessId_callback extends Callback - { - int apply(int var1, Pointer var2, int var3); - } - - public interface GetApplicationLaunchArguments_callback extends Callback - { - int apply(int var1, Pointer var2, int var3); - } - - public interface GetApplicationProcessId_callback extends Callback - { - int apply(Pointer var1); - } - - public interface GetApplicationPropertyBool_callback extends Callback - { - byte apply(Pointer var1, int var2, IntByReference var3); - } - - public interface GetApplicationPropertyString_callback extends Callback - { - int apply(Pointer var1, int var2, Pointer var3, int var4, IntByReference var5); - } - - public interface GetApplicationPropertyUint64_callback extends Callback - { - long apply(Pointer var1, int var2, IntByReference var3); - } - - public interface GetApplicationSupportedMimeTypes_callback extends Callback - { - byte apply(Pointer var1, Pointer var2, int var3); - } - - public interface GetApplicationsErrorNameFromEnum_callback extends Callback - { - Pointer apply(int var1); - } - - public interface GetApplicationsThatSupportMimeType_callback extends Callback - { - int apply(Pointer var1, Pointer var2, int var3); - } - - public interface GetApplicationsTransitionStateNameFromEnum_callback extends Callback - { - Pointer apply(int var1); - } - - public interface GetCurrentSceneProcessId_callback extends Callback - { - int apply(); - } - - public interface GetDefaultApplicationForMimeType_callback extends Callback - { - byte apply(Pointer var1, Pointer var2, int var3); - } - - public interface GetStartingApplication_callback extends Callback - { - int apply(Pointer var1, int var2); - } - - public interface GetTransitionState_callback extends Callback - { - int apply(); - } - - public interface IdentifyApplication_callback extends Callback - { - int apply(int var1, Pointer var2); - } - - public interface IsApplicationInstalled_callback extends Callback - { - byte apply(Pointer var1); - } - - public interface IsQuitUserPromptRequested_callback extends Callback - { - byte apply(); - } - - public interface LaunchApplicationFromMimeType_callback extends Callback - { - int apply(Pointer var1, Pointer var2); - } - - public interface LaunchApplication_callback extends Callback - { - int apply(Pointer var1); - } - - public interface LaunchDashboardOverlay_callback extends Callback - { - int apply(Pointer var1); - } - - public interface LaunchInternalProcess_callback extends Callback - { - int apply(Pointer var1, Pointer var2, Pointer var3); - } - - public interface LaunchTemplateApplication_callback extends Callback - { - int apply(Pointer var1, Pointer var2, AppOverrideKeys_t var3, int var4); - } - - public interface PerformApplicationPrelaunchCheck_callback extends Callback - { - int apply(Pointer var1); - } - - public interface RemoveApplicationManifest_callback extends Callback - { - int apply(Pointer var1); - } - - public interface SetApplicationAutoLaunch_callback extends Callback - { - int apply(Pointer var1, byte var2); - } - - public interface SetDefaultApplicationForMimeType_callback extends Callback - { - int apply(Pointer var1, Pointer var2); - } -} diff --git a/common/src/main/java/jopenvr/VR_IVRChaperoneSetup_FnTable.java b/common/src/main/java/jopenvr/VR_IVRChaperoneSetup_FnTable.java deleted file mode 100644 index 29eaab16e..000000000 --- a/common/src/main/java/jopenvr/VR_IVRChaperoneSetup_FnTable.java +++ /dev/null @@ -1,156 +0,0 @@ -package jopenvr; - -import com.sun.jna.Callback; -import com.sun.jna.Pointer; -import com.sun.jna.Structure; -import com.sun.jna.ptr.FloatByReference; -import com.sun.jna.ptr.IntByReference; - -import java.util.Arrays; -import java.util.List; - -public class VR_IVRChaperoneSetup_FnTable extends Structure -{ - public CommitWorkingCopy_callback CommitWorkingCopy; - public RevertWorkingCopy_callback RevertWorkingCopy; - public GetWorkingPlayAreaSize_callback GetWorkingPlayAreaSize; - public GetWorkingPlayAreaRect_callback GetWorkingPlayAreaRect; - public GetWorkingCollisionBoundsInfo_callback GetWorkingCollisionBoundsInfo; - public GetLiveCollisionBoundsInfo_callback GetLiveCollisionBoundsInfo; - public GetWorkingSeatedZeroPoseToRawTrackingPose_callback GetWorkingSeatedZeroPoseToRawTrackingPose; - public GetWorkingStandingZeroPoseToRawTrackingPose_callback GetWorkingStandingZeroPoseToRawTrackingPose; - public SetWorkingPlayAreaSize_callback SetWorkingPlayAreaSize; - public SetWorkingCollisionBoundsInfo_callback SetWorkingCollisionBoundsInfo; - public SetWorkingPerimeter_callback SetWorkingPerimeter; - public SetWorkingSeatedZeroPoseToRawTrackingPose_callback SetWorkingSeatedZeroPoseToRawTrackingPose; - public SetWorkingStandingZeroPoseToRawTrackingPose_callback SetWorkingStandingZeroPoseToRawTrackingPose; - public ReloadFromDisk_callback ReloadFromDisk; - public GetLiveSeatedZeroPoseToRawTrackingPose_callback GetLiveSeatedZeroPoseToRawTrackingPose; - public ExportLiveToBuffer_callback ExportLiveToBuffer; - public ImportFromBufferToWorking_callback ImportFromBufferToWorking; - public ShowWorkingSetPreview_callback ShowWorkingSetPreview; - public HideWorkingSetPreview_callback HideWorkingSetPreview; - public RoomSetupStarting_callback RoomSetupStarting; - - public VR_IVRChaperoneSetup_FnTable() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("CommitWorkingCopy", "RevertWorkingCopy", "GetWorkingPlayAreaSize", "GetWorkingPlayAreaRect", "GetWorkingCollisionBoundsInfo", "GetLiveCollisionBoundsInfo", "GetWorkingSeatedZeroPoseToRawTrackingPose", "GetWorkingStandingZeroPoseToRawTrackingPose", "SetWorkingPlayAreaSize", "SetWorkingCollisionBoundsInfo", "SetWorkingPerimeter", "SetWorkingSeatedZeroPoseToRawTrackingPose", "SetWorkingStandingZeroPoseToRawTrackingPose", "ReloadFromDisk", "GetLiveSeatedZeroPoseToRawTrackingPose", "ExportLiveToBuffer", "ImportFromBufferToWorking", "ShowWorkingSetPreview", "HideWorkingSetPreview", "RoomSetupStarting"); - } - - public VR_IVRChaperoneSetup_FnTable(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VR_IVRChaperoneSetup_FnTable implements Structure.ByReference - { - } - - public static class ByValue extends VR_IVRChaperoneSetup_FnTable implements Structure.ByValue - { - } - - public interface CommitWorkingCopy_callback extends Callback - { - byte apply(int var1); - } - - public interface ExportLiveToBuffer_callback extends Callback - { - byte apply(Pointer var1, IntByReference var2); - } - - public interface GetLiveCollisionBoundsInfo_callback extends Callback - { - byte apply(HmdQuad_t var1, IntByReference var2); - } - - public interface GetLiveSeatedZeroPoseToRawTrackingPose_callback extends Callback - { - byte apply(HmdMatrix34_t var1); - } - - public interface GetWorkingCollisionBoundsInfo_callback extends Callback - { - byte apply(HmdQuad_t var1, IntByReference var2); - } - - public interface GetWorkingPlayAreaRect_callback extends Callback - { - byte apply(HmdQuad_t var1); - } - - public interface GetWorkingPlayAreaSize_callback extends Callback - { - byte apply(FloatByReference var1, FloatByReference var2); - } - - public interface GetWorkingSeatedZeroPoseToRawTrackingPose_callback extends Callback - { - byte apply(HmdMatrix34_t var1); - } - - public interface GetWorkingStandingZeroPoseToRawTrackingPose_callback extends Callback - { - byte apply(HmdMatrix34_t var1); - } - - public interface HideWorkingSetPreview_callback extends Callback - { - void apply(); - } - - public interface ImportFromBufferToWorking_callback extends Callback - { - byte apply(Pointer var1, int var2); - } - - public interface ReloadFromDisk_callback extends Callback - { - void apply(int var1); - } - - public interface RevertWorkingCopy_callback extends Callback - { - void apply(); - } - - public interface RoomSetupStarting_callback extends Callback - { - void apply(); - } - - public interface SetWorkingCollisionBoundsInfo_callback extends Callback - { - void apply(HmdQuad_t var1, int var2); - } - - public interface SetWorkingPerimeter_callback extends Callback - { - void apply(HmdVector2_t var1, int var2); - } - - public interface SetWorkingPlayAreaSize_callback extends Callback - { - void apply(float var1, float var2); - } - - public interface SetWorkingSeatedZeroPoseToRawTrackingPose_callback extends Callback - { - void apply(HmdMatrix34_t var1); - } - - public interface SetWorkingStandingZeroPoseToRawTrackingPose_callback extends Callback - { - void apply(HmdMatrix34_t var1); - } - - public interface ShowWorkingSetPreview_callback extends Callback - { - void apply(); - } -} diff --git a/common/src/main/java/jopenvr/VR_IVRChaperone_FnTable.java b/common/src/main/java/jopenvr/VR_IVRChaperone_FnTable.java deleted file mode 100644 index 865a64915..000000000 --- a/common/src/main/java/jopenvr/VR_IVRChaperone_FnTable.java +++ /dev/null @@ -1,95 +0,0 @@ -package jopenvr; - -import com.sun.jna.Callback; -import com.sun.jna.Pointer; -import com.sun.jna.Structure; -import com.sun.jna.ptr.FloatByReference; - -import java.util.Arrays; -import java.util.List; - -public class VR_IVRChaperone_FnTable extends Structure -{ - public GetCalibrationState_callback GetCalibrationState; - public GetPlayAreaSize_callback GetPlayAreaSize; - public GetPlayAreaRect_callback GetPlayAreaRect; - public ReloadInfo_callback ReloadInfo; - public SetSceneColor_callback SetSceneColor; - public GetBoundsColor_callback GetBoundsColor; - public AreBoundsVisible_callback AreBoundsVisible; - public ForceBoundsVisible_callback ForceBoundsVisible; - - public VR_IVRChaperone_FnTable() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("GetCalibrationState", "GetPlayAreaSize", "GetPlayAreaRect", "ReloadInfo", "SetSceneColor", "GetBoundsColor", "AreBoundsVisible", "ForceBoundsVisible"); - } - - public VR_IVRChaperone_FnTable(GetCalibrationState_callback GetCalibrationState, GetPlayAreaSize_callback GetPlayAreaSize, GetPlayAreaRect_callback GetPlayAreaRect, ReloadInfo_callback ReloadInfo, SetSceneColor_callback SetSceneColor, GetBoundsColor_callback GetBoundsColor, AreBoundsVisible_callback AreBoundsVisible, ForceBoundsVisible_callback ForceBoundsVisible) - { - this.GetCalibrationState = GetCalibrationState; - this.GetPlayAreaSize = GetPlayAreaSize; - this.GetPlayAreaRect = GetPlayAreaRect; - this.ReloadInfo = ReloadInfo; - this.SetSceneColor = SetSceneColor; - this.GetBoundsColor = GetBoundsColor; - this.AreBoundsVisible = AreBoundsVisible; - this.ForceBoundsVisible = ForceBoundsVisible; - } - - public VR_IVRChaperone_FnTable(Pointer peer) - { - super(peer); - } - - public interface AreBoundsVisible_callback extends Callback - { - byte apply(); - } - - public static class ByReference extends VR_IVRChaperone_FnTable implements Structure.ByReference - { - } - - public static class ByValue extends VR_IVRChaperone_FnTable implements Structure.ByValue - { - } - - public interface ForceBoundsVisible_callback extends Callback - { - void apply(byte var1); - } - - public interface GetBoundsColor_callback extends Callback - { - void apply(HmdColor_t var1, int var2, float var3, HmdColor_t var4); - } - - public interface GetCalibrationState_callback extends Callback - { - int apply(); - } - - public interface GetPlayAreaRect_callback extends Callback - { - byte apply(HmdQuad_t var1); - } - - public interface GetPlayAreaSize_callback extends Callback - { - byte apply(FloatByReference var1, FloatByReference var2); - } - - public interface ReloadInfo_callback extends Callback - { - void apply(); - } - - public interface SetSceneColor_callback extends Callback - { - void apply(HmdColor_t.ByValue var1); - } -} diff --git a/common/src/main/java/jopenvr/VR_IVRCompositor_FnTable.java b/common/src/main/java/jopenvr/VR_IVRCompositor_FnTable.java deleted file mode 100644 index c0f96cbb0..000000000 --- a/common/src/main/java/jopenvr/VR_IVRCompositor_FnTable.java +++ /dev/null @@ -1,312 +0,0 @@ -package jopenvr; - -import com.sun.jna.Callback; -import com.sun.jna.Pointer; -import com.sun.jna.Structure; -import com.sun.jna.ptr.IntByReference; -import com.sun.jna.ptr.PointerByReference; - -import java.util.Arrays; -import java.util.List; - -public class VR_IVRCompositor_FnTable extends Structure -{ - public SetTrackingSpace_callback SetTrackingSpace; - public GetTrackingSpace_callback GetTrackingSpace; - public WaitGetPoses_callback WaitGetPoses; - public GetLastPoses_callback GetLastPoses; - public GetLastPoseForTrackedDeviceIndex_callback GetLastPoseForTrackedDeviceIndex; - public Submit_callback Submit; - public ClearLastSubmittedFrame_callback ClearLastSubmittedFrame; - public PostPresentHandoff_callback PostPresentHandoff; - public GetFrameTiming_callback GetFrameTiming; - public GetFrameTimings_callback GetFrameTimings; - public GetFrameTimeRemaining_callback GetFrameTimeRemaining; - public GetCumulativeStats_callback GetCumulativeStats; - public FadeToColor_callback FadeToColor; - public GetCurrentFadeColor_callback GetCurrentFadeColor; - public FadeGrid_callback FadeGrid; - public GetCurrentGridAlpha_callback GetCurrentGridAlpha; - public SetSkyboxOverride_callback SetSkyboxOverride; - public ClearSkyboxOverride_callback ClearSkyboxOverride; - public CompositorBringToFront_callback CompositorBringToFront; - public CompositorGoToBack_callback CompositorGoToBack; - public CompositorQuit_callback CompositorQuit; - public IsFullscreen_callback IsFullscreen; - public GetCurrentSceneFocusProcess_callback GetCurrentSceneFocusProcess; - public GetLastFrameRenderer_callback GetLastFrameRenderer; - public CanRenderScene_callback CanRenderScene; - public ShowMirrorWindow_callback ShowMirrorWindow; - public HideMirrorWindow_callback HideMirrorWindow; - public IsMirrorWindowVisible_callback IsMirrorWindowVisible; - public CompositorDumpImages_callback CompositorDumpImages; - public ShouldAppRenderWithLowResources_callback ShouldAppRenderWithLowResources; - public ForceInterleavedReprojectionOn_callback ForceInterleavedReprojectionOn; - public ForceReconnectProcess_callback ForceReconnectProcess; - public SuspendRendering_callback SuspendRendering; - public GetMirrorTextureD3D11_callback GetMirrorTextureD3D11; - public ReleaseMirrorTextureD3D11_callback ReleaseMirrorTextureD3D11; - public GetMirrorTextureGL_callback GetMirrorTextureGL; - public ReleaseSharedGLTexture_callback ReleaseSharedGLTexture; - public LockGLSharedTextureForAccess_callback LockGLSharedTextureForAccess; - public UnlockGLSharedTextureForAccess_callback UnlockGLSharedTextureForAccess; - public GetVulkanInstanceExtensionsRequired_callback GetVulkanInstanceExtensionsRequired; - public GetVulkanDeviceExtensionsRequired_callback GetVulkanDeviceExtensionsRequired; - public SetExplicitTimingMode_callback SetExplicitTimingMode; - public SubmitExplicitTimingData_callback SubmitExplicitTimingData; - public IsMotionSmoothingEnabled_callback IsMotionSmoothingEnabled; - public IsMotionSmoothingSupported_callback IsMotionSmoothingSupported; - public IsCurrentSceneFocusAppLoading_callback IsCurrentSceneFocusAppLoading; - - public VR_IVRCompositor_FnTable() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("SetTrackingSpace", "GetTrackingSpace", "WaitGetPoses", "GetLastPoses", "GetLastPoseForTrackedDeviceIndex", "Submit", "ClearLastSubmittedFrame", "PostPresentHandoff", "GetFrameTiming", "GetFrameTimings", "GetFrameTimeRemaining", "GetCumulativeStats", "FadeToColor", "GetCurrentFadeColor", "FadeGrid", "GetCurrentGridAlpha", "SetSkyboxOverride", "ClearSkyboxOverride", "CompositorBringToFront", "CompositorGoToBack", "CompositorQuit", "IsFullscreen", "GetCurrentSceneFocusProcess", "GetLastFrameRenderer", "CanRenderScene", "ShowMirrorWindow", "HideMirrorWindow", "IsMirrorWindowVisible", "CompositorDumpImages", "ShouldAppRenderWithLowResources", "ForceInterleavedReprojectionOn", "ForceReconnectProcess", "SuspendRendering", "GetMirrorTextureD3D11", "ReleaseMirrorTextureD3D11", "GetMirrorTextureGL", "ReleaseSharedGLTexture", "LockGLSharedTextureForAccess", "UnlockGLSharedTextureForAccess", "GetVulkanInstanceExtensionsRequired", "GetVulkanDeviceExtensionsRequired", "SetExplicitTimingMode", "SubmitExplicitTimingData", "IsMotionSmoothingEnabled", "IsMotionSmoothingSupported", "IsCurrentSceneFocusAppLoading"); - } - - public VR_IVRCompositor_FnTable(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VR_IVRCompositor_FnTable implements Structure.ByReference - { - } - - public static class ByValue extends VR_IVRCompositor_FnTable implements Structure.ByValue - { - } - - public interface CanRenderScene_callback extends Callback - { - byte apply(); - } - - public interface ClearLastSubmittedFrame_callback extends Callback - { - void apply(); - } - - public interface ClearSkyboxOverride_callback extends Callback - { - void apply(); - } - - public interface CompositorBringToFront_callback extends Callback - { - void apply(); - } - - public interface CompositorDumpImages_callback extends Callback - { - void apply(); - } - - public interface CompositorGoToBack_callback extends Callback - { - void apply(); - } - - public interface CompositorQuit_callback extends Callback - { - void apply(); - } - - public interface FadeGrid_callback extends Callback - { - void apply(float var1, byte var2); - } - - public interface FadeToColor_callback extends Callback - { - void apply(float var1, float var2, float var3, float var4, float var5, byte var6); - } - - public interface ForceInterleavedReprojectionOn_callback extends Callback - { - void apply(byte var1); - } - - public interface ForceReconnectProcess_callback extends Callback - { - void apply(); - } - - public interface GetCumulativeStats_callback extends Callback - { - void apply(Compositor_CumulativeStats var1, int var2); - } - - public interface GetCurrentFadeColor_callback extends Callback - { - HmdColor_t.ByValue apply(byte var1); - } - - public interface GetCurrentGridAlpha_callback extends Callback - { - float apply(); - } - - public interface GetCurrentSceneFocusProcess_callback extends Callback - { - int apply(); - } - - public interface GetFrameTimeRemaining_callback extends Callback - { - float apply(); - } - - public interface GetFrameTiming_callback extends Callback - { - byte apply(Compositor_FrameTiming var1, int var2); - } - - public interface GetFrameTimings_callback extends Callback - { - int apply(Compositor_FrameTiming var1, int var2); - } - - public interface GetLastFrameRenderer_callback extends Callback - { - int apply(); - } - - public interface GetLastPoseForTrackedDeviceIndex_callback extends Callback - { - int apply(int var1, TrackedDevicePose_t var2, TrackedDevicePose_t var3); - } - - public interface GetLastPoses_callback extends Callback - { - int apply(TrackedDevicePose_t var1, int var2, TrackedDevicePose_t var3, int var4); - } - - public interface GetMirrorTextureD3D11_callback extends Callback - { - int apply(int var1, Pointer var2, PointerByReference var3); - } - - public interface GetMirrorTextureGL_callback extends Callback - { - int apply(int var1, IntByReference var2, PointerByReference var3); - } - - public interface GetTrackingSpace_callback extends Callback - { - int apply(); - } - - public interface GetVulkanDeviceExtensionsRequired_callback extends Callback - { - int apply(JOpenVRLibrary.VkPhysicalDevice_T var1, Pointer var2, int var3); - } - - public interface GetVulkanInstanceExtensionsRequired_callback extends Callback - { - int apply(Pointer var1, int var2); - } - - public interface HideMirrorWindow_callback extends Callback - { - void apply(); - } - - public interface IsCurrentSceneFocusAppLoading_callback extends Callback - { - byte apply(); - } - - public interface IsFullscreen_callback extends Callback - { - byte apply(); - } - - public interface IsMirrorWindowVisible_callback extends Callback - { - byte apply(); - } - - public interface IsMotionSmoothingEnabled_callback extends Callback - { - byte apply(); - } - - public interface IsMotionSmoothingSupported_callback extends Callback - { - byte apply(); - } - - public interface LockGLSharedTextureForAccess_callback extends Callback - { - void apply(Pointer var1); - } - - public interface PostPresentHandoff_callback extends Callback - { - void apply(); - } - - public interface ReleaseMirrorTextureD3D11_callback extends Callback - { - void apply(Pointer var1); - } - - public interface ReleaseSharedGLTexture_callback extends Callback - { - byte apply(int var1, Pointer var2); - } - - public interface SetExplicitTimingMode_callback extends Callback - { - void apply(int var1); - } - - public interface SetSkyboxOverride_callback extends Callback - { - int apply(Texture_t var1, int var2); - } - - public interface SetTrackingSpace_callback extends Callback - { - void apply(int var1); - } - - public interface ShouldAppRenderWithLowResources_callback extends Callback - { - byte apply(); - } - - public interface ShowMirrorWindow_callback extends Callback - { - void apply(); - } - - public interface SubmitExplicitTimingData_callback extends Callback - { - int apply(); - } - - public interface Submit_callback extends Callback - { - int apply(int var1, Texture_t var2, VRTextureBounds_t var3, int var4); - } - - public interface SuspendRendering_callback extends Callback - { - void apply(byte var1); - } - - public interface UnlockGLSharedTextureForAccess_callback extends Callback - { - void apply(Pointer var1); - } - - public interface WaitGetPoses_callback extends Callback - { - int apply(TrackedDevicePose_t var1, int var2, TrackedDevicePose_t var3, int var4); - } -} diff --git a/common/src/main/java/jopenvr/VR_IVRDriverManager_FnTable.java b/common/src/main/java/jopenvr/VR_IVRDriverManager_FnTable.java deleted file mode 100644 index 23701a041..000000000 --- a/common/src/main/java/jopenvr/VR_IVRDriverManager_FnTable.java +++ /dev/null @@ -1,59 +0,0 @@ -package jopenvr; - -import com.sun.jna.Callback; -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VR_IVRDriverManager_FnTable extends Structure -{ - public GetDriverCount_callback GetDriverCount; - public GetDriverName_callback GetDriverName; - public GetDriverHandle_callback GetDriverHandle; - - public VR_IVRDriverManager_FnTable() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("GetDriverCount", "GetDriverName", "GetDriverHandle"); - } - - public VR_IVRDriverManager_FnTable(GetDriverCount_callback GetDriverCount, GetDriverName_callback GetDriverName, GetDriverHandle_callback GetDriverHandle) - { - this.GetDriverCount = GetDriverCount; - this.GetDriverName = GetDriverName; - this.GetDriverHandle = GetDriverHandle; - } - - public VR_IVRDriverManager_FnTable(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VR_IVRDriverManager_FnTable implements Structure.ByReference - { - } - - public static class ByValue extends VR_IVRDriverManager_FnTable implements Structure.ByValue - { - } - - public interface GetDriverCount_callback extends Callback - { - int apply(); - } - - public interface GetDriverHandle_callback extends Callback - { - long apply(Pointer var1); - } - - public interface GetDriverName_callback extends Callback - { - int apply(int var1, Pointer var2, int var3); - } -} diff --git a/common/src/main/java/jopenvr/VR_IVRExtendedDisplay_FnTable.java b/common/src/main/java/jopenvr/VR_IVRExtendedDisplay_FnTable.java deleted file mode 100644 index 57fe482af..000000000 --- a/common/src/main/java/jopenvr/VR_IVRExtendedDisplay_FnTable.java +++ /dev/null @@ -1,60 +0,0 @@ -package jopenvr; - -import com.sun.jna.Callback; -import com.sun.jna.Pointer; -import com.sun.jna.Structure; -import com.sun.jna.ptr.IntByReference; - -import java.util.Arrays; -import java.util.List; - -public class VR_IVRExtendedDisplay_FnTable extends Structure -{ - public GetWindowBounds_callback GetWindowBounds; - public GetEyeOutputViewport_callback GetEyeOutputViewport; - public GetDXGIOutputInfo_callback GetDXGIOutputInfo; - - public VR_IVRExtendedDisplay_FnTable() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("GetWindowBounds", "GetEyeOutputViewport", "GetDXGIOutputInfo"); - } - - public VR_IVRExtendedDisplay_FnTable(GetWindowBounds_callback GetWindowBounds, GetEyeOutputViewport_callback GetEyeOutputViewport, GetDXGIOutputInfo_callback GetDXGIOutputInfo) - { - this.GetWindowBounds = GetWindowBounds; - this.GetEyeOutputViewport = GetEyeOutputViewport; - this.GetDXGIOutputInfo = GetDXGIOutputInfo; - } - - public VR_IVRExtendedDisplay_FnTable(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VR_IVRExtendedDisplay_FnTable implements Structure.ByReference - { - } - - public static class ByValue extends VR_IVRExtendedDisplay_FnTable implements Structure.ByValue - { - } - - public interface GetDXGIOutputInfo_callback extends Callback - { - void apply(IntByReference var1, IntByReference var2); - } - - public interface GetEyeOutputViewport_callback extends Callback - { - void apply(int var1, IntByReference var2, IntByReference var3, IntByReference var4, IntByReference var5); - } - - public interface GetWindowBounds_callback extends Callback - { - void apply(IntByReference var1, IntByReference var2, IntByReference var3, IntByReference var4); - } -} diff --git a/common/src/main/java/jopenvr/VR_IVRIOBuffer_FnTable.java b/common/src/main/java/jopenvr/VR_IVRIOBuffer_FnTable.java deleted file mode 100644 index 6e392359c..000000000 --- a/common/src/main/java/jopenvr/VR_IVRIOBuffer_FnTable.java +++ /dev/null @@ -1,82 +0,0 @@ -package jopenvr; - -import com.sun.jna.Callback; -import com.sun.jna.Pointer; -import com.sun.jna.Structure; -import com.sun.jna.ptr.IntByReference; -import com.sun.jna.ptr.LongByReference; - -import java.util.Arrays; -import java.util.List; - -public class VR_IVRIOBuffer_FnTable extends Structure -{ - public Open_callback Open; - public Close_callback Close; - public Read_callback Read; - public Write_callback Write; - public PropertyContainer_callback PropertyContainer; - public HasReaders_callback HasReaders; - - public VR_IVRIOBuffer_FnTable() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("Open", "Close", "Read", "Write", "PropertyContainer", "HasReaders"); - } - - public VR_IVRIOBuffer_FnTable(Open_callback Open, Close_callback Close, Read_callback Read, Write_callback Write, PropertyContainer_callback PropertyContainer, HasReaders_callback HasReaders) - { - this.Open = Open; - this.Close = Close; - this.Read = Read; - this.Write = Write; - this.PropertyContainer = PropertyContainer; - this.HasReaders = HasReaders; - } - - public VR_IVRIOBuffer_FnTable(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VR_IVRIOBuffer_FnTable implements Structure.ByReference - { - } - - public static class ByValue extends VR_IVRIOBuffer_FnTable implements Structure.ByValue - { - } - - public interface Close_callback extends Callback - { - int apply(long var1); - } - - public interface HasReaders_callback extends Callback - { - byte apply(long var1); - } - - public interface Open_callback extends Callback - { - int apply(Pointer var1, int var2, int var3, int var4, LongByReference var5); - } - - public interface PropertyContainer_callback extends Callback - { - long apply(long var1); - } - - public interface Read_callback extends Callback - { - int apply(long var1, Pointer var3, int var4, IntByReference var5); - } - - public interface Write_callback extends Callback - { - int apply(long var1, Pointer var3, int var4); - } -} diff --git a/common/src/main/java/jopenvr/VR_IVRInput_FnTable.java b/common/src/main/java/jopenvr/VR_IVRInput_FnTable.java deleted file mode 100644 index b6b40a959..000000000 --- a/common/src/main/java/jopenvr/VR_IVRInput_FnTable.java +++ /dev/null @@ -1,192 +0,0 @@ -package jopenvr; - -import com.sun.jna.Callback; -import com.sun.jna.Pointer; -import com.sun.jna.Structure; -import com.sun.jna.ptr.IntByReference; -import com.sun.jna.ptr.LongByReference; - -import java.util.Arrays; -import java.util.List; - -public class VR_IVRInput_FnTable extends Structure -{ - public SetActionManifestPath_callback SetActionManifestPath; - public GetActionSetHandle_callback GetActionSetHandle; - public GetActionHandle_callback GetActionHandle; - public GetInputSourceHandle_callback GetInputSourceHandle; - public UpdateActionState_callback UpdateActionState; - public GetDigitalActionData_callback GetDigitalActionData; - public GetAnalogActionData_callback GetAnalogActionData; - public GetPoseActionDataRelativeToNow_callback GetPoseActionDataRelativeToNow; - public GetPoseActionDataForNextFrame_callback GetPoseActionDataForNextFrame; - public GetSkeletalActionData_callback GetSkeletalActionData; - public GetBoneCount_callback GetBoneCount; - public GetBoneHierarchy_callback GetBoneHierarchy; - public GetBoneName_callback GetBoneName; - public GetSkeletalReferenceTransforms_callback GetSkeletalReferenceTransforms; - public GetSkeletalTrackingLevel_callback GetSkeletalTrackingLevel; - public GetSkeletalBoneData_callback GetSkeletalBoneData; - public GetSkeletalSummaryData_callback GetSkeletalSummaryData; - public GetSkeletalBoneDataCompressed_callback GetSkeletalBoneDataCompressed; - public DecompressSkeletalBoneData_callback DecompressSkeletalBoneData; - public TriggerHapticVibrationAction_callback TriggerHapticVibrationAction; - public GetActionOrigins_callback GetActionOrigins; - public GetOriginLocalizedName_callback GetOriginLocalizedName; - public GetOriginTrackedDeviceInfo_callback GetOriginTrackedDeviceInfo; - public ShowActionOrigins_callback ShowActionOrigins; - public ShowBindingsForActionSet_callback ShowBindingsForActionSet; - public IsUsingLegacyInput_callback IsUsingLegacyInput; - - public VR_IVRInput_FnTable() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("SetActionManifestPath", "GetActionSetHandle", "GetActionHandle", "GetInputSourceHandle", "UpdateActionState", "GetDigitalActionData", "GetAnalogActionData", "GetPoseActionDataRelativeToNow", "GetPoseActionDataForNextFrame", "GetSkeletalActionData", "GetBoneCount", "GetBoneHierarchy", "GetBoneName", "GetSkeletalReferenceTransforms", "GetSkeletalTrackingLevel", "GetSkeletalBoneData", "GetSkeletalSummaryData", "GetSkeletalBoneDataCompressed", "DecompressSkeletalBoneData", "TriggerHapticVibrationAction", "GetActionOrigins", "GetOriginLocalizedName", "GetOriginTrackedDeviceInfo", "ShowActionOrigins", "ShowBindingsForActionSet", "IsUsingLegacyInput"); - } - - public VR_IVRInput_FnTable(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VR_IVRInput_FnTable implements Structure.ByReference - { - } - - public static class ByValue extends VR_IVRInput_FnTable implements Structure.ByValue - { - } - - public interface DecompressSkeletalBoneData_callback extends Callback - { - int apply(Pointer var1, int var2, int var3, VRBoneTransform_t var4, int var5); - } - - public interface GetActionHandle_callback extends Callback - { - int apply(Pointer var1, LongByReference var2); - } - - public interface GetActionOrigins_callback extends Callback - { - int apply(long var1, long var3, LongByReference var5, int var6); - } - - public interface GetActionSetHandle_callback extends Callback - { - int apply(Pointer var1, LongByReference var2); - } - - public interface GetAnalogActionData_callback extends Callback - { - int apply(long var1, InputAnalogActionData_t var3, int var4, long var5); - } - - public interface GetBoneCount_callback extends Callback - { - int apply(long var1, IntByReference var3); - } - - public interface GetBoneHierarchy_callback extends Callback - { - int apply(long var1, IntByReference var3, int var4); - } - - public interface GetBoneName_callback extends Callback - { - int apply(long var1, int var3, Pointer var4, int var5); - } - - public interface GetDigitalActionData_callback extends Callback - { - int apply(long var1, InputDigitalActionData_t var3, int var4, long var5); - } - - public interface GetInputSourceHandle_callback extends Callback - { - int apply(Pointer var1, LongByReference var2); - } - - public interface GetOriginLocalizedName_callback extends Callback - { - int apply(long var1, Pointer var3, int var4, int var5); - } - - public interface GetOriginTrackedDeviceInfo_callback extends Callback - { - int apply(long var1, InputOriginInfo_t var3, int var4); - } - - public interface GetPoseActionDataForNextFrame_callback extends Callback - { - int apply(long var1, int var3, InputPoseActionData_t var4, int var5, long var6); - } - - public interface GetPoseActionDataRelativeToNow_callback extends Callback - { - int apply(long var1, int var3, float var4, InputPoseActionData_t var5, int var6, long var7); - } - - public interface GetSkeletalActionData_callback extends Callback - { - int apply(long var1, InputSkeletalActionData_t var3, int var4); - } - - public interface GetSkeletalBoneDataCompressed_callback extends Callback - { - int apply(long var1, int var3, Pointer var4, int var5, IntByReference var6); - } - - public interface GetSkeletalBoneData_callback extends Callback - { - int apply(long var1, int var3, int var4, VRBoneTransform_t var5, int var6); - } - - public interface GetSkeletalReferenceTransforms_callback extends Callback - { - int apply(long var1, int var3, int var4, VRBoneTransform_t var5, int var6); - } - - public interface GetSkeletalSummaryData_callback extends Callback - { - int apply(long var1, int var3, VRSkeletalSummaryData_t var4); - } - - public interface GetSkeletalTrackingLevel_callback extends Callback - { - int apply(long var1, IntByReference var3); - } - - public interface IsUsingLegacyInput_callback extends Callback - { - byte apply(); - } - - public interface SetActionManifestPath_callback extends Callback - { - int apply(Pointer var1); - } - - public interface ShowActionOrigins_callback extends Callback - { - int apply(long var1, long var3); - } - - public interface ShowBindingsForActionSet_callback extends Callback - { - int apply(VRActiveActionSet_t var1, int var2, int var3, long var4); - } - - public interface TriggerHapticVibrationAction_callback extends Callback - { - int apply(long var1, float var3, float var4, float var5, float var6, long var7); - } - - public interface UpdateActionState_callback extends Callback - { - int apply(VRActiveActionSet_t var1, int var2, int var3); - } -} diff --git a/common/src/main/java/jopenvr/VR_IVRNotifications_FnTable.java b/common/src/main/java/jopenvr/VR_IVRNotifications_FnTable.java deleted file mode 100644 index f32c5df8f..000000000 --- a/common/src/main/java/jopenvr/VR_IVRNotifications_FnTable.java +++ /dev/null @@ -1,53 +0,0 @@ -package jopenvr; - -import com.sun.jna.Callback; -import com.sun.jna.Pointer; -import com.sun.jna.Structure; -import com.sun.jna.ptr.IntByReference; - -import java.util.Arrays; -import java.util.List; - -public class VR_IVRNotifications_FnTable extends Structure -{ - public CreateNotification_callback CreateNotification; - public RemoveNotification_callback RemoveNotification; - - public VR_IVRNotifications_FnTable() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("CreateNotification", "RemoveNotification"); - } - - public VR_IVRNotifications_FnTable(CreateNotification_callback CreateNotification, RemoveNotification_callback RemoveNotification) - { - this.CreateNotification = CreateNotification; - this.RemoveNotification = RemoveNotification; - } - - public VR_IVRNotifications_FnTable(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VR_IVRNotifications_FnTable implements Structure.ByReference - { - } - - public static class ByValue extends VR_IVRNotifications_FnTable implements Structure.ByValue - { - } - - public interface CreateNotification_callback extends Callback - { - int apply(long var1, long var3, int var5, Pointer var6, int var7, NotificationBitmap_t var8, IntByReference var9); - } - - public interface RemoveNotification_callback extends Callback - { - int apply(int var1); - } -} diff --git a/common/src/main/java/jopenvr/VR_IVROCSystem_FnTable.java b/common/src/main/java/jopenvr/VR_IVROCSystem_FnTable.java deleted file mode 100644 index 961f9f35c..000000000 --- a/common/src/main/java/jopenvr/VR_IVROCSystem_FnTable.java +++ /dev/null @@ -1,46 +0,0 @@ -package jopenvr; - -import com.sun.jna.Callback; -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VR_IVROCSystem_FnTable extends Structure -{ - public static final String Version = "FnTable:IVROCSystem_001"; - public GetExtendedButtonStatus_callback GetExtendedButtonStatus; - - public VR_IVROCSystem_FnTable() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("GetExtendedButtonStatus"); - } - - public VR_IVROCSystem_FnTable(GetExtendedButtonStatus_callback GetExtendedButtonStatus) - { - this.GetExtendedButtonStatus = GetExtendedButtonStatus; - } - - public VR_IVROCSystem_FnTable(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VR_IVROCSystem_FnTable implements Structure.ByReference - { - } - - public static class ByValue extends VR_IVROCSystem_FnTable implements Structure.ByValue - { - } - - public interface GetExtendedButtonStatus_callback extends Callback - { - long apply(); - } -} diff --git a/common/src/main/java/jopenvr/VR_IVROverlay_FnTable.java b/common/src/main/java/jopenvr/VR_IVROverlay_FnTable.java deleted file mode 100644 index 3ae944b55..000000000 --- a/common/src/main/java/jopenvr/VR_IVROverlay_FnTable.java +++ /dev/null @@ -1,530 +0,0 @@ -package jopenvr; - -import com.sun.jna.Callback; -import com.sun.jna.Pointer; -import com.sun.jna.Structure; -import com.sun.jna.ptr.FloatByReference; -import com.sun.jna.ptr.IntByReference; -import com.sun.jna.ptr.LongByReference; -import com.sun.jna.ptr.PointerByReference; - -import java.util.Arrays; -import java.util.List; - -public class VR_IVROverlay_FnTable extends Structure -{ - public FindOverlay_callback FindOverlay; - public CreateOverlay_callback CreateOverlay; - public DestroyOverlay_callback DestroyOverlay; - public SetHighQualityOverlay_callback SetHighQualityOverlay; - public GetHighQualityOverlay_callback GetHighQualityOverlay; - public GetOverlayKey_callback GetOverlayKey; - public GetOverlayName_callback GetOverlayName; - public SetOverlayName_callback SetOverlayName; - public GetOverlayImageData_callback GetOverlayImageData; - public GetOverlayErrorNameFromEnum_callback GetOverlayErrorNameFromEnum; - public SetOverlayRenderingPid_callback SetOverlayRenderingPid; - public GetOverlayRenderingPid_callback GetOverlayRenderingPid; - public SetOverlayFlag_callback SetOverlayFlag; - public GetOverlayFlag_callback GetOverlayFlag; - public SetOverlayColor_callback SetOverlayColor; - public GetOverlayColor_callback GetOverlayColor; - public SetOverlayAlpha_callback SetOverlayAlpha; - public GetOverlayAlpha_callback GetOverlayAlpha; - public SetOverlayTexelAspect_callback SetOverlayTexelAspect; - public GetOverlayTexelAspect_callback GetOverlayTexelAspect; - public SetOverlaySortOrder_callback SetOverlaySortOrder; - public GetOverlaySortOrder_callback GetOverlaySortOrder; - public SetOverlayWidthInMeters_callback SetOverlayWidthInMeters; - public GetOverlayWidthInMeters_callback GetOverlayWidthInMeters; - public SetOverlayAutoCurveDistanceRangeInMeters_callback SetOverlayAutoCurveDistanceRangeInMeters; - public GetOverlayAutoCurveDistanceRangeInMeters_callback GetOverlayAutoCurveDistanceRangeInMeters; - public SetOverlayTextureColorSpace_callback SetOverlayTextureColorSpace; - public GetOverlayTextureColorSpace_callback GetOverlayTextureColorSpace; - public SetOverlayTextureBounds_callback SetOverlayTextureBounds; - public GetOverlayTextureBounds_callback GetOverlayTextureBounds; - public GetOverlayRenderModel_callback GetOverlayRenderModel; - public SetOverlayRenderModel_callback SetOverlayRenderModel; - public GetOverlayTransformType_callback GetOverlayTransformType; - public SetOverlayTransformAbsolute_callback SetOverlayTransformAbsolute; - public GetOverlayTransformAbsolute_callback GetOverlayTransformAbsolute; - public SetOverlayTransformTrackedDeviceRelative_callback SetOverlayTransformTrackedDeviceRelative; - public GetOverlayTransformTrackedDeviceRelative_callback GetOverlayTransformTrackedDeviceRelative; - public SetOverlayTransformTrackedDeviceComponent_callback SetOverlayTransformTrackedDeviceComponent; - public GetOverlayTransformTrackedDeviceComponent_callback GetOverlayTransformTrackedDeviceComponent; - public GetOverlayTransformOverlayRelative_callback GetOverlayTransformOverlayRelative; - public SetOverlayTransformOverlayRelative_callback SetOverlayTransformOverlayRelative; - public ShowOverlay_callback ShowOverlay; - public HideOverlay_callback HideOverlay; - public IsOverlayVisible_callback IsOverlayVisible; - public GetTransformForOverlayCoordinates_callback GetTransformForOverlayCoordinates; - public PollNextOverlayEvent_callback PollNextOverlayEvent; - public GetOverlayInputMethod_callback GetOverlayInputMethod; - public SetOverlayInputMethod_callback SetOverlayInputMethod; - public GetOverlayMouseScale_callback GetOverlayMouseScale; - public SetOverlayMouseScale_callback SetOverlayMouseScale; - public ComputeOverlayIntersection_callback ComputeOverlayIntersection; - public IsHoverTargetOverlay_callback IsHoverTargetOverlay; - public GetGamepadFocusOverlay_callback GetGamepadFocusOverlay; - public SetGamepadFocusOverlay_callback SetGamepadFocusOverlay; - public SetOverlayNeighbor_callback SetOverlayNeighbor; - public MoveGamepadFocusToNeighbor_callback MoveGamepadFocusToNeighbor; - public SetOverlayDualAnalogTransform_callback SetOverlayDualAnalogTransform; - public GetOverlayDualAnalogTransform_callback GetOverlayDualAnalogTransform; - public SetOverlayTexture_callback SetOverlayTexture; - public ClearOverlayTexture_callback ClearOverlayTexture; - public SetOverlayRaw_callback SetOverlayRaw; - public SetOverlayFromFile_callback SetOverlayFromFile; - public GetOverlayTexture_callback GetOverlayTexture; - public ReleaseNativeOverlayHandle_callback ReleaseNativeOverlayHandle; - public GetOverlayTextureSize_callback GetOverlayTextureSize; - public CreateDashboardOverlay_callback CreateDashboardOverlay; - public IsDashboardVisible_callback IsDashboardVisible; - public IsActiveDashboardOverlay_callback IsActiveDashboardOverlay; - public SetDashboardOverlaySceneProcess_callback SetDashboardOverlaySceneProcess; - public GetDashboardOverlaySceneProcess_callback GetDashboardOverlaySceneProcess; - public ShowDashboard_callback ShowDashboard; - public GetPrimaryDashboardDevice_callback GetPrimaryDashboardDevice; - public ShowKeyboard_callback ShowKeyboard; - public ShowKeyboardForOverlay_callback ShowKeyboardForOverlay; - public GetKeyboardText_callback GetKeyboardText; - public HideKeyboard_callback HideKeyboard; - public SetKeyboardTransformAbsolute_callback SetKeyboardTransformAbsolute; - public SetKeyboardPositionForOverlay_callback SetKeyboardPositionForOverlay; - public SetOverlayIntersectionMask_callback SetOverlayIntersectionMask; - public GetOverlayFlags_callback GetOverlayFlags; - public ShowMessageOverlay_callback ShowMessageOverlay; - public CloseMessageOverlay_callback CloseMessageOverlay; - - public VR_IVROverlay_FnTable() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("FindOverlay", "CreateOverlay", "DestroyOverlay", "SetHighQualityOverlay", "GetHighQualityOverlay", "GetOverlayKey", "GetOverlayName", "SetOverlayName", "GetOverlayImageData", "GetOverlayErrorNameFromEnum", "SetOverlayRenderingPid", "GetOverlayRenderingPid", "SetOverlayFlag", "GetOverlayFlag", "SetOverlayColor", "GetOverlayColor", "SetOverlayAlpha", "GetOverlayAlpha", "SetOverlayTexelAspect", "GetOverlayTexelAspect", "SetOverlaySortOrder", "GetOverlaySortOrder", "SetOverlayWidthInMeters", "GetOverlayWidthInMeters", "SetOverlayAutoCurveDistanceRangeInMeters", "GetOverlayAutoCurveDistanceRangeInMeters", "SetOverlayTextureColorSpace", "GetOverlayTextureColorSpace", "SetOverlayTextureBounds", "GetOverlayTextureBounds", "GetOverlayRenderModel", "SetOverlayRenderModel", "GetOverlayTransformType", "SetOverlayTransformAbsolute", "GetOverlayTransformAbsolute", "SetOverlayTransformTrackedDeviceRelative", "GetOverlayTransformTrackedDeviceRelative", "SetOverlayTransformTrackedDeviceComponent", "GetOverlayTransformTrackedDeviceComponent", "GetOverlayTransformOverlayRelative", "SetOverlayTransformOverlayRelative", "ShowOverlay", "HideOverlay", "IsOverlayVisible", "GetTransformForOverlayCoordinates", "PollNextOverlayEvent", "GetOverlayInputMethod", "SetOverlayInputMethod", "GetOverlayMouseScale", "SetOverlayMouseScale", "ComputeOverlayIntersection", "IsHoverTargetOverlay", "GetGamepadFocusOverlay", "SetGamepadFocusOverlay", "SetOverlayNeighbor", "MoveGamepadFocusToNeighbor", "SetOverlayDualAnalogTransform", "GetOverlayDualAnalogTransform", "SetOverlayTexture", "ClearOverlayTexture", "SetOverlayRaw", "SetOverlayFromFile", "GetOverlayTexture", "ReleaseNativeOverlayHandle", "GetOverlayTextureSize", "CreateDashboardOverlay", "IsDashboardVisible", "IsActiveDashboardOverlay", "SetDashboardOverlaySceneProcess", "GetDashboardOverlaySceneProcess", "ShowDashboard", "GetPrimaryDashboardDevice", "ShowKeyboard", "ShowKeyboardForOverlay", "GetKeyboardText", "HideKeyboard", "SetKeyboardTransformAbsolute", "SetKeyboardPositionForOverlay", "SetOverlayIntersectionMask", "GetOverlayFlags", "ShowMessageOverlay", "CloseMessageOverlay"); - } - - public VR_IVROverlay_FnTable(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VR_IVROverlay_FnTable implements Structure.ByReference - { - } - - public static class ByValue extends VR_IVROverlay_FnTable implements Structure.ByValue - { - } - - public interface ClearOverlayTexture_callback extends Callback - { - int apply(long var1); - } - - public interface CloseMessageOverlay_callback extends Callback - { - void apply(); - } - - public interface ComputeOverlayIntersection_callback extends Callback - { - byte apply(long var1, VROverlayIntersectionParams_t var3, VROverlayIntersectionResults_t var4); - } - - public interface CreateDashboardOverlay_callback extends Callback - { - int apply(Pointer var1, Pointer var2, LongByReference var3, LongByReference var4); - } - - public interface CreateOverlay_callback extends Callback - { - int apply(Pointer var1, Pointer var2, LongByReference var3); - } - - public interface DestroyOverlay_callback extends Callback - { - int apply(long var1); - } - - public interface FindOverlay_callback extends Callback - { - int apply(Pointer var1, LongByReference var2); - } - - public interface GetDashboardOverlaySceneProcess_callback extends Callback - { - int apply(long var1, IntByReference var3); - } - - public interface GetGamepadFocusOverlay_callback extends Callback - { - long apply(); - } - - public interface GetHighQualityOverlay_callback extends Callback - { - long apply(); - } - - public interface GetKeyboardText_callback extends Callback - { - int apply(Pointer var1, int var2); - } - - public interface GetOverlayAlpha_callback extends Callback - { - int apply(long var1, FloatByReference var3); - } - - public interface GetOverlayAutoCurveDistanceRangeInMeters_callback extends Callback - { - int apply(long var1, FloatByReference var3, FloatByReference var4); - } - - public interface GetOverlayColor_callback extends Callback - { - int apply(long var1, FloatByReference var3, FloatByReference var4, FloatByReference var5); - } - - public interface GetOverlayDualAnalogTransform_callback extends Callback - { - int apply(long var1, int var3, HmdVector2_t var4, FloatByReference var5); - } - - public interface GetOverlayErrorNameFromEnum_callback extends Callback - { - Pointer apply(int var1); - } - - public interface GetOverlayFlag_callback extends Callback - { - int apply(long var1, int var3, Pointer var4); - } - - public interface GetOverlayFlags_callback extends Callback - { - int apply(long var1, IntByReference var3); - } - - public interface GetOverlayImageData_callback extends Callback - { - int apply(long var1, Pointer var3, int var4, IntByReference var5, IntByReference var6); - } - - public interface GetOverlayInputMethod_callback extends Callback - { - int apply(long var1, IntByReference var3); - } - - public interface GetOverlayKey_callback extends Callback - { - int apply(long var1, Pointer var3, int var4, IntByReference var5); - } - - public interface GetOverlayMouseScale_callback extends Callback - { - int apply(long var1, HmdVector2_t var3); - } - - public interface GetOverlayName_callback extends Callback - { - int apply(long var1, Pointer var3, int var4, IntByReference var5); - } - - public interface GetOverlayRenderModel_callback extends Callback - { - int apply(long var1, Pointer var3, int var4, HmdColor_t var5, IntByReference var6); - } - - public interface GetOverlayRenderingPid_callback extends Callback - { - int apply(long var1); - } - - public interface GetOverlaySortOrder_callback extends Callback - { - int apply(long var1, IntByReference var3); - } - - public interface GetOverlayTexelAspect_callback extends Callback - { - int apply(long var1, FloatByReference var3); - } - - public interface GetOverlayTextureBounds_callback extends Callback - { - int apply(long var1, VRTextureBounds_t var3); - } - - public interface GetOverlayTextureColorSpace_callback extends Callback - { - int apply(long var1, IntByReference var3); - } - - public interface GetOverlayTextureSize_callback extends Callback - { - int apply(long var1, IntByReference var3, IntByReference var4); - } - - public interface GetOverlayTexture_callback extends Callback - { - int apply(long var1, PointerByReference var3, Pointer var4, IntByReference var5, IntByReference var6, IntByReference var7, IntByReference var8, IntByReference var9, VRTextureBounds_t var10); - } - - public interface GetOverlayTransformAbsolute_callback extends Callback - { - int apply(long var1, IntByReference var3, HmdMatrix34_t var4); - } - - public interface GetOverlayTransformOverlayRelative_callback extends Callback - { - int apply(long var1, LongByReference var3, HmdMatrix34_t var4); - } - - public interface GetOverlayTransformTrackedDeviceComponent_callback extends Callback - { - int apply(long var1, IntByReference var3, Pointer var4, int var5); - } - - public interface GetOverlayTransformTrackedDeviceRelative_callback extends Callback - { - int apply(long var1, IntByReference var3, HmdMatrix34_t var4); - } - - public interface GetOverlayTransformType_callback extends Callback - { - int apply(long var1, IntByReference var3); - } - - public interface GetOverlayWidthInMeters_callback extends Callback - { - int apply(long var1, FloatByReference var3); - } - - public interface GetPrimaryDashboardDevice_callback extends Callback - { - int apply(); - } - - public interface GetTransformForOverlayCoordinates_callback extends Callback - { - int apply(long var1, int var3, HmdVector2_t.ByValue var4, HmdMatrix34_t var5); - } - - public interface HideKeyboard_callback extends Callback - { - void apply(); - } - - public interface HideOverlay_callback extends Callback - { - int apply(long var1); - } - - public interface IsActiveDashboardOverlay_callback extends Callback - { - byte apply(long var1); - } - - public interface IsDashboardVisible_callback extends Callback - { - byte apply(); - } - - public interface IsHoverTargetOverlay_callback extends Callback - { - byte apply(long var1); - } - - public interface IsOverlayVisible_callback extends Callback - { - byte apply(long var1); - } - - public interface MoveGamepadFocusToNeighbor_callback extends Callback - { - int apply(int var1, long var2); - } - - public interface PollNextOverlayEvent_callback extends Callback - { - byte apply(long var1, VREvent_t var3, int var4); - } - - public interface ReleaseNativeOverlayHandle_callback extends Callback - { - int apply(long var1, Pointer var3); - } - - public interface SetDashboardOverlaySceneProcess_callback extends Callback - { - int apply(long var1, int var3); - } - - public interface SetGamepadFocusOverlay_callback extends Callback - { - int apply(long var1); - } - - public interface SetHighQualityOverlay_callback extends Callback - { - int apply(long var1); - } - - public interface SetKeyboardPositionForOverlay_callback extends Callback - { - void apply(long var1, HmdRect2_t.ByValue var3); - } - - public interface SetKeyboardTransformAbsolute_callback extends Callback - { - void apply(int var1, HmdMatrix34_t var2); - } - - public interface SetOverlayAlpha_callback extends Callback - { - int apply(long var1, float var3); - } - - public interface SetOverlayAutoCurveDistanceRangeInMeters_callback extends Callback - { - int apply(long var1, float var3, float var4); - } - - public interface SetOverlayColor_callback extends Callback - { - int apply(long var1, float var3, float var4, float var5); - } - - public interface SetOverlayDualAnalogTransform_callback extends Callback - { - int apply(long var1, int var3, HmdVector2_t var4, float var5); - } - - public interface SetOverlayFlag_callback extends Callback - { - int apply(long var1, int var3, byte var4); - } - - public interface SetOverlayFromFile_callback extends Callback - { - int apply(long var1, Pointer var3); - } - - public interface SetOverlayInputMethod_callback extends Callback - { - int apply(long var1, int var3); - } - - public interface SetOverlayIntersectionMask_callback extends Callback - { - int apply(long var1, VROverlayIntersectionMaskPrimitive_t var3, int var4, int var5); - } - - public interface SetOverlayMouseScale_callback extends Callback - { - int apply(long var1, HmdVector2_t var3); - } - - public interface SetOverlayName_callback extends Callback - { - int apply(long var1, Pointer var3); - } - - public interface SetOverlayNeighbor_callback extends Callback - { - int apply(int var1, long var2, long var4); - } - - public interface SetOverlayRaw_callback extends Callback - { - int apply(long var1, Pointer var3, int var4, int var5, int var6); - } - - public interface SetOverlayRenderModel_callback extends Callback - { - int apply(long var1, Pointer var3, HmdColor_t var4); - } - - public interface SetOverlayRenderingPid_callback extends Callback - { - int apply(long var1, int var3); - } - - public interface SetOverlaySortOrder_callback extends Callback - { - int apply(long var1, int var3); - } - - public interface SetOverlayTexelAspect_callback extends Callback - { - int apply(long var1, float var3); - } - - public interface SetOverlayTextureBounds_callback extends Callback - { - int apply(long var1, VRTextureBounds_t var3); - } - - public interface SetOverlayTextureColorSpace_callback extends Callback - { - int apply(long var1, int var3); - } - - public interface SetOverlayTexture_callback extends Callback - { - int apply(long var1, Texture_t var3); - } - - public interface SetOverlayTransformAbsolute_callback extends Callback - { - int apply(long var1, int var3, HmdMatrix34_t var4); - } - - public interface SetOverlayTransformOverlayRelative_callback extends Callback - { - int apply(long var1, long var3, HmdMatrix34_t var5); - } - - public interface SetOverlayTransformTrackedDeviceComponent_callback extends Callback - { - int apply(long var1, int var3, Pointer var4); - } - - public interface SetOverlayTransformTrackedDeviceRelative_callback extends Callback - { - int apply(long var1, int var3, HmdMatrix34_t var4); - } - - public interface SetOverlayWidthInMeters_callback extends Callback - { - int apply(long var1, float var3); - } - - public interface ShowDashboard_callback extends Callback - { - void apply(Pointer var1); - } - - public interface ShowKeyboardForOverlay_callback extends Callback - { - int apply(long var1, int var3, int var4, Pointer var5, int var6, Pointer var7, byte var8, long var9); - } - - public interface ShowKeyboard_callback extends Callback - { - int apply(int var1, int var2, Pointer var3, int var4, Pointer var5, byte var6, long var7); - } - - public interface ShowMessageOverlay_callback extends Callback - { - int apply(Pointer var1, Pointer var2, Pointer var3, Pointer var4, Pointer var5, Pointer var6); - } - - public interface ShowOverlay_callback extends Callback - { - int apply(long var1); - } -} diff --git a/common/src/main/java/jopenvr/VR_IVRRenderModels_FnTable.java b/common/src/main/java/jopenvr/VR_IVRRenderModels_FnTable.java deleted file mode 100644 index 454a91d62..000000000 --- a/common/src/main/java/jopenvr/VR_IVRRenderModels_FnTable.java +++ /dev/null @@ -1,150 +0,0 @@ -package jopenvr; - -import com.sun.jna.Callback; -import com.sun.jna.Pointer; -import com.sun.jna.Structure; -import com.sun.jna.ptr.IntByReference; -import com.sun.jna.ptr.PointerByReference; - -import java.util.Arrays; -import java.util.List; - -public class VR_IVRRenderModels_FnTable extends Structure -{ - public LoadRenderModel_Async_callback LoadRenderModel_Async; - public FreeRenderModel_callback FreeRenderModel; - public LoadTexture_Async_callback LoadTexture_Async; - public FreeTexture_callback FreeTexture; - public LoadTextureD3D11_Async_callback LoadTextureD3D11_Async; - public LoadIntoTextureD3D11_Async_callback LoadIntoTextureD3D11_Async; - public FreeTextureD3D11_callback FreeTextureD3D11; - public GetRenderModelName_callback GetRenderModelName; - public GetRenderModelCount_callback GetRenderModelCount; - public GetComponentCount_callback GetComponentCount; - public GetComponentName_callback GetComponentName; - public GetComponentButtonMask_callback GetComponentButtonMask; - public GetComponentRenderModelName_callback GetComponentRenderModelName; - public GetComponentStateForDevicePath_callback GetComponentStateForDevicePath; - public GetComponentState_callback GetComponentState; - public RenderModelHasComponent_callback RenderModelHasComponent; - public GetRenderModelThumbnailURL_callback GetRenderModelThumbnailURL; - public GetRenderModelOriginalPath_callback GetRenderModelOriginalPath; - public GetRenderModelErrorNameFromEnum_callback GetRenderModelErrorNameFromEnum; - - public VR_IVRRenderModels_FnTable() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("LoadRenderModel_Async", "FreeRenderModel", "LoadTexture_Async", "FreeTexture", "LoadTextureD3D11_Async", "LoadIntoTextureD3D11_Async", "FreeTextureD3D11", "GetRenderModelName", "GetRenderModelCount", "GetComponentCount", "GetComponentName", "GetComponentButtonMask", "GetComponentRenderModelName", "GetComponentStateForDevicePath", "GetComponentState", "RenderModelHasComponent", "GetRenderModelThumbnailURL", "GetRenderModelOriginalPath", "GetRenderModelErrorNameFromEnum"); - } - - public VR_IVRRenderModels_FnTable(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VR_IVRRenderModels_FnTable implements Structure.ByReference - { - } - - public static class ByValue extends VR_IVRRenderModels_FnTable implements Structure.ByValue - { - } - - public interface FreeRenderModel_callback extends Callback - { - void apply(RenderModel_t var1); - } - - public interface FreeTextureD3D11_callback extends Callback - { - void apply(Pointer var1); - } - - public interface FreeTexture_callback extends Callback - { - void apply(RenderModel_TextureMap_t var1); - } - - public interface GetComponentButtonMask_callback extends Callback - { - long apply(Pointer var1, Pointer var2); - } - - public interface GetComponentCount_callback extends Callback - { - int apply(Pointer var1); - } - - public interface GetComponentName_callback extends Callback - { - int apply(Pointer var1, int var2, Pointer var3, int var4); - } - - public interface GetComponentRenderModelName_callback extends Callback - { - int apply(Pointer var1, Pointer var2, Pointer var3, int var4); - } - - public interface GetComponentStateForDevicePath_callback extends Callback - { - byte apply(Pointer var1, Pointer var2, long var3, RenderModel_ControllerMode_State_t var5, RenderModel_ComponentState_t var6); - } - - public interface GetComponentState_callback extends Callback - { - byte apply(Pointer var1, Pointer var2, VRControllerState_t var3, RenderModel_ControllerMode_State_t var4, RenderModel_ComponentState_t var5); - } - - public interface GetRenderModelCount_callback extends Callback - { - int apply(); - } - - public interface GetRenderModelErrorNameFromEnum_callback extends Callback - { - Pointer apply(int var1); - } - - public interface GetRenderModelName_callback extends Callback - { - int apply(int var1, Pointer var2, int var3); - } - - public interface GetRenderModelOriginalPath_callback extends Callback - { - int apply(Pointer var1, Pointer var2, int var3, IntByReference var4); - } - - public interface GetRenderModelThumbnailURL_callback extends Callback - { - int apply(Pointer var1, Pointer var2, int var3, IntByReference var4); - } - - public interface LoadIntoTextureD3D11_Async_callback extends Callback - { - int apply(int var1, Pointer var2); - } - - public interface LoadRenderModel_Async_callback extends Callback - { - int apply(Pointer var1, PointerByReference var2); - } - - public interface LoadTextureD3D11_Async_callback extends Callback - { - int apply(int var1, Pointer var2, PointerByReference var3); - } - - public interface LoadTexture_Async_callback extends Callback - { - int apply(int var1, PointerByReference var2); - } - - public interface RenderModelHasComponent_callback extends Callback - { - byte apply(Pointer var1, Pointer var2); - } -} diff --git a/common/src/main/java/jopenvr/VR_IVRResources_FnTable.java b/common/src/main/java/jopenvr/VR_IVRResources_FnTable.java deleted file mode 100644 index eca19a96f..000000000 --- a/common/src/main/java/jopenvr/VR_IVRResources_FnTable.java +++ /dev/null @@ -1,52 +0,0 @@ -package jopenvr; - -import com.sun.jna.Callback; -import com.sun.jna.Pointer; -import com.sun.jna.Structure; - -import java.util.Arrays; -import java.util.List; - -public class VR_IVRResources_FnTable extends Structure -{ - public LoadSharedResource_callback LoadSharedResource; - public GetResourceFullPath_callback GetResourceFullPath; - - public VR_IVRResources_FnTable() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("LoadSharedResource", "GetResourceFullPath"); - } - - public VR_IVRResources_FnTable(LoadSharedResource_callback LoadSharedResource, GetResourceFullPath_callback GetResourceFullPath) - { - this.LoadSharedResource = LoadSharedResource; - this.GetResourceFullPath = GetResourceFullPath; - } - - public VR_IVRResources_FnTable(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VR_IVRResources_FnTable implements Structure.ByReference - { - } - - public static class ByValue extends VR_IVRResources_FnTable implements Structure.ByValue - { - } - - public interface GetResourceFullPath_callback extends Callback - { - int apply(Pointer var1, Pointer var2, Pointer var3, int var4); - } - - public interface LoadSharedResource_callback extends Callback - { - int apply(Pointer var1, Pointer var2, int var3); - } -} diff --git a/common/src/main/java/jopenvr/VR_IVRScreenshots_FnTable.java b/common/src/main/java/jopenvr/VR_IVRScreenshots_FnTable.java deleted file mode 100644 index 7dfc2299e..000000000 --- a/common/src/main/java/jopenvr/VR_IVRScreenshots_FnTable.java +++ /dev/null @@ -1,88 +0,0 @@ -package jopenvr; - -import com.sun.jna.Callback; -import com.sun.jna.Pointer; -import com.sun.jna.Structure; -import com.sun.jna.ptr.IntByReference; - -import java.util.Arrays; -import java.util.List; - -public class VR_IVRScreenshots_FnTable extends Structure -{ - public RequestScreenshot_callback RequestScreenshot; - public HookScreenshot_callback HookScreenshot; - public GetScreenshotPropertyType_callback GetScreenshotPropertyType; - public GetScreenshotPropertyFilename_callback GetScreenshotPropertyFilename; - public UpdateScreenshotProgress_callback UpdateScreenshotProgress; - public TakeStereoScreenshot_callback TakeStereoScreenshot; - public SubmitScreenshot_callback SubmitScreenshot; - - public VR_IVRScreenshots_FnTable() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("RequestScreenshot", "HookScreenshot", "GetScreenshotPropertyType", "GetScreenshotPropertyFilename", "UpdateScreenshotProgress", "TakeStereoScreenshot", "SubmitScreenshot"); - } - - public VR_IVRScreenshots_FnTable(RequestScreenshot_callback RequestScreenshot, HookScreenshot_callback HookScreenshot, GetScreenshotPropertyType_callback GetScreenshotPropertyType, GetScreenshotPropertyFilename_callback GetScreenshotPropertyFilename, UpdateScreenshotProgress_callback UpdateScreenshotProgress, TakeStereoScreenshot_callback TakeStereoScreenshot, SubmitScreenshot_callback SubmitScreenshot) - { - this.RequestScreenshot = RequestScreenshot; - this.HookScreenshot = HookScreenshot; - this.GetScreenshotPropertyType = GetScreenshotPropertyType; - this.GetScreenshotPropertyFilename = GetScreenshotPropertyFilename; - this.UpdateScreenshotProgress = UpdateScreenshotProgress; - this.TakeStereoScreenshot = TakeStereoScreenshot; - this.SubmitScreenshot = SubmitScreenshot; - } - - public VR_IVRScreenshots_FnTable(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VR_IVRScreenshots_FnTable implements Structure.ByReference - { - } - - public static class ByValue extends VR_IVRScreenshots_FnTable implements Structure.ByValue - { - } - - public interface GetScreenshotPropertyFilename_callback extends Callback - { - int apply(int var1, int var2, Pointer var3, int var4, IntByReference var5); - } - - public interface GetScreenshotPropertyType_callback extends Callback - { - int apply(int var1, IntByReference var2); - } - - public interface HookScreenshot_callback extends Callback - { - int apply(IntByReference var1, int var2); - } - - public interface RequestScreenshot_callback extends Callback - { - int apply(IntByReference var1, int var2, Pointer var3, Pointer var4); - } - - public interface SubmitScreenshot_callback extends Callback - { - int apply(int var1, int var2, Pointer var3, Pointer var4); - } - - public interface TakeStereoScreenshot_callback extends Callback - { - int apply(IntByReference var1, Pointer var2, Pointer var3); - } - - public interface UpdateScreenshotProgress_callback extends Callback - { - int apply(int var1, float var2); - } -} diff --git a/common/src/main/java/jopenvr/VR_IVRSettings_FnTable.java b/common/src/main/java/jopenvr/VR_IVRSettings_FnTable.java deleted file mode 100644 index ab5d74138..000000000 --- a/common/src/main/java/jopenvr/VR_IVRSettings_FnTable.java +++ /dev/null @@ -1,107 +0,0 @@ -package jopenvr; - -import com.sun.jna.Callback; -import com.sun.jna.Pointer; -import com.sun.jna.Structure; -import com.sun.jna.ptr.IntByReference; - -import java.util.Arrays; -import java.util.List; - -public class VR_IVRSettings_FnTable extends Structure -{ - public GetSettingsErrorNameFromEnum_callback GetSettingsErrorNameFromEnum; - public Sync_callback Sync; - public SetBool_callback SetBool; - public SetInt32_callback SetInt32; - public SetFloat_callback SetFloat; - public SetString_callback SetString; - public GetBool_callback GetBool; - public GetInt32_callback GetInt32; - public GetFloat_callback GetFloat; - public GetString_callback GetString; - public RemoveSection_callback RemoveSection; - public RemoveKeyInSection_callback RemoveKeyInSection; - - public VR_IVRSettings_FnTable() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("GetSettingsErrorNameFromEnum", "Sync", "SetBool", "SetInt32", "SetFloat", "SetString", "GetBool", "GetInt32", "GetFloat", "GetString", "RemoveSection", "RemoveKeyInSection"); - } - - public VR_IVRSettings_FnTable(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VR_IVRSettings_FnTable implements Structure.ByReference - { - } - - public static class ByValue extends VR_IVRSettings_FnTable implements Structure.ByValue - { - } - - public interface GetBool_callback extends Callback - { - byte apply(Pointer var1, Pointer var2, IntByReference var3); - } - - public interface GetFloat_callback extends Callback - { - float apply(Pointer var1, Pointer var2, IntByReference var3); - } - - public interface GetInt32_callback extends Callback - { - int apply(Pointer var1, Pointer var2, IntByReference var3); - } - - public interface GetSettingsErrorNameFromEnum_callback extends Callback - { - Pointer apply(int var1); - } - - public interface GetString_callback extends Callback - { - void apply(Pointer var1, Pointer var2, Pointer var3, int var4, IntByReference var5); - } - - public interface RemoveKeyInSection_callback extends Callback - { - void apply(Pointer var1, Pointer var2, IntByReference var3); - } - - public interface RemoveSection_callback extends Callback - { - void apply(Pointer var1, IntByReference var2); - } - - public interface SetBool_callback extends Callback - { - void apply(Pointer var1, Pointer var2, byte var3, IntByReference var4); - } - - public interface SetFloat_callback extends Callback - { - void apply(Pointer var1, Pointer var2, float var3, IntByReference var4); - } - - public interface SetInt32_callback extends Callback - { - void apply(Pointer var1, Pointer var2, int var3, IntByReference var4); - } - - public interface SetString_callback extends Callback - { - void apply(Pointer var1, Pointer var2, Pointer var3, IntByReference var4); - } - - public interface Sync_callback extends Callback - { - byte apply(byte var1, IntByReference var2); - } -} diff --git a/common/src/main/java/jopenvr/VR_IVRSpatialAnchors_FnTable.java b/common/src/main/java/jopenvr/VR_IVRSpatialAnchors_FnTable.java deleted file mode 100644 index cf43d4ee7..000000000 --- a/common/src/main/java/jopenvr/VR_IVRSpatialAnchors_FnTable.java +++ /dev/null @@ -1,67 +0,0 @@ -package jopenvr; - -import com.sun.jna.Callback; -import com.sun.jna.Pointer; -import com.sun.jna.Structure; -import com.sun.jna.ptr.IntByReference; - -import java.util.Arrays; -import java.util.List; - -public class VR_IVRSpatialAnchors_FnTable extends Structure -{ - public CreateSpatialAnchorFromDescriptor_callback CreateSpatialAnchorFromDescriptor; - public CreateSpatialAnchorFromPose_callback CreateSpatialAnchorFromPose; - public GetSpatialAnchorPose_callback GetSpatialAnchorPose; - public GetSpatialAnchorDescriptor_callback GetSpatialAnchorDescriptor; - - public VR_IVRSpatialAnchors_FnTable() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("CreateSpatialAnchorFromDescriptor", "CreateSpatialAnchorFromPose", "GetSpatialAnchorPose", "GetSpatialAnchorDescriptor"); - } - - public VR_IVRSpatialAnchors_FnTable(CreateSpatialAnchorFromDescriptor_callback CreateSpatialAnchorFromDescriptor, CreateSpatialAnchorFromPose_callback CreateSpatialAnchorFromPose, GetSpatialAnchorPose_callback GetSpatialAnchorPose, GetSpatialAnchorDescriptor_callback GetSpatialAnchorDescriptor) - { - this.CreateSpatialAnchorFromDescriptor = CreateSpatialAnchorFromDescriptor; - this.CreateSpatialAnchorFromPose = CreateSpatialAnchorFromPose; - this.GetSpatialAnchorPose = GetSpatialAnchorPose; - this.GetSpatialAnchorDescriptor = GetSpatialAnchorDescriptor; - } - - public VR_IVRSpatialAnchors_FnTable(Pointer peer) - { - super(peer); - } - - public static class ByReference extends VR_IVRSpatialAnchors_FnTable implements Structure.ByReference - { - } - - public static class ByValue extends VR_IVRSpatialAnchors_FnTable implements Structure.ByValue - { - } - - public interface CreateSpatialAnchorFromDescriptor_callback extends Callback - { - int apply(Pointer var1, IntByReference var2); - } - - public interface CreateSpatialAnchorFromPose_callback extends Callback - { - int apply(int var1, int var2, SpatialAnchorPose_t var3, IntByReference var4); - } - - public interface GetSpatialAnchorDescriptor_callback extends Callback - { - int apply(int var1, Pointer var2, IntByReference var3); - } - - public interface GetSpatialAnchorPose_callback extends Callback - { - int apply(int var1, int var2, SpatialAnchorPose_t var3); - } -} diff --git a/common/src/main/java/jopenvr/VR_IVRSystem_FnTable.java b/common/src/main/java/jopenvr/VR_IVRSystem_FnTable.java deleted file mode 100644 index 70b8ef3fa..000000000 --- a/common/src/main/java/jopenvr/VR_IVRSystem_FnTable.java +++ /dev/null @@ -1,319 +0,0 @@ -package jopenvr; - -import com.sun.jna.Callback; -import com.sun.jna.Pointer; -import com.sun.jna.Structure; -import com.sun.jna.ptr.FloatByReference; -import com.sun.jna.ptr.IntByReference; -import com.sun.jna.ptr.LongByReference; - -import java.util.Arrays; -import java.util.List; - -public class VR_IVRSystem_FnTable extends Structure -{ - public GetRecommendedRenderTargetSize_callback GetRecommendedRenderTargetSize; - public GetProjectionMatrix_callback GetProjectionMatrix; - public GetProjectionRaw_callback GetProjectionRaw; - public ComputeDistortion_callback ComputeDistortion; - public GetEyeToHeadTransform_callback GetEyeToHeadTransform; - public GetTimeSinceLastVsync_callback GetTimeSinceLastVsync; - public GetD3D9AdapterIndex_callback GetD3D9AdapterIndex; - public VR_IVRExtendedDisplay_FnTable.GetDXGIOutputInfo_callback GetDXGIOutputInfo; - public GetOutputDevice_callback GetOutputDevice; - public IsDisplayOnDesktop_callback IsDisplayOnDesktop; - public SetDisplayVisibility_callback SetDisplayVisibility; - public GetDeviceToAbsoluteTrackingPose_callback GetDeviceToAbsoluteTrackingPose; - public ResetSeatedZeroPose_callback ResetSeatedZeroPose; - public GetSeatedZeroPoseToStandingAbsoluteTrackingPose_callback GetSeatedZeroPoseToStandingAbsoluteTrackingPose; - public GetRawZeroPoseToStandingAbsoluteTrackingPose_callback GetRawZeroPoseToStandingAbsoluteTrackingPose; - public GetSortedTrackedDeviceIndicesOfClass_callback GetSortedTrackedDeviceIndicesOfClass; - public GetTrackedDeviceActivityLevel_callback GetTrackedDeviceActivityLevel; - public ApplyTransform_callback ApplyTransform; - public GetTrackedDeviceIndexForControllerRole_callback GetTrackedDeviceIndexForControllerRole; - public GetControllerRoleForTrackedDeviceIndex_callback GetControllerRoleForTrackedDeviceIndex; - public GetTrackedDeviceClass_callback GetTrackedDeviceClass; - public IsTrackedDeviceConnected_callback IsTrackedDeviceConnected; - public GetBoolTrackedDeviceProperty_callback GetBoolTrackedDeviceProperty; - public GetFloatTrackedDeviceProperty_callback GetFloatTrackedDeviceProperty; - public GetInt32TrackedDeviceProperty_callback GetInt32TrackedDeviceProperty; - public GetUint64TrackedDeviceProperty_callback GetUint64TrackedDeviceProperty; - public GetMatrix34TrackedDeviceProperty_callback GetMatrix34TrackedDeviceProperty; - public GetArrayTrackedDeviceProperty_callback GetArrayTrackedDeviceProperty; - public GetStringTrackedDeviceProperty_callback GetStringTrackedDeviceProperty; - public GetPropErrorNameFromEnum_callback GetPropErrorNameFromEnum; - public PollNextEvent_callback PollNextEvent; - public PollNextEventWithPose_callback PollNextEventWithPose; - public GetEventTypeNameFromEnum_callback GetEventTypeNameFromEnum; - public GetHiddenAreaMesh_callback GetHiddenAreaMesh; - public GetControllerState_callback GetControllerState; - public GetControllerStateWithPose_callback GetControllerStateWithPose; - public TriggerHapticPulse_callback TriggerHapticPulse; - public GetButtonIdNameFromEnum_callback GetButtonIdNameFromEnum; - public GetControllerAxisTypeNameFromEnum_callback GetControllerAxisTypeNameFromEnum; - public IsInputAvailable_callback IsInputAvailable; - public IsSteamVRDrawingControllers_callback IsSteamVRDrawingControllers; - public ShouldApplicationPause_callback ShouldApplicationPause; - public ShouldApplicationReduceRenderingWork_callback ShouldApplicationReduceRenderingWork; - public DriverDebugRequest_callback DriverDebugRequest; - public PerformFirmwareUpdate_callback PerformFirmwareUpdate; - public AcknowledgeQuit_Exiting_callback AcknowledgeQuit_Exiting; - public AcknowledgeQuit_UserPrompt_callback AcknowledgeQuit_UserPrompt; - - public VR_IVRSystem_FnTable() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("GetRecommendedRenderTargetSize", "GetProjectionMatrix", "GetProjectionRaw", "ComputeDistortion", "GetEyeToHeadTransform", "GetTimeSinceLastVsync", "GetD3D9AdapterIndex", "GetDXGIOutputInfo", "GetOutputDevice", "IsDisplayOnDesktop", "SetDisplayVisibility", "GetDeviceToAbsoluteTrackingPose", "ResetSeatedZeroPose", "GetSeatedZeroPoseToStandingAbsoluteTrackingPose", "GetRawZeroPoseToStandingAbsoluteTrackingPose", "GetSortedTrackedDeviceIndicesOfClass", "GetTrackedDeviceActivityLevel", "ApplyTransform", "GetTrackedDeviceIndexForControllerRole", "GetControllerRoleForTrackedDeviceIndex", "GetTrackedDeviceClass", "IsTrackedDeviceConnected", "GetBoolTrackedDeviceProperty", "GetFloatTrackedDeviceProperty", "GetInt32TrackedDeviceProperty", "GetUint64TrackedDeviceProperty", "GetMatrix34TrackedDeviceProperty", "GetArrayTrackedDeviceProperty", "GetStringTrackedDeviceProperty", "GetPropErrorNameFromEnum", "PollNextEvent", "PollNextEventWithPose", "GetEventTypeNameFromEnum", "GetHiddenAreaMesh", "GetControllerState", "GetControllerStateWithPose", "TriggerHapticPulse", "GetButtonIdNameFromEnum", "GetControllerAxisTypeNameFromEnum", "IsInputAvailable", "IsSteamVRDrawingControllers", "ShouldApplicationPause", "ShouldApplicationReduceRenderingWork", "DriverDebugRequest", "PerformFirmwareUpdate", "AcknowledgeQuit_Exiting", "AcknowledgeQuit_UserPrompt"); - } - - public VR_IVRSystem_FnTable(Pointer peer) - { - super(peer); - } - - public interface AcknowledgeQuit_Exiting_callback extends Callback - { - void apply(); - } - - public interface AcknowledgeQuit_UserPrompt_callback extends Callback - { - void apply(); - } - - public interface ApplyTransform_callback extends Callback - { - void apply(TrackedDevicePose_t var1, TrackedDevicePose_t var2, HmdMatrix34_t var3); - } - - public static class ByReference extends VR_IVRSystem_FnTable implements Structure.ByReference - { - } - - public static class ByValue extends VR_IVRSystem_FnTable implements Structure.ByValue - { - } - - public interface ComputeDistortion_callback extends Callback - { - byte apply(int var1, float var2, float var3, DistortionCoordinates_t var4); - } - - public interface DriverDebugRequest_callback extends Callback - { - int apply(int var1, Pointer var2, Pointer var3, int var4); - } - - public interface GetArrayTrackedDeviceProperty_callback extends Callback - { - int apply(int var1, int var2, int var3, Pointer var4, int var5, IntByReference var6); - } - - public interface GetBoolTrackedDeviceProperty_callback extends Callback - { - byte apply(int var1, int var2, IntByReference var3); - } - - public interface GetButtonIdNameFromEnum_callback extends Callback - { - Pointer apply(int var1); - } - - public interface GetControllerAxisTypeNameFromEnum_callback extends Callback - { - Pointer apply(int var1); - } - - public interface GetControllerRoleForTrackedDeviceIndex_callback extends Callback - { - int apply(int var1); - } - - public interface GetControllerStateWithPose_callback extends Callback - { - byte apply(int var1, int var2, VRControllerState_t var3, int var4, TrackedDevicePose_t var5); - } - - public interface GetControllerState_callback extends Callback - { - byte apply(int var1, VRControllerState_t var2, int var3); - } - - public interface GetD3D9AdapterIndex_callback extends Callback - { - int apply(); - } - - public interface GetDXGIOutputInfo_callback extends Callback - { - void apply(IntByReference var1); - } - - public interface GetDeviceToAbsoluteTrackingPose_callback extends Callback - { - void apply(int var1, float var2, TrackedDevicePose_t var3, int var4); - } - - public interface GetEventTypeNameFromEnum_callback extends Callback - { - Pointer apply(int var1); - } - - public interface GetEyeToHeadTransform_callback extends Callback - { - HmdMatrix34_t.ByValue apply(int var1); - } - - public interface GetFloatTrackedDeviceProperty_callback extends Callback - { - float apply(int var1, int var2, IntByReference var3); - } - - public interface GetHiddenAreaMesh_callback extends Callback - { - HiddenAreaMesh_t.ByValue apply(int var1, int var2); - } - - public interface GetInt32TrackedDeviceProperty_callback extends Callback - { - int apply(int var1, int var2, IntByReference var3); - } - - public interface GetMatrix34TrackedDeviceProperty_callback extends Callback - { - HmdMatrix34_t.ByValue apply(int var1, int var2, IntByReference var3); - } - - public interface GetOutputDevice_callback extends Callback - { - void apply(LongByReference var1, int var2, JOpenVRLibrary.VkInstance_T var3); - } - - public interface GetProjectionMatrix_callback extends Callback - { - HmdMatrix44_t.ByValue apply(int var1, float var2, float var3); - } - - public interface GetProjectionRaw_callback extends Callback - { - void apply(int var1, FloatByReference var2, FloatByReference var3, FloatByReference var4, FloatByReference var5); - } - - public interface GetPropErrorNameFromEnum_callback extends Callback - { - Pointer apply(int var1); - } - - public interface GetRawZeroPoseToStandingAbsoluteTrackingPose_callback extends Callback - { - HmdMatrix34_t.ByValue apply(); - } - - public interface GetRecommendedRenderTargetSize_callback extends Callback - { - void apply(IntByReference var1, IntByReference var2); - } - - public interface GetSeatedZeroPoseToStandingAbsoluteTrackingPose_callback extends Callback - { - HmdMatrix34_t.ByValue apply(); - } - - public interface GetSortedTrackedDeviceIndicesOfClass_callback extends Callback - { - int apply(int var1, IntByReference var2, int var3, int var4); - } - - public interface GetStringTrackedDeviceProperty_callback extends Callback - { - int apply(int var1, int var2, Pointer var3, int var4, IntByReference var5); - } - - public interface GetTimeSinceLastVsync_callback extends Callback - { - byte apply(FloatByReference var1, LongByReference var2); - } - - public interface GetTrackedDeviceActivityLevel_callback extends Callback - { - int apply(int var1); - } - - public interface GetTrackedDeviceClass_callback extends Callback - { - int apply(int var1); - } - - public interface GetTrackedDeviceIndexForControllerRole_callback extends Callback - { - int apply(int var1); - } - - public interface GetUint64TrackedDeviceProperty_callback extends Callback - { - long apply(int var1, int var2, IntByReference var3); - } - - public interface IsDisplayOnDesktop_callback extends Callback - { - byte apply(); - } - - public interface IsInputAvailable_callback extends Callback - { - byte apply(); - } - - public interface IsSteamVRDrawingControllers_callback extends Callback - { - byte apply(); - } - - public interface IsTrackedDeviceConnected_callback extends Callback - { - byte apply(int var1); - } - - public interface PerformFirmwareUpdate_callback extends Callback - { - int apply(int var1); - } - - public interface PollNextEventWithPose_callback extends Callback - { - byte apply(int var1, VREvent_t var2, int var3, TrackedDevicePose_t var4); - } - - public interface PollNextEvent_callback extends Callback - { - byte apply(VREvent_t var1, int var2); - } - - public interface ResetSeatedZeroPose_callback extends Callback - { - void apply(); - } - - public interface SetDisplayVisibility_callback extends Callback - { - byte apply(byte var1); - } - - public interface ShouldApplicationPause_callback extends Callback - { - byte apply(); - } - - public interface ShouldApplicationReduceRenderingWork_callback extends Callback - { - byte apply(); - } - - public interface TriggerHapticPulse_callback extends Callback - { - void apply(int var1, int var2, short var3); - } -} diff --git a/common/src/main/java/jopenvr/VR_IVRTrackedCamera_FnTable.java b/common/src/main/java/jopenvr/VR_IVRTrackedCamera_FnTable.java deleted file mode 100644 index 04ccbf1e3..000000000 --- a/common/src/main/java/jopenvr/VR_IVRTrackedCamera_FnTable.java +++ /dev/null @@ -1,109 +0,0 @@ -package jopenvr; - -import com.sun.jna.Callback; -import com.sun.jna.Pointer; -import com.sun.jna.Structure; -import com.sun.jna.ptr.IntByReference; -import com.sun.jna.ptr.LongByReference; -import com.sun.jna.ptr.PointerByReference; - -import java.util.Arrays; -import java.util.List; - -public class VR_IVRTrackedCamera_FnTable extends Structure -{ - public GetCameraErrorNameFromEnum_callback GetCameraErrorNameFromEnum; - public HasCamera_callback HasCamera; - public GetCameraFrameSize_callback GetCameraFrameSize; - public GetCameraIntrinsics_callback GetCameraIntrinsics; - public GetCameraProjection_callback GetCameraProjection; - public AcquireVideoStreamingService_callback AcquireVideoStreamingService; - public ReleaseVideoStreamingService_callback ReleaseVideoStreamingService; - public GetVideoStreamFrameBuffer_callback GetVideoStreamFrameBuffer; - public GetVideoStreamTextureSize_callback GetVideoStreamTextureSize; - public GetVideoStreamTextureD3D11_callback GetVideoStreamTextureD3D11; - public GetVideoStreamTextureGL_callback GetVideoStreamTextureGL; - public ReleaseVideoStreamTextureGL_callback ReleaseVideoStreamTextureGL; - - public VR_IVRTrackedCamera_FnTable() - { - } - - protected List getFieldOrder() - { - return Arrays.asList("GetCameraErrorNameFromEnum", "HasCamera", "GetCameraFrameSize", "GetCameraIntrinsics", "GetCameraProjection", "AcquireVideoStreamingService", "ReleaseVideoStreamingService", "GetVideoStreamFrameBuffer", "GetVideoStreamTextureSize", "GetVideoStreamTextureD3D11", "GetVideoStreamTextureGL", "ReleaseVideoStreamTextureGL"); - } - - public VR_IVRTrackedCamera_FnTable(Pointer peer) - { - super(peer); - } - - public interface AcquireVideoStreamingService_callback extends Callback - { - int apply(int var1, LongByReference var2); - } - - public static class ByReference extends VR_IVRTrackedCamera_FnTable implements Structure.ByReference - { - } - - public static class ByValue extends VR_IVRTrackedCamera_FnTable implements Structure.ByValue - { - } - - public interface GetCameraErrorNameFromEnum_callback extends Callback - { - Pointer apply(int var1); - } - - public interface GetCameraFrameSize_callback extends Callback - { - int apply(int var1, int var2, IntByReference var3, IntByReference var4, IntByReference var5); - } - - public interface GetCameraIntrinsics_callback extends Callback - { - int apply(int var1, int var2, int var3, HmdVector2_t var4, HmdVector2_t var5); - } - - public interface GetCameraProjection_callback extends Callback - { - int apply(int var1, int var2, int var3, float var4, float var5, HmdMatrix44_t var6); - } - - public interface GetVideoStreamFrameBuffer_callback extends Callback - { - int apply(long var1, int var3, Pointer var4, int var5, CameraVideoStreamFrameHeader_t var6, int var7); - } - - public interface GetVideoStreamTextureD3D11_callback extends Callback - { - int apply(long var1, int var3, Pointer var4, PointerByReference var5, CameraVideoStreamFrameHeader_t var6, int var7); - } - - public interface GetVideoStreamTextureGL_callback extends Callback - { - int apply(long var1, int var3, IntByReference var4, CameraVideoStreamFrameHeader_t var5, int var6); - } - - public interface GetVideoStreamTextureSize_callback extends Callback - { - int apply(int var1, int var2, VRTextureBounds_t var3, IntByReference var4, IntByReference var5); - } - - public interface HasCamera_callback extends Callback - { - int apply(int var1, Pointer var2); - } - - public interface ReleaseVideoStreamTextureGL_callback extends Callback - { - int apply(long var1, int var3); - } - - public interface ReleaseVideoStreamingService_callback extends Callback - { - int apply(long var1); - } -} diff --git a/common/src/main/java/org/vivecraft/GlStateHelper.java b/common/src/main/java/org/vivecraft/GlStateHelper.java deleted file mode 100644 index 54ac3ae74..000000000 --- a/common/src/main/java/org/vivecraft/GlStateHelper.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.vivecraft; - -import com.mojang.blaze3d.platform.GlStateManager; -import org.lwjgl.opengl.GL11; - -public class GlStateHelper { - public static void clear(int i) { - GlStateManager._clear(i, false); - } -} diff --git a/common/src/main/java/org/vivecraft/LaunchPopup.java b/common/src/main/java/org/vivecraft/LaunchPopup.java deleted file mode 100644 index 22d4777c3..000000000 --- a/common/src/main/java/org/vivecraft/LaunchPopup.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.vivecraft; - -import javax.swing.JOptionPane; - -public class LaunchPopup { - public static void main(String[] args) { - - String text = "This version of Vivecraft is a mod, and doesn't have an installer.\nPlease place this file inside your mods folder."; - - JOptionPane.showMessageDialog(null, text); - } -} diff --git a/common/src/main/java/org/vivecraft/MixinConfig.java b/common/src/main/java/org/vivecraft/MixinConfig.java new file mode 100644 index 000000000..9bcf3e51e --- /dev/null +++ b/common/src/main/java/org/vivecraft/MixinConfig.java @@ -0,0 +1,94 @@ +package org.vivecraft; + +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.objectweb.asm.tree.ClassNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; +import org.spongepowered.asm.service.MixinService; +import org.vivecraft.client.Xplat; + +import org.vivecraft.mod_compat_vr.iris.mixin.IrisChunkProgramOverridesMixinSodium_0_4_11; +import org.vivecraft.mod_compat_vr.iris.mixin.IrisChunkProgramOverridesMixinSodium_0_4_8; +import org.vivecraft.mod_compat_vr.iris.mixin.IrisChunkProgramOverridesMixinSodium_0_4_9; +import org.vivecraft.mod_compat_vr.sodium.mixin.RenderSectionManagerVRMixin; + +import java.io.IOException; +import java.util.List; +import java.util.Set; + +public class MixinConfig implements IMixinConfigPlugin { + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) { + + } + + @Override + public List getMixins() { + return null; + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } + + @Override + public void onLoad(String mixinPackage) { + } + + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + if (!Xplat.isModLoadedSuccess()) { + LogManager.getLogger().log(Level.WARN, "not loading '" + mixinClassName + "' because mod failed to load completely"); + return false; + } + + String neededClass = ""; + // apply iris sodium version specific mixins only when the right class is there + if (mixinClassName.equals(IrisChunkProgramOverridesMixinSodium_0_4_8.class.getName())) { + neededClass = "me.jellysquid.mods.sodium.client.model.vertex.type.ChunkVertexType"; + } + + else if (mixinClassName.equals(IrisChunkProgramOverridesMixinSodium_0_4_9.class.getName())) { + neededClass = "me.jellysquid.mods.sodium.client.render.vertex.type.ChunkVertexType"; + } + else if (mixinClassName.equals(IrisChunkProgramOverridesMixinSodium_0_4_11.class.getName())) { + neededClass = "me.jellysquid.mods.sodium.client.render.chunk.vertex.format.ChunkVertexType"; + } + else if (mixinClassName.equals(RenderSectionManagerVRMixin.class.getName())) { + neededClass = "me.jellysquid.mods.sodium.client.render.chunk.lists.ChunkRenderList"; + try { + MixinService.getService().getBytecodeProvider().getClassNode(neededClass); + ClassNode node = MixinService.getService().getBytecodeProvider().getClassNode(targetClassName); + return node.fields.stream().anyMatch(field -> field.name.equals("chunkRenderList")); + } catch (ClassNotFoundException | IOException e) { + return false; + } + } + + if (!neededClass.isEmpty()) { + try { + MixinService.getService().getBytecodeProvider().getClassNode(neededClass); + return true; + } catch (ClassNotFoundException | IOException e) { + LogManager.getLogger().log(Level.INFO, "Vivecraft: skipping mixin '" + mixinClassName + "'"); + return false; + } + } + + return !mixinClassName.contains("NoSodium") || (!Xplat.isModLoaded("sodium") && !Xplat.isModLoaded("rubidium")); + } +} diff --git a/common/src/main/java/org/vivecraft/NonVRMixinConfig.java b/common/src/main/java/org/vivecraft/NonVRMixinConfig.java deleted file mode 100644 index d52c716a9..000000000 --- a/common/src/main/java/org/vivecraft/NonVRMixinConfig.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.vivecraft; - -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.LogManager; -import org.objectweb.asm.tree.ClassNode; -import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; -import org.spongepowered.asm.mixin.extensibility.IMixinInfo; - -import java.util.List; -import java.util.Set; - -public class NonVRMixinConfig implements IMixinConfigPlugin { - private static boolean classLoadIgnore; - - public static void classLoad() { - classLoadIgnore = true; - } - - @Override - public void onLoad(String mixinPackage) { - - } - - @Override - public String getRefMapperConfig() { - return null; - } - - @Override - public void acceptTargets(Set myTargets, Set otherTargets) { - - } - - @Override - public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { - if (!Xplat.isModLoadedSuccess()) { - LogManager.getLogger().log(Level.WARN, "not loading '" + mixinClassName + "' because mod failed to load completely"); - return false; - } - if (mixinClassName.contains("ClientPacketListenerMixin")) { - return !VRState.checkVR(); - } else { - return true; - } - } - - @Override - public List getMixins() { - return null; - } - - @Override - public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { - - } - - @Override - public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { - - } -} diff --git a/common/src/main/java/org/vivecraft/SodiumHelper.java b/common/src/main/java/org/vivecraft/SodiumHelper.java deleted file mode 100644 index a8f795595..000000000 --- a/common/src/main/java/org/vivecraft/SodiumHelper.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.vivecraft; - -import it.unimi.dsi.fastutil.longs.LongArrayFIFOQueue; -import me.jellysquid.mods.sodium.client.SodiumClientMod; -import org.lwjgl.opengl.GL32C; - -public class SodiumHelper { - static final LongArrayFIFOQueue fences = new LongArrayFIFOQueue(); - - public static void preRenderMinecraft() { - while (fences.size() > SodiumClientMod.options().advanced.cpuRenderAheadLimit) { - var fence = fences.dequeueLong(); - GL32C.glClientWaitSync(fence, GL32C.GL_SYNC_FLUSH_COMMANDS_BIT, Long.MAX_VALUE); - GL32C.glDeleteSync(fence); - } - } - - public static void postRenderMinecraft() { - var fence = GL32C.glFenceSync(GL32C.GL_SYNC_GPU_COMMANDS_COMPLETE, 0); - - if (fence == 0) { - throw new RuntimeException("Failed to create fence object"); - } - - fences.enqueue(fence); - } - - public static void vignette(boolean b) { - SodiumClientMod.options().quality.enableVignette = b; - } -} diff --git a/common/src/main/java/org/vivecraft/VRMixinConfig.java b/common/src/main/java/org/vivecraft/VRMixinConfig.java deleted file mode 100644 index 01cacdabd..000000000 --- a/common/src/main/java/org/vivecraft/VRMixinConfig.java +++ /dev/null @@ -1,134 +0,0 @@ -package org.vivecraft; - -import com.sun.jna.NativeLibrary; -import jopenvr.JOpenVRLibrary; -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.LogManager; -import org.objectweb.asm.tree.ClassNode; -import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; -import org.spongepowered.asm.mixin.extensibility.IMixinInfo; -import org.vivecraft.utils.Utils; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Properties; -import java.util.Set; - -public class VRMixinConfig implements IMixinConfigPlugin { - protected static boolean asked = false; - private static boolean unpackedNatives = false; - - @Override - public String getRefMapperConfig() { - return null; - } - - @Override - public void acceptTargets(Set myTargets, Set otherTargets) { - - } - - @Override - public List getMixins() { - return null; - } - - @Override - public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { - - } - - @Override - public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { - - } - - @Override - public void onLoad(String mixinPackage) { - } - - static { - Properties properties = new Properties(); - try { - Path file = Xplat.getConfigPath("vivecraft-config.properties"); - if (!Files.exists(file)) { - Files.createFile(file); - } - properties.load(Files.newInputStream(file)); - if (properties.containsKey("vrStatus")) { - VRState.isVR = Boolean.parseBoolean(properties.getProperty("vrStatus")); - } else if (Xplat.isDedicatedServer()) { - VRState.isVR = false; - properties.setProperty("vrStatus", String.valueOf(VRState.isVR)); //set dedicated server to nonVR - } else if (!asked) { - properties.setProperty("vrStatus", "true"); - } - if (!unpackedNatives && VRState.isVR) { - // disable VR if natives failed - VRState.isVR = !JOpenVRLibrary.isErrored(); - unpackedNatives = true; - } - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - private static boolean unpackPlatformNatives() - { - String s = System.getProperty("os.name").toLowerCase(); - String s1 = System.getProperty("os.arch").toLowerCase(); - String s2 = "win"; - - if (s.contains("linux")) - { - s2 = "linux"; - } - else if (s.contains("mac")) - { - s2 = "osx"; - } - - if (!s.contains("mac")) - { - if (s1.contains("64")) - { - s2 = s2 + "64"; - } - else - { - s2 = s2 + "32"; - } - } - - try { - Utils.unpackNatives(s2); - } catch (Exception e) { - System.out.println("Native path not found"); - return false; - } - - if (!(new File("openvr/" + s2)).exists()) { - System.out.println("Path does not exist, skipping VR!"); - return false; - } - String s3 = (new File("openvr/" + s2)).getAbsolutePath(); - System.out.println("Adding OpenVR search path: " + s3); - NativeLibrary.addSearchPath("openvr_api", s3); - return true; - } - - @Override - public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { - if (!Xplat.isModLoadedSuccess()) { - LogManager.getLogger().log(Level.WARN, "not loading '" + mixinClassName + "' because mod failed to load completely"); - return false; - } - if (mixinClassName.contains("NoSodium") && (Xplat.isModLoaded("sodium") || Xplat.isModLoaded("rubidium"))) { - return false; - } - return VRState.isVR; - } -} diff --git a/common/src/main/java/org/vivecraft/VRMixinConfigPopup.java b/common/src/main/java/org/vivecraft/VRMixinConfigPopup.java deleted file mode 100644 index ef5f7b6c7..000000000 --- a/common/src/main/java/org/vivecraft/VRMixinConfigPopup.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.vivecraft; - -import org.lwjgl.util.tinyfd.TinyFileDialogs; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Properties; - -public class VRMixinConfigPopup { - - public static void askVR(Properties properties, Path file) throws IOException { - VRState.isVR = TinyFileDialogs.tinyfd_messageBox("VR", "Would you like to use VR?", "yesno", "info", false); - VRMixinConfig.asked = true; - - properties.setProperty("vrStatus", String.valueOf(VRState.isVR)); - properties.store(Files.newOutputStream(file), "This file stores if VR should be enabled."); - TinyFileDialogs.tinyfd_messageBox("VR", "Your choice has been saved. To edit it, please go to config/vivecraft-config.properties.", "ok", "info", false); - } -} diff --git a/common/src/main/java/org/vivecraft/VRState.java b/common/src/main/java/org/vivecraft/VRState.java deleted file mode 100644 index bc6e8af7b..000000000 --- a/common/src/main/java/org/vivecraft/VRState.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.vivecraft; - -public class VRState { - public static boolean isVR; - - public static boolean checkVR() { - NonVRMixinConfig.classLoad(); - return isVR; - } -} diff --git a/common/src/main/java/org/vivecraft/VRTextureTarget.java b/common/src/main/java/org/vivecraft/VRTextureTarget.java deleted file mode 100644 index c29bb2824..000000000 --- a/common/src/main/java/org/vivecraft/VRTextureTarget.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.vivecraft; - -import com.mojang.blaze3d.pipeline.RenderTarget; -import com.mojang.blaze3d.systems.RenderSystem; -import org.vivecraft.extensions.RenderTargetExtension; - -public class VRTextureTarget extends RenderTarget{ - - public VRTextureTarget(String name, int width, int height, boolean usedepth, boolean onMac, int texid, boolean depthtex, boolean linearFilter, boolean useStencil) { - super(usedepth); - RenderSystem.assertOnGameThreadOrInit(); - ((RenderTargetExtension)this).setName(name); - ((RenderTargetExtension)this).setTextid(texid); - ((RenderTargetExtension)this).isLinearFilter(linearFilter); - ((RenderTargetExtension)this).setUseStencil(useStencil); - this.resize(width, height, onMac); - if (useStencil) { - Xplat.enableRenderTargetStencil(this); - } - this.setClearColor(0, 0, 0, 0); - } -} diff --git a/common/src/main/java/org/vivecraft/api/ClientNetworkHelper.java b/common/src/main/java/org/vivecraft/api/ClientNetworkHelper.java deleted file mode 100644 index b2b54f495..000000000 --- a/common/src/main/java/org/vivecraft/api/ClientNetworkHelper.java +++ /dev/null @@ -1,238 +0,0 @@ -package org.vivecraft.api; - -import com.google.common.base.Charsets; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import net.minecraft.client.Minecraft; -import net.minecraft.client.player.LocalPlayer; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.game.ServerboundCustomPayloadPacket; -import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.Pose; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.Vec3; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.CommonDataHolder; -import org.vivecraft.gameplay.VRPlayer; -import org.vivecraft.render.PlayerModelController; -import org.vivecraft.render.RenderPass; -import org.vivecraft.settings.AutoCalibration; -import org.vivecraft.settings.VRSettings; -import org.vivecraft.utils.lwjgl.Matrix4f; -import org.vivecraft.utils.math.Quaternion; - -import java.nio.Buffer; -import java.nio.FloatBuffer; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -public class ClientNetworkHelper -{ - - public static final ResourceLocation channel = new ResourceLocation("vivecraft:data"); - public static boolean displayedChatMessage = false; - public static boolean serverWantsData = false; - public static boolean serverAllowsClimbey = false; - public static boolean serverSupportsDirectTeleport = false; - public static boolean serverAllowsCrawling = false; - private static float worldScallast = 0.0F; - private static float heightlast = 0.0F; - private static float capturedYaw; - private static float capturedPitch; - private static boolean overrideActive; - - public static ServerboundCustomPayloadPacket getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators command, byte[] payload) - { - FriendlyByteBuf friendlybytebuf = new FriendlyByteBuf(Unpooled.buffer()); - friendlybytebuf.writeByte(command.ordinal()); - friendlybytebuf.writeBytes(payload); - return new ServerboundCustomPayloadPacket(channel, friendlybytebuf); - } - - public static void resetServerSettings() - { - worldScallast = 0.0F; - heightlast = 0.0F; - serverAllowsClimbey = false; - serverWantsData = false; - serverSupportsDirectTeleport = false; - serverAllowsCrawling = false; - //DataHolder.getInstance().vrSettings.overrides.resetAll(); move to mixin - } - - public static void sendVersionInfo() - { - byte[] abyte = CommonDataHolder.getInstance().minecriftVerString.getBytes(Charsets.UTF_8); - String s = channel.toString(); - FriendlyByteBuf friendlybytebuf = new FriendlyByteBuf(Unpooled.buffer()); - friendlybytebuf.writeBytes(s.getBytes()); - Minecraft.getInstance().getConnection().send(new ServerboundCustomPayloadPacket(new ResourceLocation("minecraft:register"), friendlybytebuf)); - Minecraft.getInstance().getConnection().send(getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators.VERSION, abyte)); - //DataHolder.getInstance().vrPlayer.teleportWarningTimer = 200; move to mixin - } - - public static void sendVRPlayerPositions(VRPlayer player) - { - if (serverWantsData) - { - if (Minecraft.getInstance().getConnection() != null) - { - float f = ClientDataHolder.getInstance().vrPlayer.vrdata_world_post.worldScale; - - if (f != worldScallast) - { - ByteBuf bytebuf = Unpooled.buffer(); - bytebuf.writeFloat(f); - byte[] abyte = new byte[bytebuf.readableBytes()]; - bytebuf.readBytes(abyte); - ServerboundCustomPayloadPacket serverboundcustompayloadpacket = getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators.WORLDSCALE, abyte); - Minecraft.getInstance().getConnection().send(serverboundcustompayloadpacket); - worldScallast = f; - } - - float f1 = AutoCalibration.getPlayerHeight(); - - if (f1 != heightlast) - { - ByteBuf bytebuf2 = Unpooled.buffer(); - bytebuf2.writeFloat(f1 / 1.52F); - byte[] abyte3 = new byte[bytebuf2.readableBytes()]; - bytebuf2.readBytes(abyte3); - ServerboundCustomPayloadPacket serverboundcustompayloadpacket1 = getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators.HEIGHT, abyte3); - Minecraft.getInstance().getConnection().send(serverboundcustompayloadpacket1); - heightlast = f1; - } - - byte[] abyte2 = null; - byte[] abyte4 = null; - byte[] abyte5 = null; - FloatBuffer floatbuffer = player.vrdata_world_post.hmd.getMatrix().toFloatBuffer(); - ((Buffer)floatbuffer).rewind(); - Matrix4f matrix4f = new Matrix4f(); - matrix4f.load(floatbuffer); - Vec3 vec3 = player.vrdata_world_post.getEye(RenderPass.CENTER).getPosition().subtract(Minecraft.getInstance().player.position()); - Quaternion quaternion = new Quaternion(matrix4f); - ByteBuf bytebuf1 = Unpooled.buffer(); - bytebuf1.writeBoolean(ClientDataHolder.getInstance().vrSettings.seated); - bytebuf1.writeFloat((float)vec3.x); - bytebuf1.writeFloat((float)vec3.y); - bytebuf1.writeFloat((float)vec3.z); - bytebuf1.writeFloat(quaternion.w); - bytebuf1.writeFloat(quaternion.x); - bytebuf1.writeFloat(quaternion.y); - bytebuf1.writeFloat(quaternion.z); - byte[] abyte1 = new byte[bytebuf1.readableBytes()]; - bytebuf1.readBytes(abyte1); - ServerboundCustomPayloadPacket serverboundcustompayloadpacket2 = getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators.HEADDATA, abyte1); - Minecraft.getInstance().getConnection().send(serverboundcustompayloadpacket2); - - for (int i = 0; i < 2; ++i) - { - Vec3 vec31 = player.vrdata_world_post.getController(i).getPosition().subtract(Minecraft.getInstance().player.position()); - FloatBuffer floatbuffer1 = player.vrdata_world_post.getController(i).getMatrix().toFloatBuffer(); - ((Buffer)floatbuffer1).rewind(); - Matrix4f matrix4f1 = new Matrix4f(); - matrix4f1.load(floatbuffer1); - Quaternion quaternion1 = new Quaternion(matrix4f1); - ByteBuf bytebuf3 = Unpooled.buffer(); - bytebuf3.writeBoolean(ClientDataHolder.getInstance().vrSettings.reverseHands); - bytebuf3.writeFloat((float)vec31.x); - bytebuf3.writeFloat((float)vec31.y); - bytebuf3.writeFloat((float)vec31.z); - bytebuf3.writeFloat(quaternion1.w); - bytebuf3.writeFloat(quaternion1.x); - bytebuf3.writeFloat(quaternion1.y); - bytebuf3.writeFloat(quaternion1.z); - byte[] abyte6 = new byte[bytebuf3.readableBytes()]; - - if (i == 0) - { - abyte4 = abyte6; - } - else - { - abyte5 = abyte6; - } - - bytebuf3.readBytes(abyte6); - ServerboundCustomPayloadPacket serverboundcustompayloadpacket3 = getVivecraftClientPacket(i == 0 ? CommonNetworkHelper.PacketDiscriminators.CONTROLLER0DATA : CommonNetworkHelper.PacketDiscriminators.CONTROLLER1DATA, abyte6); - Minecraft.getInstance().getConnection().send(serverboundcustompayloadpacket3); - } - - PlayerModelController.getInstance().Update(Minecraft.getInstance().player.getGameProfile().getId(), abyte1, abyte4, abyte5, f, f1 / 1.52F, true); - } - } - } - - - - - - public static boolean isLimitedSurvivalTeleport() - { - return ClientDataHolder.getInstance().vrSettings.overrides.getSetting(VRSettings.VrOptions.LIMIT_TELEPORT).getBoolean(); - } - - public static int getTeleportUpLimit() - { - return ClientDataHolder.getInstance().vrSettings.overrides.getSetting(VRSettings.VrOptions.TELEPORT_UP_LIMIT).getInt(); - } - - public static int getTeleportDownLimit() - { - return ClientDataHolder.getInstance().vrSettings.overrides.getSetting(VRSettings.VrOptions.TELEPORT_DOWN_LIMIT).getInt(); - } - - public static int getTeleportHorizLimit() - { - return ClientDataHolder.getInstance().vrSettings.overrides.getSetting(VRSettings.VrOptions.TELEPORT_HORIZ_LIMIT).getInt(); - } - - public static void sendActiveHand(byte c) - { - if (serverWantsData) - { - ServerboundCustomPayloadPacket serverboundcustompayloadpacket = getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators.ACTIVEHAND, new byte[] {c}); - - if (Minecraft.getInstance().getConnection() != null) - { - Minecraft.getInstance().getConnection().send(serverboundcustompayloadpacket); - } - } - } - - public static void overridePose(LocalPlayer player) - { - if (ClientDataHolder.getInstance().crawlTracker.crawling) - { - player.setPose(Pose.SWIMMING); - } - } - - public static void overrideLook(Player player, Vec3 view) - { - if (!serverWantsData) - { - capturedPitch = player.getXRot(); - capturedYaw = player.getYRot(); - float f = (float)Math.toDegrees(Math.asin(-view.y / view.length())); - float f1 = (float)Math.toDegrees(Math.atan2(-view.x, view.z)); - ((LocalPlayer)player).connection.send(new ServerboundMovePlayerPacket.Rot(f1, f, player.isOnGround())); - overrideActive = true; - } - } - - public static void restoreLook(Player player) - { - if (!serverWantsData) - { - if (overrideActive) - { - ((LocalPlayer)player).connection.send(new ServerboundMovePlayerPacket.Rot(capturedYaw, capturedPitch, player.isOnGround())); - overrideActive = false; - } - } - } -} diff --git a/common/src/main/java/org/vivecraft/api/CommonNetworkHelper.java b/common/src/main/java/org/vivecraft/api/CommonNetworkHelper.java deleted file mode 100644 index 943398e83..000000000 --- a/common/src/main/java/org/vivecraft/api/CommonNetworkHelper.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.vivecraft.api; - -import io.netty.buffer.Unpooled; -import net.minecraft.client.player.LocalPlayer; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.game.ClientboundCustomPayloadPacket; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.Pose; -import net.minecraft.world.entity.player.Player; -import org.vivecraft.ClientDataHolder; - -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -public class CommonNetworkHelper { - - public static Map vivePlayers = new HashMap<>(); - public static final ResourceLocation channel = new ResourceLocation("vivecraft:data"); - - public static boolean isVive(ServerPlayer p) - { - if (p == null) - { - return false; - } - else - { - return vivePlayers.containsKey(p.getGameProfile().getId()) ? vivePlayers.get(p.getGameProfile().getId()).isVR() : false; - } - } - - public static void sendPosData(ServerPlayer from) - { - ServerVivePlayer serverviveplayer = vivePlayers.get(from.getUUID()); - - if (serverviveplayer != null) - { - if (serverviveplayer.player != null && !serverviveplayer.player.hasDisconnected()) - { - if (serverviveplayer.isVR()) - { - for (ServerVivePlayer serverviveplayer1 : vivePlayers.values()) - { - if (serverviveplayer1 != null && serverviveplayer1.player != null && !serverviveplayer1.player.hasDisconnected() && serverviveplayer != serverviveplayer1 && serverviveplayer.player.getCommandSenderWorld() == serverviveplayer1.player.getCommandSenderWorld() && serverviveplayer.hmdData != null && serverviveplayer.controller0data != null && serverviveplayer.controller1data != null) - { - double d0 = serverviveplayer1.player.position().distanceToSqr(serverviveplayer.player.position()); - - if (d0 < 65536.0D) - { - ClientboundCustomPayloadPacket clientboundcustompayloadpacket = getVivecraftServerPacket(CommonNetworkHelper.PacketDiscriminators.UBERPACKET, serverviveplayer.getUberPacket()); - serverviveplayer1.player.connection.send(clientboundcustompayloadpacket); - } - } - } - } - } - else - { - vivePlayers.remove(from.getUUID()); - } - } - } - - public static void overridePose(ServerPlayer player) { - ServerVivePlayer serverviveplayer = vivePlayers.get(player.getGameProfile().getId()); - - if (serverviveplayer != null && serverviveplayer.isVR() && serverviveplayer.crawling) { - player.setPose(Pose.SWIMMING); - } - } - - public static ClientboundCustomPayloadPacket getVivecraftServerPacket(CommonNetworkHelper.PacketDiscriminators command, byte[] payload) - { - FriendlyByteBuf friendlybytebuf = new FriendlyByteBuf(Unpooled.buffer()); - friendlybytebuf.writeByte(command.ordinal()); - friendlybytebuf.writeBytes(payload); - return new ClientboundCustomPayloadPacket(channel, friendlybytebuf); - } - - public static ClientboundCustomPayloadPacket getVivecraftServerPacket(CommonNetworkHelper.PacketDiscriminators command, String payload) - { - FriendlyByteBuf friendlybytebuf = new FriendlyByteBuf(Unpooled.buffer()); - friendlybytebuf.writeByte(command.ordinal()); - friendlybytebuf.writeUtf(payload); - return new ClientboundCustomPayloadPacket(channel, friendlybytebuf); - } - - public static enum PacketDiscriminators - { - VERSION, - REQUESTDATA, - HEADDATA, - CONTROLLER0DATA, - CONTROLLER1DATA, - WORLDSCALE, - DRAW, - MOVEMODE, - UBERPACKET, - TELEPORT, - CLIMBING, - SETTING_OVERRIDE, - HEIGHT, - ACTIVEHAND, - CRAWL; - } -} diff --git a/common/src/main/java/org/vivecraft/api/ErrorHelper.java b/common/src/main/java/org/vivecraft/api/ErrorHelper.java deleted file mode 100644 index ed954c67a..000000000 --- a/common/src/main/java/org/vivecraft/api/ErrorHelper.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.vivecraft.api; - -public class ErrorHelper -{ - public long createdTime; - public long endTime; - public String title; - public String message; - public String resolution; - - public ErrorHelper(String title, String message, String resolution, long displayTimeSecs) - { - this.title = "\u00a7e\u00a7l" + title; - this.message = message; - this.resolution = resolution; - this.createdTime = System.currentTimeMillis(); - this.endTime = this.createdTime + displayTimeSecs * 1000L; - } -} diff --git a/common/src/main/java/org/vivecraft/api/ServerVivePlayer.java b/common/src/main/java/org/vivecraft/api/ServerVivePlayer.java deleted file mode 100644 index 24d2c3317..000000000 --- a/common/src/main/java/org/vivecraft/api/ServerVivePlayer.java +++ /dev/null @@ -1,249 +0,0 @@ -package org.vivecraft.api; - -import io.netty.buffer.Unpooled; -import java.io.ByteArrayInputStream; -import java.io.DataInputStream; -import java.io.IOException; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.Vec3; -import org.vivecraft.utils.math.Quaternion; -import org.vivecraft.utils.math.Vector3; - -public class ServerVivePlayer -{ - public byte[] hmdData; - public byte[] controller0data; - public byte[] controller1data; - public byte[] draw; - public float worldScale = 1.0F; - public float heightscale = 1.0F; - public byte activeHand = 0; - public boolean crawling; - boolean isTeleportMode; - boolean isReverseHands; - boolean isVR = true; - public Vec3 offset = new Vec3(0.0D, 0.0D, 0.0D); - public ServerPlayer player; - final Vector3 forward = new Vector3(0.0F, 0.0F, -1.0F); - - public ServerVivePlayer(ServerPlayer player) - { - this.player = player; - } - - public float getDraw() - { - try - { - if (this.draw != null) - { - ByteArrayInputStream bytearrayinputstream = new ByteArrayInputStream(this.draw); - DataInputStream datainputstream = new DataInputStream(bytearrayinputstream); - float f = datainputstream.readFloat(); - datainputstream.close(); - return f; - } - } - catch (IOException ioexception) - { - } - - return 0.0F; - } - - public Vec3 getControllerVectorCustom(int controller, Vector3 direction) - { - byte[] abyte = this.controller0data; - - if (controller == 1) - { - abyte = this.controller1data; - } - - if (this.isSeated()) - { - controller = 0; - } - - if (abyte != null) - { - ByteArrayInputStream bytearrayinputstream = new ByteArrayInputStream(abyte); - DataInputStream datainputstream = new DataInputStream(bytearrayinputstream); - - try - { - boolean flag = datainputstream.readBoolean(); - float f = datainputstream.readFloat(); - float f1 = datainputstream.readFloat(); - float f2 = datainputstream.readFloat(); - float f3 = datainputstream.readFloat(); - float f4 = datainputstream.readFloat(); - float f5 = datainputstream.readFloat(); - float f6 = datainputstream.readFloat(); - Quaternion quaternion = new Quaternion(f3, f4, f5, f6); - Vector3 vector3 = quaternion.multiply(direction); - datainputstream.close(); - return new Vec3((double)vector3.getX(), (double)vector3.getY(), (double)vector3.getZ()); - } - catch (IOException ioexception) - { - return this.player.getLookAngle(); - } - } - else - { - return this.player.getLookAngle(); - } - } - - public Vec3 getControllerDir(int controller) - { - return this.getControllerVectorCustom(controller, this.forward); - } - - public Vec3 getHMDDir() - { - try - { - if (this.hmdData != null) - { - ByteArrayInputStream bytearrayinputstream = new ByteArrayInputStream(this.hmdData); - DataInputStream datainputstream = new DataInputStream(bytearrayinputstream); - boolean flag = datainputstream.readBoolean(); - float f = datainputstream.readFloat(); - float f1 = datainputstream.readFloat(); - float f2 = datainputstream.readFloat(); - float f3 = datainputstream.readFloat(); - float f4 = datainputstream.readFloat(); - float f5 = datainputstream.readFloat(); - float f6 = datainputstream.readFloat(); - Quaternion quaternion = new Quaternion(f3, f4, f5, f6); - Vector3 vector3 = quaternion.multiply(this.forward); - datainputstream.close(); - return new Vec3((double)vector3.getX(), (double)vector3.getY(), (double)vector3.getZ()); - } - } - catch (IOException ioexception) - { - } - - return this.player.getLookAngle(); - } - - public Vec3 getHMDPos(Player player) - { - try - { - if (this.hmdData != null) - { - ByteArrayInputStream bytearrayinputstream = new ByteArrayInputStream(this.hmdData); - DataInputStream datainputstream = new DataInputStream(bytearrayinputstream); - boolean flag = datainputstream.readBoolean(); - float f = datainputstream.readFloat(); - float f1 = datainputstream.readFloat(); - float f2 = datainputstream.readFloat(); - datainputstream.close(); - return (new Vec3((double)f, (double)f1, (double)f2)).add(player.position()).add(this.offset); - } - } - catch (IOException ioexception) - { - } - - return player.position().add(0.0D, 1.62D, 0.0D); - } - - public Vec3 getControllerPos(int c, Player player, boolean realPosition) - { - try - { - if (this.controller0data != null && this.controller0data != null) - { - ByteArrayInputStream bytearrayinputstream = new ByteArrayInputStream(c == 0 ? this.controller0data : this.controller1data); - DataInputStream datainputstream = new DataInputStream(bytearrayinputstream); - boolean flag = datainputstream.readBoolean(); - float f = datainputstream.readFloat(); - float f1 = datainputstream.readFloat(); - float f2 = datainputstream.readFloat(); - datainputstream.close(); - - // TODO: What the fuck is this nonsense? - if (this.isSeated() && !realPosition) - { - Vec3 vec3 = this.getHMDDir(); - vec3 = vec3.yRot((float)Math.toRadians(c == 0 ? -35.0D : 35.0D)); - vec3 = new Vec3(vec3.x, 0.0D, vec3.z); - vec3 = vec3.normalize(); - Vec3 vec31 = this.getHMDPos(player).add(vec3.x * 0.3D * (double)this.worldScale, -0.4D * (double)this.worldScale, vec3.z * 0.3D * (double)this.worldScale); - f = (float)vec31.x; - f1 = (float)vec31.y; - f2 = (float)vec31.z; - return new Vec3((double)f, (double)f1, (double)f2); - } - - return (new Vec3((double)f, (double)f1, (double)f2)).add(player.position()).add(this.offset); - } - } - catch (IOException ioexception) - { - } - - return player.position().add(0.0D, 1.62D, 0.0D); - } - - public Vec3 getControllerPos(int c, Player player) { - return getControllerPos(c, player, false); - } - - public boolean isVR() - { - return this.isVR; - } - - public void setVR(boolean vr) - { - this.isVR = vr; - } - - public boolean isSeated() - { - try - { - if (this.hmdData == null) - { - return false; - } - else if (this.hmdData.length < 29) - { - return false; - } - else - { - ByteArrayInputStream bytearrayinputstream = new ByteArrayInputStream(this.hmdData); - DataInputStream datainputstream = new DataInputStream(bytearrayinputstream); - boolean flag = datainputstream.readBoolean(); - datainputstream.close(); - return flag; - } - } - catch (IOException ioexception) - { - return false; - } - } - - public byte[] getUberPacket() - { - FriendlyByteBuf friendlybytebuf = new FriendlyByteBuf(Unpooled.buffer()); - friendlybytebuf.writeLong(this.player.getUUID().getMostSignificantBits()); - friendlybytebuf.writeLong(this.player.getUUID().getLeastSignificantBits()); - friendlybytebuf.writeBytes(this.hmdData); - friendlybytebuf.writeBytes(this.controller0data); - friendlybytebuf.writeBytes(this.controller1data); - friendlybytebuf.writeFloat(this.worldScale); - friendlybytebuf.writeFloat(this.heightscale); - return friendlybytebuf.array(); - } -} diff --git a/common/src/main/java/org/vivecraft/api_beta/VivecraftAPI.java b/common/src/main/java/org/vivecraft/api_beta/VivecraftAPI.java new file mode 100644 index 000000000..a95a3b0b8 --- /dev/null +++ b/common/src/main/java/org/vivecraft/api_beta/VivecraftAPI.java @@ -0,0 +1,16 @@ +package org.vivecraft.api_beta; + +import com.google.common.annotations.Beta; +import net.minecraft.world.entity.player.Player; +import org.vivecraft.common.APIImpl; + +@Beta +public interface VivecraftAPI { + + static VivecraftAPI getInstance() { + return APIImpl.INSTANCE; + } + + @Beta + boolean isVRPlayer(Player player); +} diff --git a/common/src/main/java/org/vivecraft/api_beta/client/VivecraftClientAPI.java b/common/src/main/java/org/vivecraft/api_beta/client/VivecraftClientAPI.java new file mode 100644 index 000000000..ff629beb4 --- /dev/null +++ b/common/src/main/java/org/vivecraft/api_beta/client/VivecraftClientAPI.java @@ -0,0 +1,18 @@ +package org.vivecraft.api_beta.client; + +import com.google.common.annotations.Beta; +import org.vivecraft.client.ClientAPIImpl; + +public interface VivecraftClientAPI { + + static VivecraftClientAPI getInstance() { + return ClientAPIImpl.INSTANCE; + } + + boolean isVrInitialized(); + + boolean isVrActive(); + + @Beta + boolean isVanillaRenderPass(); +} diff --git a/common/src/main/java/org/vivecraft/client/ClientAPIImpl.java b/common/src/main/java/org/vivecraft/client/ClientAPIImpl.java new file mode 100644 index 000000000..215c6625d --- /dev/null +++ b/common/src/main/java/org/vivecraft/client/ClientAPIImpl.java @@ -0,0 +1,28 @@ +package org.vivecraft.client; + +import org.vivecraft.api_beta.client.VivecraftClientAPI; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_xr.render_pass.RenderPassType; + +public final class ClientAPIImpl implements VivecraftClientAPI { + + public static final ClientAPIImpl INSTANCE = new ClientAPIImpl(); + + private ClientAPIImpl() { + } + + @Override + public boolean isVrInitialized() { + return VRState.vrInitialized; + } + + @Override + public boolean isVrActive() { + return VRState.vrRunning; + } + + @Override + public boolean isVanillaRenderPass() { + return RenderPassType.isVanilla(); + } +} diff --git a/common/src/main/java/org/vivecraft/client/VRPlayersClient.java b/common/src/main/java/org/vivecraft/client/VRPlayersClient.java new file mode 100644 index 000000000..071cc3f91 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client/VRPlayersClient.java @@ -0,0 +1,260 @@ +package org.vivecraft.client; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.particle.Particle; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import org.vivecraft.client_vr.VRData; +import org.vivecraft.client.utils.Utils; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.common.network.VrPlayerState; +import org.vivecraft.common.utils.math.Quaternion; +import org.vivecraft.common.utils.math.Vector3; + +import java.util.*; +import java.util.Map.Entry; + +public class VRPlayersClient { + private final Minecraft mc; + private final Map vivePlayers = new HashMap<>(); + private final Map vivePlayersLast = new HashMap<>(); + private final Map vivePlayersReceived = Collections.synchronizedMap(new HashMap<>()); + private final Map donors = new HashMap<>(); + static VRPlayersClient instance; + private final Random rand = new Random(); + public boolean debug = false; + + public static VRPlayersClient getInstance() { + if (instance == null) { + instance = new VRPlayersClient(); + } + + return instance; + } + + public static void clear() { + instance = null; + } + + private VRPlayersClient() { + this.mc = Minecraft.getInstance(); + } + + public boolean isVRPlayer(Player player) { + return vivePlayers.containsKey(player.getUUID()); + } + + public void disableVR(UUID player) { + this.vivePlayers.remove(player); + this.vivePlayersLast.remove(player); + this.vivePlayersReceived.remove(player); + } + + public void Update(UUID uuid, VrPlayerState vrPlayerState, float worldScale, float heightScale, boolean localPlayer) { + if (localPlayer || !this.mc.player.getUUID().equals(uuid)) { + Vector3 forward = new Vector3(0.0F, 0.0F, -1.0F); + Vector3 hmdDir = vrPlayerState.hmd().orientation().multiply(forward); + Vector3 controller0Dir = vrPlayerState.controller0().orientation().multiply(forward); + Vector3 controller1Dir = vrPlayerState.controller1().orientation().multiply(forward); + var rotInfo = new RotInfo(); + rotInfo.reverse = vrPlayerState.reverseHands(); + rotInfo.seated = vrPlayerState.seated(); + + if (this.donors.containsKey(uuid)) { + rotInfo.hmd = this.donors.get(uuid); + } + + rotInfo.leftArmRot = new Vec3(controller1Dir.getX(), controller1Dir.getY(), controller1Dir.getZ()); + rotInfo.rightArmRot = new Vec3(controller0Dir.getX(), controller0Dir.getY(), controller0Dir.getZ()); + rotInfo.headRot = new Vec3(hmdDir.getX(), hmdDir.getY(), hmdDir.getZ()); + rotInfo.Headpos = vrPlayerState.hmd().position(); + rotInfo.leftArmPos = vrPlayerState.controller1().position(); + rotInfo.rightArmPos = vrPlayerState.controller0().position(); + rotInfo.leftArmQuat = vrPlayerState.controller1().orientation(); + rotInfo.rightArmQuat = vrPlayerState.controller0().orientation(); + rotInfo.headQuat = vrPlayerState.hmd().orientation(); + rotInfo.worldScale = worldScale; + + if (heightScale < 0.5F) { + heightScale = 0.5F; + } + + if (heightScale > 1.5F) { + heightScale = 1.5F; + } + + rotInfo.heightScale = heightScale; + + if (rotInfo.seated) { + rotInfo.heightScale = 1.0F; + } + + this.vivePlayersReceived.put(uuid, rotInfo); + } + } + + public void Update(UUID uuid, VrPlayerState vrPlayerState, float worldscale, float heightscale) { + this.Update(uuid, vrPlayerState, worldscale, heightscale, false); + } + + public void tick() { + for (Entry entry : this.vivePlayers.entrySet()) { + this.vivePlayersLast.put(entry.getKey(), entry.getValue()); + } + + for (Entry entry1 : this.vivePlayersReceived.entrySet()) { + this.vivePlayers.put(entry1.getKey(), entry1.getValue()); + } + + Level level = Minecraft.getInstance().level; + + if (level != null) { + Iterator iterator = this.vivePlayers.keySet().iterator(); + + while (iterator.hasNext()) { + UUID uuid = iterator.next(); + + if (level.getPlayerByUUID(uuid) == null) { + iterator.remove(); + this.vivePlayersLast.remove(uuid); + this.vivePlayersReceived.remove(uuid); + } + } + + if (!this.mc.isPaused()) { + for (Player player : level.players()) { + if (this.donors.getOrDefault(player.getUUID(), 0) > 3 && this.rand.nextInt(10) < 4) { + RotInfo playermodelcontroller$rotinfo = this.vivePlayers.get(player.getUUID()); + Vec3 vec3 = player.getLookAngle(); + + if (playermodelcontroller$rotinfo != null) { + vec3 = playermodelcontroller$rotinfo.leftArmPos.subtract(playermodelcontroller$rotinfo.rightArmPos).yRot((-(float) Math.PI / 2F)); + + if (playermodelcontroller$rotinfo.reverse) { + vec3 = vec3.scale(-1.0D); + } else if (playermodelcontroller$rotinfo.seated) { + vec3 = playermodelcontroller$rotinfo.rightArmRot; + } + + if (vec3.length() < (double) 1.0E-4F) { + vec3 = playermodelcontroller$rotinfo.headRot; + } + } + + vec3 = vec3.scale(0.1F); + Vec3 vec31 = playermodelcontroller$rotinfo != null && player == this.mc.player ? playermodelcontroller$rotinfo.Headpos : player.getEyePosition(1.0F); + Particle particle = this.mc.particleEngine.createParticle(ParticleTypes.FIREWORK, vec31.x + (player.isShiftKeyDown() ? -vec3.x * 3.0D : 0.0D) + ((double) this.rand.nextFloat() - 0.5D) * (double) 0.02F, vec31.y - (double) (player.isShiftKeyDown() ? 1.0F : 0.8F) + ((double) this.rand.nextFloat() - 0.5D) * (double) 0.02F, vec31.z + (player.isShiftKeyDown() ? -vec3.z * 3.0D : 0.0D) + ((double) this.rand.nextFloat() - 0.5D) * (double) 0.02F, -vec3.x + ((double) this.rand.nextFloat() - 0.5D) * (double) 0.01F, ((double) this.rand.nextFloat() - (double) 0.05F) * (double) 0.05F, -vec3.z + ((double) this.rand.nextFloat() - 0.5D) * (double) 0.01F); + + if (particle != null) { + particle.setColor(0.5F + this.rand.nextFloat() / 2.0F, 0.5F + this.rand.nextFloat() / 2.0F, 0.5F + this.rand.nextFloat() / 2.0F); + } + } + } + } + } + } + + public void setHMD(UUID uuid, int level) { + this.donors.put(uuid, level); + } + + public boolean HMDCHecked(UUID uuid) { + return this.donors.containsKey(uuid); + } + + public RotInfo getRotationsForPlayer(UUID uuid) { + if (this.debug) { + uuid = this.mc.player.getUUID(); + } + + RotInfo playermodelcontroller$rotinfo = this.vivePlayers.get(uuid); + + if (playermodelcontroller$rotinfo != null && this.vivePlayersLast.containsKey(uuid)) { + RotInfo playermodelcontroller$rotinfo1 = this.vivePlayersLast.get(uuid); + RotInfo playermodelcontroller$rotinfo2 = new RotInfo(); + float f = Minecraft.getInstance().getFrameTime(); + playermodelcontroller$rotinfo2.reverse = playermodelcontroller$rotinfo.reverse; + playermodelcontroller$rotinfo2.seated = playermodelcontroller$rotinfo.seated; + playermodelcontroller$rotinfo2.hmd = playermodelcontroller$rotinfo.hmd; + playermodelcontroller$rotinfo2.leftArmPos = Utils.vecLerp(playermodelcontroller$rotinfo1.leftArmPos, playermodelcontroller$rotinfo.leftArmPos, f); + playermodelcontroller$rotinfo2.rightArmPos = Utils.vecLerp(playermodelcontroller$rotinfo1.rightArmPos, playermodelcontroller$rotinfo.rightArmPos, f); + playermodelcontroller$rotinfo2.Headpos = Utils.vecLerp(playermodelcontroller$rotinfo1.Headpos, playermodelcontroller$rotinfo.Headpos, f); + playermodelcontroller$rotinfo2.leftArmQuat = playermodelcontroller$rotinfo.leftArmQuat; + playermodelcontroller$rotinfo2.rightArmQuat = playermodelcontroller$rotinfo.rightArmQuat; + playermodelcontroller$rotinfo2.headQuat = playermodelcontroller$rotinfo.headQuat; + Vector3 vector3 = new Vector3(0.0F, 0.0F, -1.0F); + playermodelcontroller$rotinfo2.leftArmRot = Utils.vecLerp(playermodelcontroller$rotinfo1.leftArmRot, Utils.convertToVector3d(playermodelcontroller$rotinfo2.leftArmQuat.multiply(vector3)), f); + playermodelcontroller$rotinfo2.rightArmRot = Utils.vecLerp(playermodelcontroller$rotinfo1.rightArmRot, Utils.convertToVector3d(playermodelcontroller$rotinfo2.rightArmQuat.multiply(vector3)), f); + playermodelcontroller$rotinfo2.headRot = Utils.vecLerp(playermodelcontroller$rotinfo1.headRot, Utils.convertToVector3d(playermodelcontroller$rotinfo2.headQuat.multiply(vector3)), f); + playermodelcontroller$rotinfo2.heightScale = playermodelcontroller$rotinfo.heightScale; + playermodelcontroller$rotinfo2.worldScale = playermodelcontroller$rotinfo.worldScale; + return playermodelcontroller$rotinfo2; + } else { + return playermodelcontroller$rotinfo; + } + } + + public static RotInfo getMainPlayerRotInfo(VRData data) { + RotInfo playermodelcontroller$rotinfo = new RotInfo(); + Quaternion quaternion = new Quaternion(data.getController(1).getMatrix()); + Quaternion quaternion1 = new Quaternion(data.getController(0).getMatrix()); + Quaternion quaternion2 = new Quaternion(data.hmd.getMatrix()); + playermodelcontroller$rotinfo.headQuat = quaternion2; + playermodelcontroller$rotinfo.leftArmQuat = quaternion; + playermodelcontroller$rotinfo.rightArmQuat = quaternion1; + playermodelcontroller$rotinfo.seated = ClientDataHolderVR.getInstance().vrSettings.seated; + playermodelcontroller$rotinfo.leftArmPos = data.getController(1).getPosition(); + playermodelcontroller$rotinfo.rightArmPos = data.getController(0).getPosition(); + playermodelcontroller$rotinfo.Headpos = data.hmd.getPosition(); + return playermodelcontroller$rotinfo; + } + + public boolean isTracked(UUID uuid) { + this.debug = false; + return this.debug ? true : this.vivePlayers.containsKey(uuid); + } + + public static float getFacingYaw(RotInfo rotInfo) { + Vec3 vec3 = getOrientVec(rotInfo.headQuat); + return (float) Math.toDegrees(Math.atan2(vec3.x, vec3.z)); + } + + public static Vec3 getOrientVec(Quaternion quat) { + Vec3 vec3 = quat.multiply(new Vec3(0.0D, 0.0D, -1.0D)).cross(quat.multiply(new Vec3(0.0D, 1.0D, 0.0D))).normalize(); + return (new Vec3(0.0D, 1.0D, 0.0D)).cross(vec3).normalize(); + } + + public static class RotInfo { + public boolean seated; + public boolean reverse; + public int hmd = 0; + public Quaternion leftArmQuat; + public Quaternion rightArmQuat; + public Quaternion headQuat; + public Vec3 leftArmRot; + public Vec3 rightArmRot; + public Vec3 headRot; + public Vec3 leftArmPos; + public Vec3 rightArmPos; + public Vec3 Headpos; + public float worldScale; + public float heightScale; + + public double getBodyYawRadians() { + Vec3 vec3 = this.leftArmPos.subtract(this.rightArmPos).yRot((-(float) Math.PI / 2F)); + + if (this.reverse) { + vec3 = vec3.scale(-1.0D); + } + + if (this.seated) { + vec3 = this.rightArmRot; + } + + Vec3 vec31 = Utils.vecLerp(vec3, this.headRot, 0.5D); + return Math.atan2(-vec31.x, vec31.z); + } + } +} diff --git a/common/src/main/java/org/vivecraft/client/VivecraftVRMod.java b/common/src/main/java/org/vivecraft/client/VivecraftVRMod.java new file mode 100644 index 000000000..9506ac88d --- /dev/null +++ b/common/src/main/java/org/vivecraft/client/VivecraftVRMod.java @@ -0,0 +1,160 @@ +package org.vivecraft.client; + +import net.minecraft.client.KeyMapping; +import net.minecraft.client.Minecraft; +import org.apache.commons.lang3.ArrayUtils; +import org.vivecraft.client_vr.gameplay.screenhandlers.GuiHandler; +import org.vivecraft.client_vr.provider.HandedKeyBinding; + +import java.util.*; + +public class VivecraftVRMod { + + private static final Minecraft mc = Minecraft.getInstance(); + + public static VivecraftVRMod INSTANCE = new VivecraftVRMod(); + + Set allKeyBindingSet; + + // key binds that are settable by the user + Set userKeyBindingSet; + + // key binds that are needed internally, but are not required to be set by the user + Set hiddenKeyBindingSet; + + protected Set vanillaBindingSet; + + public final HandedKeyBinding keyClimbeyGrab = new HandedKeyBinding("vivecraft.key.climbeyGrab", -1, "vivecraft.key.category.climbey"); + public final HandedKeyBinding keyClimbeyJump = new HandedKeyBinding("vivecraft.key.climbeyJump", -1, "vivecraft.key.category.climbey"); + public final KeyMapping keyExportWorld = new KeyMapping("vivecraft.key.exportWorld", -1, "key.categories.misc"); + public final KeyMapping keyFreeMoveRotate = new KeyMapping("vivecraft.key.freeMoveRotate", -1, "key.categories.movement"); + public final KeyMapping keyFreeMoveStrafe = new KeyMapping("vivecraft.key.freeMoveStrafe", -1, "key.categories.movement"); + public final KeyMapping keyHotbarNext = new KeyMapping("vivecraft.key.hotbarNext", -1, "key.categories.inventory"); + public final KeyMapping keyHotbarPrev = new KeyMapping("vivecraft.key.hotbarPrev", -1, "key.categories.inventory"); + public final KeyMapping keyHotbarScroll = new KeyMapping("vivecraft.key.hotbarScroll", -1, "key.categories.inventory"); + public final KeyMapping keyHotbarSwipeX = new KeyMapping("vivecraft.key.hotbarSwipeX", -1, "key.categories.inventory"); + public final KeyMapping keyHotbarSwipeY = new KeyMapping("vivecraft.key.hotbarSwipeY", -1, "key.categories.inventory"); + public final KeyMapping keyMenuButton = new KeyMapping("vivecraft.key.ingameMenuButton", -1, "key.categories.ui"); + public final KeyMapping keyMoveThirdPersonCam = new KeyMapping("vivecraft.key.moveThirdPersonCam", -1, "key.categories.misc"); + public final KeyMapping keyQuickHandheldCam = new KeyMapping("vivecraft.key.quickHandheldCam", -1, "key.categories.misc"); + public final KeyMapping keyQuickTorch = new KeyMapping("vivecraft.key.quickTorch", -1, "key.categories.gameplay"); + public final KeyMapping keyRadialMenu = new KeyMapping("vivecraft.key.radialMenu", -1, "key.categories.ui"); + public final KeyMapping keyRotateAxis = new KeyMapping("vivecraft.key.rotateAxis", -1, "key.categories.movement"); + public final KeyMapping keyRotateFree = new KeyMapping("vivecraft.key.rotateFree", -1, "key.categories.movement"); + public final KeyMapping keyRotateLeft = new KeyMapping("vivecraft.key.rotateLeft", -1, "key.categories.movement"); + public final KeyMapping keyRotateRight = new KeyMapping("vivecraft.key.rotateRight", -1, "key.categories.movement"); + public final KeyMapping keySwapMirrorView = new KeyMapping("vivecraft.key.swapMirrorView", -1, "key.categories.misc"); + public final KeyMapping keyTeleport = new KeyMapping("vivecraft.key.teleport", -1, "key.categories.movement"); + public final KeyMapping keyTeleportFallback = new KeyMapping("vivecraft.key.teleportFallback", -1, "key.categories.movement"); + public final KeyMapping keyToggleHandheldCam = new KeyMapping("vivecraft.key.toggleHandheldCam", -1, "key.categories.misc"); + public final KeyMapping keyToggleKeyboard = new KeyMapping("vivecraft.key.toggleKeyboard", -1, "key.categories.ui"); + public final KeyMapping keyToggleMovement = new KeyMapping("vivecraft.key.toggleMovement", -1, "key.categories.movement"); + public final KeyMapping keyTogglePlayerList = new KeyMapping("vivecraft.key.togglePlayerList", -1, "key.categories.multiplayer"); + public final HandedKeyBinding keyTrackpadTouch = new HandedKeyBinding("vivecraft.key.trackpadTouch", -1, "key.categories.misc"); + public final HandedKeyBinding keyVRInteract = new HandedKeyBinding("vivecraft.key.vrInteract", -1, "key.categories.gameplay"); + public final KeyMapping keyWalkabout = new KeyMapping("vivecraft.key.walkabout", -1, "key.categories.movement"); + + private void setupKeybindingSets() { + if (this.userKeyBindingSet == null || hiddenKeyBindingSet == null) + { + this.userKeyBindingSet = new LinkedHashSet<>(); + this.hiddenKeyBindingSet = new LinkedHashSet<>(); + this.allKeyBindingSet = new LinkedHashSet<>(); + + this.userKeyBindingSet.add(this.keyRotateLeft); + this.userKeyBindingSet.add(this.keyRotateRight); + this.userKeyBindingSet.add(this.keyTeleport); + this.userKeyBindingSet.add(this.keyTeleportFallback); + this.userKeyBindingSet.add(this.keyToggleMovement); + this.userKeyBindingSet.add(this.keyQuickTorch); + this.userKeyBindingSet.add(this.keySwapMirrorView); + this.userKeyBindingSet.add(this.keyExportWorld); + this.userKeyBindingSet.add(this.keyMoveThirdPersonCam); + this.userKeyBindingSet.add(this.keyTogglePlayerList); + this.userKeyBindingSet.add(this.keyToggleHandheldCam); + this.userKeyBindingSet.add(this.keyQuickHandheldCam); + + this.hiddenKeyBindingSet.add(GuiHandler.keyLeftClick); + this.hiddenKeyBindingSet.add(GuiHandler.keyRightClick); + this.hiddenKeyBindingSet.add(GuiHandler.keyMiddleClick); + this.hiddenKeyBindingSet.add(GuiHandler.keyShift); + this.hiddenKeyBindingSet.add(GuiHandler.keyCtrl); + this.hiddenKeyBindingSet.add(GuiHandler.keyAlt); + this.hiddenKeyBindingSet.add(GuiHandler.keyScrollUp); + this.hiddenKeyBindingSet.add(GuiHandler.keyScrollDown); + this.hiddenKeyBindingSet.add(GuiHandler.keyScrollAxis); + this.hiddenKeyBindingSet.add(GuiHandler.keyKeyboardClick); + this.hiddenKeyBindingSet.add(GuiHandler.keyKeyboardShift); + this.hiddenKeyBindingSet.add(this.keyClimbeyGrab); + this.hiddenKeyBindingSet.add(this.keyClimbeyJump); + this.hiddenKeyBindingSet.add(this.keyMenuButton); + this.hiddenKeyBindingSet.add(this.keyRadialMenu); + this.hiddenKeyBindingSet.add(this.keyToggleKeyboard); + this.hiddenKeyBindingSet.add(this.keyHotbarSwipeX); + this.hiddenKeyBindingSet.add(this.keyHotbarSwipeY); + this.hiddenKeyBindingSet.add(this.keyTrackpadTouch); + + this.hiddenKeyBindingSet.add(this.keyRotateAxis); + this.hiddenKeyBindingSet.add(this.keyRotateFree); + this.hiddenKeyBindingSet.add(this.keyFreeMoveRotate); + this.hiddenKeyBindingSet.add(this.keyFreeMoveStrafe); + this.hiddenKeyBindingSet.add(this.keyHotbarNext); + this.hiddenKeyBindingSet.add(this.keyHotbarPrev); + this.hiddenKeyBindingSet.add(this.keyHotbarScroll); + this.hiddenKeyBindingSet.add(this.keyVRInteract); + this.hiddenKeyBindingSet.add(this.keyWalkabout); + + allKeyBindingSet.addAll(userKeyBindingSet); + allKeyBindingSet.addAll(hiddenKeyBindingSet); + } + } + + public Set getUserKeyBindings() + { + setupKeybindingSets(); + return this.userKeyBindingSet; + } + + public Set getHiddenKeyBindings() { + setupKeybindingSets(); + return hiddenKeyBindingSet; + } + + public Set getAllKeyBindings() { + setupKeybindingSets(); + return allKeyBindingSet; + } + + public KeyMapping[] initializeBindings(KeyMapping[] keyBindings) + { + for (KeyMapping keymapping : this.getUserKeyBindings()) + { + keyBindings = ArrayUtils.add(keyBindings, keymapping); + } + + this.setVanillaBindings(keyBindings); + Map map = KeyMapping.CATEGORY_SORT_ORDER; + map.put("vivecraft.key.category.gui", 8); + map.put("vivecraft.key.category.climbey", 9); + map.put("vivecraft.key.category.keyboard", 10); + return keyBindings; + } + + public void setVanillaBindings(KeyMapping[] bindings) + { + this.vanillaBindingSet = new HashSet<>(Arrays.asList(bindings)); + // add hidden keys, since those are not in there + vanillaBindingSet.addAll(hiddenKeyBindingSet); + } + + public boolean isSafeBinding(KeyMapping kb) + { + return this.getAllKeyBindings().contains(kb) || kb == mc.options.keyChat || kb == mc.options.keyInventory; + } + + public boolean isModBinding(KeyMapping kb) + { + return !this.vanillaBindingSet.contains(kb); + } + +} diff --git a/common/src/main/java/org/vivecraft/Xevents.java b/common/src/main/java/org/vivecraft/client/Xevents.java similarity index 79% rename from common/src/main/java/org/vivecraft/Xevents.java rename to common/src/main/java/org/vivecraft/client/Xevents.java index e0f5682b7..c1fd3640d 100644 --- a/common/src/main/java/org/vivecraft/Xevents.java +++ b/common/src/main/java/org/vivecraft/client/Xevents.java @@ -1,8 +1,7 @@ -package org.vivecraft; +package org.vivecraft.client; import com.mojang.blaze3d.vertex.PoseStack; import dev.architectury.injectables.annotations.ExpectPlatform; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.state.BlockState; @@ -34,10 +33,4 @@ public static void onRenderTickEnd(float f) { } - @ExpectPlatform - public static void drawScreen(Screen screen, PoseStack poseStack, int mouseX, int mouseY, float partialTick) { - - } - - } diff --git a/common/src/main/java/org/vivecraft/Xplat.java b/common/src/main/java/org/vivecraft/client/Xplat.java similarity index 61% rename from common/src/main/java/org/vivecraft/Xplat.java rename to common/src/main/java/org/vivecraft/client/Xplat.java index e408b9150..7d56b8189 100644 --- a/common/src/main/java/org/vivecraft/Xplat.java +++ b/common/src/main/java/org/vivecraft/client/Xplat.java @@ -1,9 +1,13 @@ -package org.vivecraft; +package org.vivecraft.client; import com.mojang.blaze3d.pipeline.RenderTarget; import dev.architectury.injectables.annotations.ExpectPlatform; -import net.minecraft.server.MinecraftServer; -import net.minecraft.world.level.storage.LevelResource; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeSpecialEffects; +import net.minecraft.world.level.material.FluidState; import java.nio.file.Path; @@ -55,4 +59,29 @@ static boolean isModLoadedSuccess() { static boolean enableRenderTargetStencil(RenderTarget renderTarget) { return false; } + + @ExpectPlatform + static Path getJarPath() { + return null; + } + + @ExpectPlatform + static String getUseMethodName() { + return ""; + } + + @ExpectPlatform + static TextureAtlasSprite[] getFluidTextures(BlockAndTintGetter level, BlockPos pos, FluidState fluidStateIn){ + return new TextureAtlasSprite[]{}; + } + + @ExpectPlatform + static Biome.ClimateSettings getBiomeClimateSettings(Biome biome){ + return null; + } + + @ExpectPlatform + static BiomeSpecialEffects getBiomeEffects(Biome biome){ + return null; + } } diff --git a/common/src/main/java/org/vivecraft/client/extensions/EntityRenderDispatcherExtension.java b/common/src/main/java/org/vivecraft/client/extensions/EntityRenderDispatcherExtension.java new file mode 100644 index 000000000..1e28d1cfc --- /dev/null +++ b/common/src/main/java/org/vivecraft/client/extensions/EntityRenderDispatcherExtension.java @@ -0,0 +1,12 @@ +package org.vivecraft.client.extensions; + +import org.vivecraft.client.render.VRPlayerRenderer; + +import java.util.Map; + +public interface EntityRenderDispatcherExtension { + + Map getSkinMapVR(); + + Map getSkinMapVRSeated(); +} diff --git a/common/src/main/java/org/vivecraft/client/extensions/RenderLayerExtension.java b/common/src/main/java/org/vivecraft/client/extensions/RenderLayerExtension.java new file mode 100644 index 000000000..efacdb4c4 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client/extensions/RenderLayerExtension.java @@ -0,0 +1,9 @@ +package org.vivecraft.client.extensions; + +/** + * part of the hacky way, to copy RenderLayers from the regular PlayerRenderer, to the VRPlayerRenderer + */ + +public interface RenderLayerExtension { + Object clone() throws CloneNotSupportedException; +} diff --git a/common/src/main/java/org/vivecraft/extensions/RenderTargetExtension.java b/common/src/main/java/org/vivecraft/client/extensions/RenderTargetExtension.java similarity index 90% rename from common/src/main/java/org/vivecraft/extensions/RenderTargetExtension.java rename to common/src/main/java/org/vivecraft/client/extensions/RenderTargetExtension.java index 5f63e293f..0aa61315d 100644 --- a/common/src/main/java/org/vivecraft/extensions/RenderTargetExtension.java +++ b/common/src/main/java/org/vivecraft/client/extensions/RenderTargetExtension.java @@ -1,4 +1,4 @@ -package org.vivecraft.extensions; +package org.vivecraft.client.extensions; import net.minecraft.client.renderer.ShaderInstance; import org.lwjgl.opengl.GL30; @@ -16,14 +16,10 @@ default void blitToScreen(int i, int viewWidth, int viewHeight, int j, boolean b void blitToScreen(ShaderInstance instance, int i, int viewWidth, int viewHeight, int j, boolean b, float f, float g, boolean c); - int getDepthBufferId(); - default void genMipMaps() { GL30.glGenerateMipmap(3553); } - void setName(String name); - void setTextid(int texid); void setUseStencil(boolean useStencil); diff --git a/common/src/main/java/org/vivecraft/client/gui/VivecraftClickEvent.java b/common/src/main/java/org/vivecraft/client/gui/VivecraftClickEvent.java new file mode 100644 index 000000000..5551f2265 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client/gui/VivecraftClickEvent.java @@ -0,0 +1,41 @@ +package org.vivecraft.client.gui; + +import net.minecraft.network.chat.ClickEvent; + +public class VivecraftClickEvent extends ClickEvent { + + private final VivecraftAction vivecraftAction; + private final Object value; + + public VivecraftClickEvent(VivecraftAction action, Object value) { + // dummy action, in case our check fails + super(Action.RUN_COMMAND, ""); + vivecraftAction = action; + this.value = value; + } + + + public VivecraftAction getVivecraftAction() { + return this.vivecraftAction; + } + + public Object getVivecraftValue() { + return value; + } + + public enum VivecraftAction { + OPEN_SCREEN("open_screen"); + + private final String name; + + VivecraftAction(String string2) { + this.name = string2; + } + + public String getName() { + return this.name; + } + } + + +} diff --git a/common/src/main/java/org/vivecraft/client/gui/framework/GuiVROption.java b/common/src/main/java/org/vivecraft/client/gui/framework/GuiVROption.java new file mode 100644 index 000000000..cfa11f1ff --- /dev/null +++ b/common/src/main/java/org/vivecraft/client/gui/framework/GuiVROption.java @@ -0,0 +1,39 @@ +package org.vivecraft.client.gui.framework; + +import net.minecraft.client.gui.components.AbstractWidget; +import org.vivecraft.client_vr.settings.VRSettings; + +public interface GuiVROption { + int getId(); + + VRSettings.VrOptions getOption(); + + + // implement those with a cast to Abstract widget, since pre 1.19.4 those methods are there + default int getY() { + if (this instanceof AbstractWidget widget) { + return widget.y; + } + return 0; + } + default int getX() { + if (this instanceof AbstractWidget widget) { + return widget.x; + } + return 0; + } + + default int getWidth() { + if (this instanceof AbstractWidget widget) { + return widget.getWidth(); + } + return 0; + } + + default int getHeight() { + if (this instanceof AbstractWidget widget) { + return widget.getHeight(); + } + return 0; + } +} diff --git a/common/src/main/java/org/vivecraft/gui/framework/GuiVROptionButton.java b/common/src/main/java/org/vivecraft/client/gui/framework/GuiVROptionButton.java similarity index 71% rename from common/src/main/java/org/vivecraft/gui/framework/GuiVROptionButton.java rename to common/src/main/java/org/vivecraft/client/gui/framework/GuiVROptionButton.java index eddb967c1..2b9c5f0a8 100644 --- a/common/src/main/java/org/vivecraft/gui/framework/GuiVROptionButton.java +++ b/common/src/main/java/org/vivecraft/client/gui/framework/GuiVROptionButton.java @@ -1,19 +1,18 @@ -package org.vivecraft.gui.framework; +package org.vivecraft.client.gui.framework; import javax.annotation.Nullable; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.settings.VRSettings; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.settings.VRSettings; -import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.Button; import net.minecraft.network.chat.TranslatableComponent; -public class GuiVROptionButton extends Button +public class GuiVROptionButton extends Button implements GuiVROption { @Nullable - protected final VRSettings.VrOptions enumOptions; - public int id = -1; + private final VRSettings.VrOptions enumOptions; + private int id = -1; public GuiVROptionButton(int id, int x, int y, String text, OnPress action) { @@ -30,8 +29,7 @@ public GuiVROptionButton(int id, int x, int y, int width, int height, @Nullable super(x, y, width, height, new TranslatableComponent(text), action); this.id = id; this.enumOptions = option; - Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); if (option != null && dataholder.vrSettings.overrides.hasSetting(option) && dataholder.vrSettings.overrides.getSetting(option).isValueOverridden()) { @@ -39,6 +37,12 @@ public GuiVROptionButton(int id, int x, int y, int width, int height, @Nullable } } + @Override + public int getId() { + return id; + } + + @Override @Nullable public VRSettings.VrOptions getOption() { diff --git a/common/src/main/java/org/vivecraft/client/gui/framework/GuiVROptionSlider.java b/common/src/main/java/org/vivecraft/client/gui/framework/GuiVROptionSlider.java new file mode 100644 index 000000000..dab19724b --- /dev/null +++ b/common/src/main/java/org/vivecraft/client/gui/framework/GuiVROptionSlider.java @@ -0,0 +1,55 @@ +package org.vivecraft.client.gui.framework; + +import net.minecraft.client.gui.components.AbstractSliderButton; +import net.minecraft.network.chat.TextComponent; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.settings.VRSettings; + +import javax.annotation.Nullable; + +public class GuiVROptionSlider extends AbstractSliderButton implements GuiVROption +{ + @Nullable + private final VRSettings.VrOptions enumOptions; + private int id = -1; + + public GuiVROptionSlider(int id, int x, int y, int width, int height, VRSettings.VrOptions option) + { + super(x, y, width, height, + new TextComponent(ClientDataHolderVR.getInstance().vrSettings.getButtonDisplayString(option)), + option.normalizeValue(ClientDataHolderVR.getInstance().vrSettings.getOptionFloatValue(option))); + + this.id = id; + this.enumOptions = option; + } + + public GuiVROptionSlider(int id, int x, int y, VRSettings.VrOptions option) + { + this(id, x, y, 150, 20, option); + } + + @Override + protected void updateMessage() { + this.setMessage(new TextComponent(ClientDataHolderVR.getInstance().vrSettings.getButtonDisplayString(this.enumOptions))); + } + + @Override + protected void applyValue() { + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); + double d0 = this.enumOptions.denormalizeValue((float)this.value); + dataholder.vrSettings.setOptionFloatValue(this.enumOptions, (float)d0); + // TODO check if that works right on 1.19.2 + this.value = this.enumOptions.normalizeValue((float)d0); + } + + @Override + public int getId() { + return id; + } + + @Override + @Nullable + public VRSettings.VrOptions getOption() { + return this.enumOptions; + } +} diff --git a/common/src/main/java/org/vivecraft/gui/framework/GuiVROptionsBase.java b/common/src/main/java/org/vivecraft/client/gui/framework/GuiVROptionsBase.java similarity index 89% rename from common/src/main/java/org/vivecraft/gui/framework/GuiVROptionsBase.java rename to common/src/main/java/org/vivecraft/client/gui/framework/GuiVROptionsBase.java index 14325ba52..9326a146a 100644 --- a/common/src/main/java/org/vivecraft/gui/framework/GuiVROptionsBase.java +++ b/common/src/main/java/org/vivecraft/client/gui/framework/GuiVROptionsBase.java @@ -1,10 +1,10 @@ -package org.vivecraft.gui.framework; +package org.vivecraft.client.gui.framework; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.ObjectSelectionList; -import net.minecraft.client.gui.components.Widget; +import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.resources.language.I18n; import net.minecraft.network.chat.FormattedText; @@ -12,16 +12,16 @@ import net.minecraft.network.chat.TextComponent; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.world.phys.Vec2; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.ScreenUtils; -import org.vivecraft.settings.VRSettings; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.ScreenUtils; +import org.vivecraft.client_vr.settings.VRSettings; import java.util.ArrayList; import java.util.List; public abstract class GuiVROptionsBase extends Screen { - protected ClientDataHolder dataholder = ClientDataHolder.getInstance(); + protected ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); public static final int DONE_BUTTON = 200; public static final int DEFAULTS_BUTTON = 201; protected final Screen lastScreen; @@ -39,7 +39,7 @@ public GuiVROptionsBase(Screen lastScreen) { super(new TextComponent("")); this.lastScreen = lastScreen; - this.settings = ClientDataHolder.getInstance().vrSettings; + this.settings = ClientDataHolderVR.getInstance().vrSettings; } protected void addDefaultButtons() @@ -78,7 +78,7 @@ protected void init(VROptionLayout[] settings, boolean clear) { if (vroptionlayout.getOption() != null && vroptionlayout.getOption().getEnumFloat()) { - this.addRenderableWidget(new GuiVROptionSlider(vroptionlayout.getOrdinal(), vroptionlayout.getX(this.width), vroptionlayout.getY(this.height), vroptionlayout.getOption(), (double)vroptionlayout.getOption().getValueMin(), (double)vroptionlayout.getOption().getValueMax()) + this.addRenderableWidget(new GuiVROptionSlider(vroptionlayout.getOrdinal(), vroptionlayout.getX(this.width), vroptionlayout.getY(this.height), vroptionlayout.getOption()) { public void onClick(double pMouseX, double p_93635_) { @@ -139,12 +139,12 @@ else if (vroptionlayout.getCustomHandler() != null) protected void loadDefaults() { - for (Widget widget : this.renderables) { - if (!(widget instanceof GuiVROptionButton)) + for (GuiEventListener child : this.children()) { + if (!(child instanceof GuiVROption)) continue; - GuiVROptionButton optionButton = (GuiVROptionButton)widget; - this.settings.loadDefault(optionButton.enumOptions); + GuiVROption optionButton = (GuiVROption)child; + this.settings.loadDefault(optionButton.getOption()); } } @@ -252,15 +252,10 @@ protected void actionPerformedRightClick(AbstractWidget button) public boolean mouseClicked(double pMouseX, double p_94738_, int pMouseY) { boolean flag = super.mouseClicked(pMouseX, p_94738_, pMouseY); - AbstractWidget abstractwidget = ScreenUtils.getSelectedButton(this, (int)pMouseX, (int)p_94738_); + AbstractWidget abstractwidget = ScreenUtils.getSelectedButton((int)pMouseX, (int)p_94738_, ScreenUtils.getButtonList(this)); if (abstractwidget != null) { - if (!(abstractwidget instanceof GuiVROptionSlider)) - { - abstractwidget.playDownSound(this.minecraft.getSoundManager()); - } - if (pMouseY == 0) { this.actionPerformed(abstractwidget); @@ -324,13 +319,13 @@ public boolean charTyped(char pCodePoint, int pModifiers) private void renderTooltip(PoseStack pMatrixStack, int pMouseX, int pMouseY) { AbstractWidget hover = null; // find active button - for (Widget widget: renderables) { - if (widget instanceof AbstractWidget && ((AbstractWidget) widget).isMouseOver(pMouseX, pMouseY)) { - hover = (AbstractWidget) widget; + for (GuiEventListener child: children()) { + if (child instanceof AbstractWidget && child.isMouseOver(pMouseX, pMouseY)) { + hover = (AbstractWidget) child; } } if (hover != null ) { - if (hover instanceof GuiVROptionButton guiHover) { + if (hover instanceof GuiVROption guiHover) { if (guiHover.getOption() != null) { String tooltipString = "vivecraft.options." + guiHover.getOption().name() + ".tooltip"; // check if it has a tooltip @@ -344,10 +339,10 @@ private void renderTooltip(PoseStack pMatrixStack, int pMouseX, int pMouseY) { tooltip += " ".repeat((308 - (formattedText.size() == 0 ? 0 : font.width(formattedText.get(formattedText.size() - 1)))) / font.width(" ")); // if tooltip is not too low, draw below button, else above - if (guiHover.y + guiHover.getHeight() + formattedText.size() * (font.lineHeight + 1) + 14 < this.height) { - renderTooltip(pMatrixStack, font.split(new TextComponent(tooltip), 308), this.width / 2 - 166, guiHover.y + guiHover.getHeight() + 14); + if (guiHover.getY() + guiHover.getHeight() + formattedText.size() * (font.lineHeight + 1) + 14 < this.height) { + renderTooltip(pMatrixStack, font.split(new TextComponent(tooltip), 308), this.width / 2 - 166, guiHover.getY() + guiHover.getHeight() + 14); } else { - renderTooltip(pMatrixStack, font.split(new TextComponent(tooltip), 308), this.width / 2 - 166, guiHover.y - formattedText.size() * (font.lineHeight + 1) + 9); + renderTooltip(pMatrixStack, font.split(new TextComponent(tooltip), 308), this.width / 2 - 166, guiHover.getY() - formattedText.size() * (font.lineHeight + 1) + 9); } } } diff --git a/common/src/main/java/org/vivecraft/gui/framework/TooltipProviderVROptions.java b/common/src/main/java/org/vivecraft/client/gui/framework/TooltipProviderVROptions.java similarity index 98% rename from common/src/main/java/org/vivecraft/gui/framework/TooltipProviderVROptions.java rename to common/src/main/java/org/vivecraft/client/gui/framework/TooltipProviderVROptions.java index b6e795bc8..42074a190 100644 --- a/common/src/main/java/org/vivecraft/gui/framework/TooltipProviderVROptions.java +++ b/common/src/main/java/org/vivecraft/client/gui/framework/TooltipProviderVROptions.java @@ -1,4 +1,4 @@ -package org.vivecraft.gui.framework;//package org.vivecraft.gui.framework; +package org.vivecraft.client.gui.framework;//package org.vivecraft.gui.framework; // //import java.awt.Rectangle; //import java.util.ArrayList; diff --git a/common/src/main/java/org/vivecraft/gui/framework/TwoHandedScreen.java b/common/src/main/java/org/vivecraft/client/gui/framework/TwoHandedScreen.java similarity index 91% rename from common/src/main/java/org/vivecraft/gui/framework/TwoHandedScreen.java rename to common/src/main/java/org/vivecraft/client/gui/framework/TwoHandedScreen.java index 4c43ead84..9ab657f8a 100644 --- a/common/src/main/java/org/vivecraft/gui/framework/TwoHandedScreen.java +++ b/common/src/main/java/org/vivecraft/client/gui/framework/TwoHandedScreen.java @@ -1,9 +1,9 @@ -package org.vivecraft.gui.framework; +package org.vivecraft.client.gui.framework; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.extensions.GuiExtension; -import org.vivecraft.provider.ControllerType; -import org.vivecraft.provider.MCVR; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.extensions.GuiExtension; +import org.vivecraft.client_vr.provider.ControllerType; +import org.vivecraft.client_vr.provider.MCVR; import com.mojang.blaze3d.vertex.PoseStack; @@ -14,7 +14,7 @@ public abstract class TwoHandedScreen extends Screen { - protected ClientDataHolder dataholder = ClientDataHolder.getInstance(); + protected ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); public float cursorX1; public float cursorY1; public float cursorX2; @@ -56,9 +56,9 @@ public void render(PoseStack pMatrixStack, int pMouseX, int pMouseY, float pPart AbstractWidget abstractwidget = null; AbstractWidget abstractwidget1 = null; - for (int i = 0; i < this.renderables.size(); ++i) + for (int i = 0; i < this.children().size(); ++i) { - AbstractWidget abstractwidget2 = (AbstractWidget) this.renderables.get(i); + AbstractWidget abstractwidget2 = (AbstractWidget) this.children().get(i); boolean flag = d0 >= (double)abstractwidget2.x && d1 >= (double)abstractwidget2.y && d0 < (double)(abstractwidget2.x + abstractwidget2.getWidth()) && d1 < (double)(abstractwidget2.y + 20); boolean flag1 = d2 >= (double)abstractwidget2.x && d3 >= (double)abstractwidget2.y && d2 < (double)(abstractwidget2.x + abstractwidget2.getWidth()) && d3 < (double)(abstractwidget2.y + 20); diff --git a/common/src/main/java/org/vivecraft/gui/framework/VROptionEntry.java b/common/src/main/java/org/vivecraft/client/gui/framework/VROptionEntry.java similarity index 72% rename from common/src/main/java/org/vivecraft/gui/framework/VROptionEntry.java rename to common/src/main/java/org/vivecraft/client/gui/framework/VROptionEntry.java index 243b204cc..32257b26f 100644 --- a/common/src/main/java/org/vivecraft/gui/framework/VROptionEntry.java +++ b/common/src/main/java/org/vivecraft/client/gui/framework/VROptionEntry.java @@ -1,17 +1,17 @@ -package org.vivecraft.gui.framework; +package org.vivecraft.client.gui.framework; import java.util.function.BiFunction; import net.minecraft.world.phys.Vec2; -import org.vivecraft.settings.VRSettings; +import org.vivecraft.client_vr.settings.VRSettings; public class VROptionEntry { public final VRSettings.VrOptions option; public final String title; - public final BiFunction customHandler; + public final BiFunction customHandler; public final boolean center; - public VROptionEntry(String label, BiFunction customHandler, boolean center) + public VROptionEntry(String label, BiFunction customHandler, boolean center) { this.option = null; this.title = label; @@ -19,7 +19,7 @@ public VROptionEntry(String label, BiFunction this.center = center; } - public VROptionEntry(String label, BiFunction customHandler) + public VROptionEntry(String label, BiFunction customHandler) { this.option = null; this.title = label; @@ -27,7 +27,7 @@ public VROptionEntry(String label, BiFunction this.center = false; } - public VROptionEntry(VRSettings.VrOptions option, BiFunction customHandler, boolean center) + public VROptionEntry(VRSettings.VrOptions option, BiFunction customHandler, boolean center) { this.option = option; this.title = null; @@ -35,7 +35,7 @@ public VROptionEntry(VRSettings.VrOptions option, BiFunction customHandler) + public VROptionEntry(VRSettings.VrOptions option, BiFunction customHandler) { this.option = option; this.title = null; diff --git a/common/src/main/java/org/vivecraft/gui/framework/VROptionLayout.java b/common/src/main/java/org/vivecraft/client/gui/framework/VROptionLayout.java similarity index 83% rename from common/src/main/java/org/vivecraft/gui/framework/VROptionLayout.java rename to common/src/main/java/org/vivecraft/client/gui/framework/VROptionLayout.java index 21550be35..b643c36d3 100644 --- a/common/src/main/java/org/vivecraft/gui/framework/VROptionLayout.java +++ b/common/src/main/java/org/vivecraft/client/gui/framework/VROptionLayout.java @@ -1,9 +1,9 @@ -package org.vivecraft.gui.framework; +package org.vivecraft.client.gui.framework; import java.util.function.BiFunction; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.settings.VRSettings; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.settings.VRSettings; import net.minecraft.client.gui.screens.Screen; import net.minecraft.world.phys.Vec2; @@ -28,9 +28,9 @@ public class VROptionLayout int _mini; int _incrementi; Class screen; - BiFunction customHandler; + BiFunction customHandler; - public VROptionLayout(VRSettings.VrOptions e, BiFunction handler, Position pos, float row, boolean enabled, String title) + public VROptionLayout(VRSettings.VrOptions e, BiFunction handler, Position pos, float row, boolean enabled, String title) { this._e = e; this._pos = pos; @@ -59,7 +59,7 @@ public VROptionLayout(VRSettings.VrOptions e, Position pos, float row, boolean e this._enabled = enabled; } - public VROptionLayout(Class screen, BiFunction handler, Position pos, float row, boolean enabled, String title) + public VROptionLayout(Class screen, BiFunction handler, Position pos, float row, boolean enabled, String title) { this._pos = pos; this._row = row; @@ -88,7 +88,7 @@ public VROptionLayout(Class screen, Position pos, float row, this.screen = screen; } - public VROptionLayout(BiFunction handler, Position pos, float row, boolean enabled, String title) + public VROptionLayout(BiFunction handler, Position pos, float row, boolean enabled, String title) { this._pos = pos; this._row = row; @@ -130,7 +130,7 @@ public int getY(int screenHeight) public String getButtonText() { - return this._title.isEmpty() && this._e != null ? ClientDataHolder.getInstance().vrSettings.getButtonDisplayString(this._e) : this._title; + return this._title.isEmpty() && this._e != null ? ClientDataHolderVR.getInstance().vrSettings.getButtonDisplayString(this._e) : this._title; } public VRSettings.VrOptions getOption() @@ -143,7 +143,7 @@ public Class getScreen() return this.screen; } - public BiFunction getCustomHandler() + public BiFunction getCustomHandler() { return this.customHandler; } diff --git a/common/src/main/java/org/vivecraft/gui/framework/VRTooltipManager.java b/common/src/main/java/org/vivecraft/client/gui/framework/VRTooltipManager.java similarity index 98% rename from common/src/main/java/org/vivecraft/gui/framework/VRTooltipManager.java rename to common/src/main/java/org/vivecraft/client/gui/framework/VRTooltipManager.java index 021cddb01..548ce3138 100644 --- a/common/src/main/java/org/vivecraft/gui/framework/VRTooltipManager.java +++ b/common/src/main/java/org/vivecraft/client/gui/framework/VRTooltipManager.java @@ -1,4 +1,4 @@ -package org.vivecraft.gui.framework;//Optifine +package org.vivecraft.client.gui.framework;//Optifine //package org.vivecraft.gui.framework; // //import com.mojang.blaze3d.vertex.PoseStack; diff --git a/common/src/main/java/org/vivecraft/client/gui/screens/ErrorScreen.java b/common/src/main/java/org/vivecraft/client/gui/screens/ErrorScreen.java new file mode 100644 index 000000000..b9d3cbb82 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client/gui/screens/ErrorScreen.java @@ -0,0 +1,48 @@ +package org.vivecraft.client.gui.screens; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; +import org.jetbrains.annotations.NotNull; +import org.vivecraft.client.gui.widgets.TextScrollWidget; + + +public class ErrorScreen extends Screen { + + private final Screen lastScreen; + private final Component error; + + public ErrorScreen(String title, Component error) { + super(new TextComponent(title)); + lastScreen = Minecraft.getInstance().screen; + this.error = error; + } + + protected void init() { + + this.addRenderableWidget(new TextScrollWidget(this.width / 2 - 155, 30, 310, this.height - 30 - 36, error)); + + this.addRenderableWidget(new Button( + this.width / 2 + 5, this.height - 32, + 150, 20, + new TranslatableComponent("gui.back"), + (p) -> Minecraft.getInstance().setScreen(this.lastScreen))); + this.addRenderableWidget(new Button( + this.width / 2 - 155, this.height - 32, + 150, 20, + new TranslatableComponent("chat.copy"), + (p) -> Minecraft.getInstance().keyboardHandler.setClipboard(error.getString()))); + } + + @Override + public void render(@NotNull PoseStack poseStack, int i, int j, float f) { + this.renderBackground(poseStack); + drawCenteredString(poseStack, this.font, this.title, this.width / 2, 15, 16777215); + + super.render(poseStack, i, j, f); + } +} diff --git a/common/src/main/java/org/vivecraft/client/gui/screens/UpdateScreen.java b/common/src/main/java/org/vivecraft/client/gui/screens/UpdateScreen.java new file mode 100644 index 000000000..0459748cd --- /dev/null +++ b/common/src/main/java/org/vivecraft/client/gui/screens/UpdateScreen.java @@ -0,0 +1,71 @@ +package org.vivecraft.client.gui.screens; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.Util; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; +import org.jetbrains.annotations.NotNull; +import org.vivecraft.client.gui.widgets.TextScrollWidget; +import org.vivecraft.client.utils.UpdateChecker; + +import java.net.URI; +import java.net.URISyntaxException; + + +public class UpdateScreen extends Screen { + + private final Screen lastScreen; + + public UpdateScreen() { + super(new TextComponent("New Update Available")); + lastScreen = Minecraft.getInstance().screen; + } + + protected void init() { + + this.addRenderableWidget(new TextScrollWidget(this.width / 2 - 155, 30, 310, this.height - 30 - 60, UpdateChecker.changelog)); + + this.addRenderableWidget(new Button( + this.width / 2 - 155, this.height - 56, + 150, 20, + new TextComponent("Download from Modrinth"), + (p) -> { + try { + Util.getPlatform().openUri(new URI("https://modrinth.com/mod/vivecraft")); + } catch (URISyntaxException ignored) { + } + })); + + this.addRenderableWidget(new Button( + this.width / 2 + 5, this.height - 56, + 150, 20, + new TextComponent("Download from Curseforge"), + (p) -> { + try { + Util.getPlatform().openUri(new URI("https://www.curseforge.com/minecraft/mc-mods/vivecraft")); + } catch (URISyntaxException ignored) { + } + })); + + this.addRenderableWidget(new Button( + this.width / 2 - 75, this.height - 32, + 150, 20, + new TranslatableComponent("gui.back"), + (p) -> Minecraft.getInstance().setScreen(this.lastScreen))); + } + + @Override + public void render(@NotNull PoseStack poseStack, int i, int j, float f) { + this.renderBackground(poseStack); + drawCenteredString(poseStack, this.font, this.title, this.width / 2, 15, 16777215); + super.render(poseStack, i, j, f); + } + + @Override + public void onClose() { + this.minecraft.setScreen(lastScreen); + } +} diff --git a/common/src/main/java/org/vivecraft/gui/settings/GuiFreeMoveSettings.java b/common/src/main/java/org/vivecraft/client/gui/settings/GuiFreeMoveSettings.java similarity index 80% rename from common/src/main/java/org/vivecraft/gui/settings/GuiFreeMoveSettings.java rename to common/src/main/java/org/vivecraft/client/gui/settings/GuiFreeMoveSettings.java index 3307dfa3c..86458d09c 100644 --- a/common/src/main/java/org/vivecraft/gui/settings/GuiFreeMoveSettings.java +++ b/common/src/main/java/org/vivecraft/client/gui/settings/GuiFreeMoveSettings.java @@ -1,15 +1,16 @@ -package org.vivecraft.gui.settings; +package org.vivecraft.client.gui.settings; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.screens.Screen; -import org.vivecraft.gui.framework.GuiVROptionButton; -import org.vivecraft.gui.framework.GuiVROptionsBase; -import org.vivecraft.settings.VRSettings; +import org.vivecraft.client.gui.framework.GuiVROption; +import org.vivecraft.client.gui.framework.GuiVROptionsBase; +import org.vivecraft.client_vr.settings.VRSettings; public class GuiFreeMoveSettings extends GuiVROptionsBase { private static VRSettings.VrOptions[] standingSettings = new VRSettings.VrOptions[] { VRSettings.VrOptions.FREEMOVE_MODE, + VRSettings.VrOptions.FREEMOVE_FLY_MODE, VRSettings.VrOptions.FOV_REDUCTION, VRSettings.VrOptions.INERTIA_FACTOR, VRSettings.VrOptions.MOVEMENT_MULTIPLIER, @@ -55,11 +56,9 @@ public void init() protected void actionPerformed(AbstractWidget widget) { - if (widget instanceof GuiVROptionButton) + if (widget instanceof GuiVROption guivroption) { - GuiVROptionButton guivroptionbutton = (GuiVROptionButton)widget; - - if (guivroptionbutton.id == VRSettings.VrOptions.FOV_REDUCTION.ordinal()) + if (guivroption.getId() == VRSettings.VrOptions.FOV_REDUCTION.ordinal()) { this.reinit = true; } diff --git a/common/src/main/java/org/vivecraft/gui/settings/GuiHUDSettings.java b/common/src/main/java/org/vivecraft/client/gui/settings/GuiHUDSettings.java similarity index 78% rename from common/src/main/java/org/vivecraft/gui/settings/GuiHUDSettings.java rename to common/src/main/java/org/vivecraft/client/gui/settings/GuiHUDSettings.java index 91baf447a..31fe0decb 100644 --- a/common/src/main/java/org/vivecraft/gui/settings/GuiHUDSettings.java +++ b/common/src/main/java/org/vivecraft/client/gui/settings/GuiHUDSettings.java @@ -1,14 +1,14 @@ -package org.vivecraft.gui.settings; +package org.vivecraft.client.gui.settings; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.screens.Screen; -import org.vivecraft.gameplay.screenhandlers.GuiHandler; -import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; -import org.vivecraft.gui.framework.GuiVROptionButton; -import org.vivecraft.gui.framework.GuiVROptionsBase; -import org.vivecraft.gui.framework.VROptionEntry; -import org.vivecraft.settings.VRSettings; +import org.vivecraft.client.gui.framework.VROptionEntry; +import org.vivecraft.client_vr.gameplay.screenhandlers.GuiHandler; +import org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler; +import org.vivecraft.client.gui.framework.GuiVROption; +import org.vivecraft.client.gui.framework.GuiVROptionsBase; +import org.vivecraft.client_vr.settings.VRSettings; public class GuiHUDSettings extends GuiVROptionsBase { @@ -56,13 +56,11 @@ protected void loadDefaults() } protected void actionPerformed(AbstractWidget widget) { - if (widget instanceof GuiVROptionButton) { - GuiVROptionButton button = (GuiVROptionButton)widget; - - if (button.id == VRSettings.VrOptions.PHYSICAL_KEYBOARD_THEME.ordinal()) { + if (widget instanceof GuiVROption button) { + if (button.getId() == VRSettings.VrOptions.PHYSICAL_KEYBOARD_THEME.ordinal()) { KeyboardHandler.physicalKeyboard.init(); } - if (button.id == VRSettings.VrOptions.MENU_ALWAYS_FOLLOW_FACE.ordinal()) { + if (button.getId() == VRSettings.VrOptions.MENU_ALWAYS_FOLLOW_FACE.ordinal()) { GuiHandler.onScreenChanged(Minecraft.getInstance().screen, Minecraft.getInstance().screen, false); } } diff --git a/common/src/main/java/org/vivecraft/gui/settings/GuiMainVRSettings.java b/common/src/main/java/org/vivecraft/client/gui/settings/GuiMainVRSettings.java similarity index 74% rename from common/src/main/java/org/vivecraft/gui/settings/GuiMainVRSettings.java rename to common/src/main/java/org/vivecraft/client/gui/settings/GuiMainVRSettings.java index 130cdfea2..4dad5599f 100644 --- a/common/src/main/java/org/vivecraft/gui/settings/GuiMainVRSettings.java +++ b/common/src/main/java/org/vivecraft/client/gui/settings/GuiMainVRSettings.java @@ -1,19 +1,34 @@ -package org.vivecraft.gui.settings; +package org.vivecraft.client.gui.settings; import net.minecraft.client.gui.screens.Screen; -import org.vivecraft.gui.framework.GuiVROptionsBase; -import org.vivecraft.gui.framework.VROptionLayout; -import org.vivecraft.provider.MCVR; -import org.vivecraft.settings.VRSettings; +import org.vivecraft.client.gui.framework.GuiVROptionsBase; +import org.vivecraft.client.gui.framework.VROptionLayout; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.provider.MCVR; +import org.vivecraft.client_vr.settings.VRSettings; public class GuiMainVRSettings extends GuiVROptionsBase { private VROptionLayout[] vrAlwaysOptions = new VROptionLayout[] { - new VROptionLayout(GuiHUDSettings.class, VROptionLayout.Position.POS_LEFT, 1.0F, true, "vivecraft.options.screen.gui.button"), - new VROptionLayout(GuiRenderOpticsSettings.class, VROptionLayout.Position.POS_LEFT, 0.0F, true, "vivecraft.options.screen.stereorendering.button"), - new VROptionLayout(GuiQuickCommandEditor.class, VROptionLayout.Position.POS_RIGHT, 0.0F, true, "vivecraft.options.screen.quickcommands.button"), - new VROptionLayout(GuiOtherHUDSettings.class, VROptionLayout.Position.POS_RIGHT, 1.0F, true, "vivecraft.options.screen.guiother.button"), + new VROptionLayout(GuiHUDSettings.class, VROptionLayout.Position.POS_LEFT, 2.0F, true, "vivecraft.options.screen.gui.button"), + new VROptionLayout(GuiRenderOpticsSettings.class, VROptionLayout.Position.POS_LEFT, 1.0F, true, "vivecraft.options.screen.stereorendering.button"), + new VROptionLayout(GuiQuickCommandEditor.class, VROptionLayout.Position.POS_RIGHT, 1.0F, true, "vivecraft.options.screen.quickcommands.button"), + new VROptionLayout(GuiOtherHUDSettings.class, VROptionLayout.Position.POS_RIGHT, 2.0F, true, "vivecraft.options.screen.guiother.button"), + new VROptionLayout(VRSettings.VrOptions.WORLD_SCALE, VROptionLayout.Position.POS_LEFT, 6.0F, true, (String)null), new VROptionLayout(VRSettings.VrOptions.WORLD_ROTATION, VROptionLayout.Position.POS_RIGHT, 6.0F, true, (String)null), + new VROptionLayout(VRSettings.VrOptions.PLAY_MODE_SEATED, (button, mousePos) -> { + this.reinit = true; + + if (!this.dataholder.vrSettings.seated) + { + this.isConfirm = true; + return true; + } + else { + return false; + } + }, VROptionLayout.Position.POS_LEFT, 0.0F, true, (String)null), + new VROptionLayout(VRSettings.VrOptions.VR_HOTSWITCH, VROptionLayout.Position.POS_RIGHT, 0.0F, true, (String)null), new VROptionLayout(VRSettings.VrOptions.LOW_HEALTH_INDICATOR, VROptionLayout.Position.POS_RIGHT, 7.0F, true, (String)null) }; private VROptionLayout[] vrStandingOptions = new VROptionLayout[] { @@ -87,8 +102,10 @@ protected void init() protected void loadDefaults() { super.loadDefaults(); - MCVR.get().seatedRot = 0.0F; - MCVR.get().clearOffset(); + if (VRState.vrInitialized) { + MCVR.get().seatedRot = 0.0F; + MCVR.get().clearOffset(); + } } protected void resetOrigin() diff --git a/common/src/main/java/org/vivecraft/client/gui/settings/GuiMenuWorldSettings.java b/common/src/main/java/org/vivecraft/client/gui/settings/GuiMenuWorldSettings.java new file mode 100644 index 000000000..0abb1a373 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client/gui/settings/GuiMenuWorldSettings.java @@ -0,0 +1,57 @@ +package org.vivecraft.client.gui.settings; + +import org.vivecraft.client.gui.framework.VROptionEntry; +import org.vivecraft.client.gui.framework.GuiVROptionsBase; +import org.vivecraft.client_vr.settings.VRSettings; + +import net.minecraft.client.gui.screens.Screen; + +public class GuiMenuWorldSettings extends GuiVROptionsBase +{ + private VROptionEntry[] miscSettings = new VROptionEntry[] { + new VROptionEntry(VRSettings.VrOptions.MENU_WORLD_SELECTION), + new VROptionEntry("vivecraft.gui.menuworld.refresh", (button, mousePos) -> { + if (this.dataholder.menuWorldRenderer != null && this.dataholder.menuWorldRenderer.getLevel() != null) + { + try + { + this.dataholder.menuWorldRenderer.destroy(); + this.dataholder.menuWorldRenderer.prepare(); + } + catch (Exception exception) + { + exception.printStackTrace(); + } + } + + return true; + }), + new VROptionEntry(VRSettings.VrOptions.DUMMY), new VROptionEntry("vivecraft.gui.menuworld.loadnew", (button, mousePos) -> { + if (this.dataholder.menuWorldRenderer != null) { + try { + if (this.dataholder.menuWorldRenderer.isReady()) { + this.dataholder.menuWorldRenderer.destroy(); + } + + this.dataholder.menuWorldRenderer.init(); + } catch (Exception exception) { + exception.printStackTrace(); + } + } + + return true; + }) + }; + + public GuiMenuWorldSettings(Screen guiScreen) + { + super(guiScreen); + } + + public void init() + { + this.vrTitle = "vivecraft.options.screen.menuworld"; + super.init(this.miscSettings, true); + super.addDefaultButtons(); + } +} diff --git a/common/src/main/java/org/vivecraft/gui/settings/GuiOtherHUDSettings.java b/common/src/main/java/org/vivecraft/client/gui/settings/GuiOtherHUDSettings.java similarity index 66% rename from common/src/main/java/org/vivecraft/gui/settings/GuiOtherHUDSettings.java rename to common/src/main/java/org/vivecraft/client/gui/settings/GuiOtherHUDSettings.java index 3b28bb499..a92919e77 100644 --- a/common/src/main/java/org/vivecraft/gui/settings/GuiOtherHUDSettings.java +++ b/common/src/main/java/org/vivecraft/client/gui/settings/GuiOtherHUDSettings.java @@ -1,10 +1,10 @@ -package org.vivecraft.gui.settings; +package org.vivecraft.client.gui.settings; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.screens.Screen; -import org.vivecraft.gui.framework.GuiVROptionButton; -import org.vivecraft.gui.framework.GuiVROptionsBase; -import org.vivecraft.settings.VRSettings; +import org.vivecraft.client.gui.framework.GuiVROptionsBase; +import org.vivecraft.client.gui.framework.GuiVROption; +import org.vivecraft.client_vr.settings.VRSettings; public class GuiOtherHUDSettings extends GuiVROptionsBase { @@ -21,6 +21,12 @@ public class GuiOtherHUDSettings extends GuiVROptionsBase VRSettings.VrOptions.CHAT_NOTIFICATION_SOUND }; + static VRSettings.VrOptions[] messages = new VRSettings.VrOptions[] { + VRSettings.VrOptions.SHOW_UPDATES, + VRSettings.VrOptions.SHOW_PLUGIN, + VRSettings.VrOptions.SHOW_PLUGIN_MISSING + }; + public GuiOtherHUDSettings(Screen guiScreen) { super(guiScreen); @@ -34,18 +40,19 @@ public void init() if (this.dataholder.vrSettings.chatNotifications == VRSettings.ChatNotifications.SOUND || this.dataholder.vrSettings.chatNotifications == VRSettings.ChatNotifications.BOTH) { super.init(chat, false); + } else { + super.init(new VRSettings.VrOptions[]{VRSettings.VrOptions.DUMMY}, false); } + super.init(messages, false); super.addDefaultButtons(); } protected void actionPerformed(AbstractWidget widget) { - if (widget instanceof GuiVROptionButton) + if (widget instanceof GuiVROption guivroption) { - GuiVROptionButton guivroptionbutton = (GuiVROptionButton)widget; - - if (guivroptionbutton.id == VRSettings.VrOptions.CHAT_NOTIFICATIONS.ordinal()) + if (guivroption.getId() == VRSettings.VrOptions.CHAT_NOTIFICATIONS.ordinal()) { this.reinit = true; } diff --git a/common/src/main/java/org/vivecraft/gui/settings/GuiQuickCommandEditor.java b/common/src/main/java/org/vivecraft/client/gui/settings/GuiQuickCommandEditor.java similarity index 90% rename from common/src/main/java/org/vivecraft/gui/settings/GuiQuickCommandEditor.java rename to common/src/main/java/org/vivecraft/client/gui/settings/GuiQuickCommandEditor.java index 934a720d5..03ebd68a8 100644 --- a/common/src/main/java/org/vivecraft/gui/settings/GuiQuickCommandEditor.java +++ b/common/src/main/java/org/vivecraft/client/gui/settings/GuiQuickCommandEditor.java @@ -1,7 +1,7 @@ -package org.vivecraft.gui.settings; +package org.vivecraft.client.gui.settings; import net.minecraft.client.gui.screens.Screen; -import org.vivecraft.gui.framework.GuiVROptionsBase; +import org.vivecraft.client.gui.framework.GuiVROptionsBase; public class GuiQuickCommandEditor extends GuiVROptionsBase { diff --git a/common/src/main/java/org/vivecraft/gui/settings/GuiQuickCommandsInGame.java b/common/src/main/java/org/vivecraft/client/gui/settings/GuiQuickCommandsInGame.java similarity index 91% rename from common/src/main/java/org/vivecraft/gui/settings/GuiQuickCommandsInGame.java rename to common/src/main/java/org/vivecraft/client/gui/settings/GuiQuickCommandsInGame.java index 8e3fe8c3f..0755c6762 100644 --- a/common/src/main/java/org/vivecraft/gui/settings/GuiQuickCommandsInGame.java +++ b/common/src/main/java/org/vivecraft/client/gui/settings/GuiQuickCommandsInGame.java @@ -1,6 +1,6 @@ -package org.vivecraft.gui.settings; +package org.vivecraft.client.gui.settings; -import org.vivecraft.ClientDataHolder; +import org.vivecraft.client_vr.ClientDataHolderVR; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.KeyMapping; @@ -11,7 +11,7 @@ public class GuiQuickCommandsInGame extends Screen { - protected ClientDataHolder dataholder = ClientDataHolder.getInstance(); + protected ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); private int field_146445_a; private int field_146444_f; private static final String __OBFID = "CL_00000703"; diff --git a/common/src/main/java/org/vivecraft/gui/settings/GuiQuickCommandsList.java b/common/src/main/java/org/vivecraft/client/gui/settings/GuiQuickCommandsList.java similarity index 77% rename from common/src/main/java/org/vivecraft/gui/settings/GuiQuickCommandsList.java rename to common/src/main/java/org/vivecraft/client/gui/settings/GuiQuickCommandsList.java index 9fc988cc0..3794de5e9 100644 --- a/common/src/main/java/org/vivecraft/gui/settings/GuiQuickCommandsList.java +++ b/common/src/main/java/org/vivecraft/client/gui/settings/GuiQuickCommandsList.java @@ -1,19 +1,17 @@ -package org.vivecraft.gui.settings; +package org.vivecraft.client.gui.settings; -import org.vivecraft.ClientDataHolder; +import net.minecraft.client.gui.components.*; +import net.minecraft.client.gui.components.events.GuiEventListener; +import org.vivecraft.client_vr.ClientDataHolderVR; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.components.Button; -import net.minecraft.client.gui.components.EditBox; -import net.minecraft.client.gui.components.ObjectSelectionList; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TextComponent; -import net.minecraft.network.chat.TranslatableComponent; public class GuiQuickCommandsList extends ObjectSelectionList { - protected ClientDataHolder dataholder = ClientDataHolder.getInstance(); + protected ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); private final GuiQuickCommandEditor parent; private final Minecraft mc; @@ -26,6 +24,8 @@ public GuiQuickCommandsList(GuiQuickCommandEditor parent, Minecraft mc) String s = null; int i = 0; + setRenderSelection(false); + for (String s1 : astring) { this.minecraft.font.width(s1); @@ -33,6 +33,15 @@ public GuiQuickCommandsList(GuiQuickCommandEditor parent, Minecraft mc) } } + @Override + public boolean mouseClicked(double d, double e, int i) { + GuiEventListener focused = this.getFocused(); + if (focused != null) { + focused.changeFocus(false); + } + return super.mouseClicked(d, e, i); + } + public class CommandEntry extends Entry { private final Button btnDelete; @@ -42,13 +51,19 @@ private CommandEntry(String command, GuiQuickCommandsList parent) { this.txt = new EditBox(GuiQuickCommandsList.this.minecraft.font, parent.width / 2 - 100, 60, 200, 20, new TextComponent("")); this.txt.setValue(command); - this.btnDelete = new Button(0, 0, 18, 18, new TranslatableComponent("X"), (p) -> + this.btnDelete = new Button(0, 0, 18, 18, new TextComponent("X"), (p) -> { this.txt.setValue(""); this.txt.changeFocus(true); }); } + @Override + public boolean changeFocus(boolean bl) { + txt.setFocus(bl); + return bl; + } + public boolean mouseClicked(double pMouseX, double p_94738_, int pMouseY) { if (this.btnDelete.mouseClicked(pMouseX, p_94738_, pMouseY)) @@ -63,13 +78,13 @@ public boolean mouseClicked(double pMouseX, double p_94738_, int pMouseY) public boolean mouseDragged(double pMouseX, double p_94741_, int pMouseY, double p_94743_, double pButton) { - if (this.btnDelete.mouseDragged(pMouseX, p_94741_, pMouseY, p_94743_, pButton)) + if (this.btnDelete.isMouseOver(pMouseX, p_94741_) && this.btnDelete.mouseDragged(pMouseX, p_94741_, pMouseY, p_94743_, pButton)) { return true; } else { - return this.txt.mouseDragged(pMouseX, p_94741_, pMouseY, p_94743_, pButton) ? true : super.mouseDragged(pMouseX, p_94741_, pMouseY, p_94743_, pButton); + return (this.txt.isMouseOver(pMouseX, p_94741_) && this.txt.mouseDragged(pMouseX, p_94741_, pMouseY, p_94743_, pButton)) || super.mouseDragged(pMouseX, p_94741_, pMouseY, p_94743_, pButton); } } diff --git a/common/src/main/java/org/vivecraft/gui/settings/GuiRadialConfiguration.java b/common/src/main/java/org/vivecraft/client/gui/settings/GuiRadialConfiguration.java similarity index 96% rename from common/src/main/java/org/vivecraft/gui/settings/GuiRadialConfiguration.java rename to common/src/main/java/org/vivecraft/client/gui/settings/GuiRadialConfiguration.java index ded5be20e..bc463168a 100644 --- a/common/src/main/java/org/vivecraft/gui/settings/GuiRadialConfiguration.java +++ b/common/src/main/java/org/vivecraft/client/gui/settings/GuiRadialConfiguration.java @@ -1,9 +1,9 @@ -package org.vivecraft.gui.settings; +package org.vivecraft.client.gui.settings; import org.apache.commons.lang3.ArrayUtils; -import org.vivecraft.gui.framework.GuiVROptionsBase; -import org.vivecraft.gui.framework.VROptionLayout; -import org.vivecraft.settings.VRSettings; +import org.vivecraft.client.gui.framework.GuiVROptionsBase; +import org.vivecraft.client.gui.framework.VROptionLayout; +import org.vivecraft.client_vr.settings.VRSettings; import com.mojang.blaze3d.vertex.PoseStack; diff --git a/common/src/main/java/org/vivecraft/gui/settings/GuiRadialItemsList.java b/common/src/main/java/org/vivecraft/client/gui/settings/GuiRadialItemsList.java similarity index 98% rename from common/src/main/java/org/vivecraft/gui/settings/GuiRadialItemsList.java rename to common/src/main/java/org/vivecraft/client/gui/settings/GuiRadialItemsList.java index 3892f4a44..78cdedeaf 100644 --- a/common/src/main/java/org/vivecraft/gui/settings/GuiRadialItemsList.java +++ b/common/src/main/java/org/vivecraft/client/gui/settings/GuiRadialItemsList.java @@ -1,4 +1,4 @@ -package org.vivecraft.gui.settings; +package org.vivecraft.client.gui.settings; import java.util.Arrays; diff --git a/common/src/main/java/org/vivecraft/gui/settings/GuiRenderOpticsSettings.java b/common/src/main/java/org/vivecraft/client/gui/settings/GuiRenderOpticsSettings.java similarity index 81% rename from common/src/main/java/org/vivecraft/gui/settings/GuiRenderOpticsSettings.java rename to common/src/main/java/org/vivecraft/client/gui/settings/GuiRenderOpticsSettings.java index 6456cf906..37cea50ad 100644 --- a/common/src/main/java/org/vivecraft/gui/settings/GuiRenderOpticsSettings.java +++ b/common/src/main/java/org/vivecraft/client/gui/settings/GuiRenderOpticsSettings.java @@ -1,12 +1,11 @@ -package org.vivecraft.gui.settings; +package org.vivecraft.client.gui.settings; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.IrisHelper; -import org.vivecraft.Xplat; -import org.vivecraft.gui.framework.GuiVROptionButton; -import org.vivecraft.gui.framework.GuiVROptionsBase; -import org.vivecraft.settings.VRHotkeys; -import org.vivecraft.settings.VRSettings; +import org.vivecraft.mod_compat_vr.ShadersHelper; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client.gui.framework.GuiVROption; +import org.vivecraft.client.gui.framework.GuiVROptionsBase; +import org.vivecraft.client_vr.settings.VRHotkeys; +import org.vivecraft.client_vr.settings.VRSettings; import com.mojang.blaze3d.vertex.PoseStack; @@ -120,16 +119,16 @@ else if (this.dataholder.vrSettings.displayMirrorMode == VRSettings.MirrorMode.T } super.addDefaultButtons(); - this.renderables.stream().filter((w) -> + this.children().stream().filter((w) -> { - return w instanceof GuiVROptionButton; + return w instanceof GuiVROption; }).forEach((w) -> { - GuiVROptionButton guivroptionbutton = (GuiVROptionButton)w; + GuiVROption guivroption = (GuiVROption)w; -// if (guivroptionbutton.getOption() == VRSettings.VrOptions.HANDHELD_CAMERA_RENDER_SCALE && Config.isShaders()) //Optifine +// if (guivroption.getOption() == VRSettings.VrOptions.HANDHELD_CAMERA_RENDER_SCALE && Config.isShaders()) //Optifine // { -// guivroptionbutton.active = false; +// guivroption.active = false; // } }); } @@ -143,22 +142,23 @@ protected void loadDefaults() { super.loadDefaults(); this.minecraft.options.fov = 70.0D; - this.dataholder.vrRenderer.reinitFrameBuffers("Defaults Loaded"); + if (VRState.vrInitialized) { + this.dataholder.vrRenderer.reinitFrameBuffers("Defaults Loaded"); + } } protected void actionPerformed(AbstractWidget widget) { - if (widget instanceof GuiVROptionButton) + if (widget instanceof GuiVROption guivroption) { - GuiVROptionButton guivroptionbutton = (GuiVROptionButton)widget; - if (guivroptionbutton.id == VRSettings.VrOptions.MIRROR_DISPLAY.ordinal() || guivroptionbutton.id == VRSettings.VrOptions.FSAA.ordinal() || guivroptionbutton.id == VRSettings.VrOptions.STENCIL_ON.ordinal()) + if (VRState.vrRunning && (guivroption.getId() == VRSettings.VrOptions.MIRROR_DISPLAY.ordinal() || guivroption.getId() == VRSettings.VrOptions.FSAA.ordinal() || guivroption.getId() == VRSettings.VrOptions.STENCIL_ON.ordinal())) { - if (guivroptionbutton.id != VRSettings.VrOptions.MIRROR_DISPLAY.ordinal() || !((Xplat.isModLoaded("iris") || Xplat.isModLoaded("oculus")) && IrisHelper.isShaderActive())) { + if (guivroption.getId() != VRSettings.VrOptions.MIRROR_DISPLAY.ordinal() || !ShadersHelper.isShaderActive()) { this.dataholder.vrRenderer.reinitFrameBuffers("Render Setting Changed"); } } - if (guivroptionbutton.id == VRSettings.VrOptions.RELOAD_EXTERNAL_CAMERA.ordinal()) + if (guivroption.getId() == VRSettings.VrOptions.RELOAD_EXTERNAL_CAMERA.ordinal()) { VRHotkeys.loadExternalCameraConfig(); } @@ -171,7 +171,9 @@ public boolean mouseReleased(double pMouseX, double p_94754_, int pMouseY) { this.prevRenderScaleFactor = this.settings.renderScaleFactor; this.prevHandCameraResScale = this.settings.handCameraResScale; - this.dataholder.vrRenderer.reinitFrameBuffers("Render Setting Changed"); + if (VRState.vrRunning) { + this.dataholder.vrRenderer.reinitFrameBuffers("Render Setting Changed"); + } } return super.mouseReleased(pMouseX, p_94754_, pMouseY); diff --git a/common/src/main/java/org/vivecraft/gui/settings/GuiRoomscaleSettings.java b/common/src/main/java/org/vivecraft/client/gui/settings/GuiRoomscaleSettings.java similarity index 85% rename from common/src/main/java/org/vivecraft/gui/settings/GuiRoomscaleSettings.java rename to common/src/main/java/org/vivecraft/client/gui/settings/GuiRoomscaleSettings.java index d44531492..ad7ce4246 100644 --- a/common/src/main/java/org/vivecraft/gui/settings/GuiRoomscaleSettings.java +++ b/common/src/main/java/org/vivecraft/client/gui/settings/GuiRoomscaleSettings.java @@ -1,8 +1,8 @@ -package org.vivecraft.gui.settings; +package org.vivecraft.client.gui.settings; import net.minecraft.client.gui.screens.Screen; -import org.vivecraft.gui.framework.GuiVROptionsBase; -import org.vivecraft.settings.VRSettings; +import org.vivecraft.client.gui.framework.GuiVROptionsBase; +import org.vivecraft.client_vr.settings.VRSettings; public class GuiRoomscaleSettings extends GuiVROptionsBase { diff --git a/common/src/main/java/org/vivecraft/gui/settings/GuiSeatedOptions.java b/common/src/main/java/org/vivecraft/client/gui/settings/GuiSeatedOptions.java similarity index 88% rename from common/src/main/java/org/vivecraft/gui/settings/GuiSeatedOptions.java rename to common/src/main/java/org/vivecraft/client/gui/settings/GuiSeatedOptions.java index fc608897d..d2544ac8a 100644 --- a/common/src/main/java/org/vivecraft/gui/settings/GuiSeatedOptions.java +++ b/common/src/main/java/org/vivecraft/client/gui/settings/GuiSeatedOptions.java @@ -1,9 +1,9 @@ -package org.vivecraft.gui.settings; +package org.vivecraft.client.gui.settings; import net.minecraft.client.gui.screens.Screen; -import org.vivecraft.gui.framework.GuiVROptionsBase; -import org.vivecraft.gui.framework.VROptionEntry; -import org.vivecraft.settings.VRSettings; +import org.vivecraft.client.gui.framework.VROptionEntry; +import org.vivecraft.client.gui.framework.GuiVROptionsBase; +import org.vivecraft.client_vr.settings.VRSettings; public class GuiSeatedOptions extends GuiVROptionsBase { diff --git a/common/src/main/java/org/vivecraft/gui/settings/GuiStandingSettings.java b/common/src/main/java/org/vivecraft/client/gui/settings/GuiStandingSettings.java similarity index 87% rename from common/src/main/java/org/vivecraft/gui/settings/GuiStandingSettings.java rename to common/src/main/java/org/vivecraft/client/gui/settings/GuiStandingSettings.java index 8e707077b..0cc466bb4 100644 --- a/common/src/main/java/org/vivecraft/gui/settings/GuiStandingSettings.java +++ b/common/src/main/java/org/vivecraft/client/gui/settings/GuiStandingSettings.java @@ -1,9 +1,9 @@ -package org.vivecraft.gui.settings; +package org.vivecraft.client.gui.settings; import net.minecraft.client.gui.screens.Screen; -import org.vivecraft.gui.framework.GuiVROptionsBase; -import org.vivecraft.gui.framework.VROptionEntry; -import org.vivecraft.settings.VRSettings; +import org.vivecraft.client.gui.framework.GuiVROptionsBase; +import org.vivecraft.client.gui.framework.VROptionEntry; +import org.vivecraft.client_vr.settings.VRSettings; public class GuiStandingSettings extends GuiVROptionsBase { diff --git a/common/src/main/java/org/vivecraft/gui/settings/GuiTeleportSettings.java b/common/src/main/java/org/vivecraft/client/gui/settings/GuiTeleportSettings.java similarity index 74% rename from common/src/main/java/org/vivecraft/gui/settings/GuiTeleportSettings.java rename to common/src/main/java/org/vivecraft/client/gui/settings/GuiTeleportSettings.java index 5e4401f4e..7f15ba0ae 100644 --- a/common/src/main/java/org/vivecraft/gui/settings/GuiTeleportSettings.java +++ b/common/src/main/java/org/vivecraft/client/gui/settings/GuiTeleportSettings.java @@ -1,10 +1,10 @@ -package org.vivecraft.gui.settings; +package org.vivecraft.client.gui.settings; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.screens.Screen; -import org.vivecraft.gui.framework.GuiVROptionButton; -import org.vivecraft.gui.framework.GuiVROptionsBase; -import org.vivecraft.settings.VRSettings; +import org.vivecraft.client.gui.framework.GuiVROption; +import org.vivecraft.client.gui.framework.GuiVROptionsBase; +import org.vivecraft.client_vr.settings.VRSettings; public class GuiTeleportSettings extends GuiVROptionsBase { @@ -38,11 +38,9 @@ public void init() protected void actionPerformed(AbstractWidget widget) { - if (widget instanceof GuiVROptionButton) + if (widget instanceof GuiVROption guivroption) { - GuiVROptionButton guivroptionbutton = (GuiVROptionButton)widget; - - if (guivroptionbutton.id == VRSettings.VrOptions.LIMIT_TELEPORT.ordinal()) + if (guivroption.getId() == VRSettings.VrOptions.LIMIT_TELEPORT.ordinal()) { this.reinit = true; } diff --git a/common/src/main/java/org/vivecraft/client/gui/settings/GuiVRControls.java b/common/src/main/java/org/vivecraft/client/gui/settings/GuiVRControls.java new file mode 100644 index 000000000..ceb1b5fb9 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client/gui/settings/GuiVRControls.java @@ -0,0 +1,51 @@ +package org.vivecraft.client.gui.settings; + +import org.vivecraft.client.gui.framework.VROptionEntry; +import org.vivecraft.client.gui.framework.GuiVROptionsBase; +import org.vivecraft.client_vr.settings.VRSettings; + +import com.mojang.blaze3d.vertex.PoseStack; + +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.TranslatableComponent; + +public class GuiVRControls extends GuiVROptionsBase +{ + private static VROptionEntry[] controlsSettings = new VROptionEntry[] { + new VROptionEntry(VRSettings.VrOptions.DUMMY, true), + new VROptionEntry(VRSettings.VrOptions.DUMMY, true), + new VROptionEntry(VRSettings.VrOptions.DUMMY, true), + new VROptionEntry(VRSettings.VrOptions.DUMMY, true), + new VROptionEntry(VRSettings.VrOptions.DUMMY, true), + new VROptionEntry(VRSettings.VrOptions.DUMMY), + new VROptionEntry(VRSettings.VrOptions.INGAME_BINDINGS_IN_GUI), + new VROptionEntry(VRSettings.VrOptions.REVERSE_HANDS), + new VROptionEntry(VRSettings.VrOptions.RIGHT_CLICK_DELAY), + new VROptionEntry(VRSettings.VrOptions.ALLOW_ADVANCED_BINDINGS), + new VROptionEntry(VRSettings.VrOptions.THIRDPERSON_ITEMTRANSFORMS) + }; + + public GuiVRControls(Screen par1GuiScreen) + { + super(par1GuiScreen); + } + + public void init() + { + this.vrTitle = "vivecraft.options.screen.controls"; + super.init(controlsSettings, true); + super.addDefaultButtons(); + } + + public void render(PoseStack pMatrixStack, int pMouseX, int pMouseY, float pPartialTicks) + { + super.render(pMatrixStack, pMouseX, pMouseY, pPartialTicks); + + int middle = 240 / 2 - this.minecraft.font.lineHeight / 2 - 24; + int lineHeight = this.minecraft.font.lineHeight + 3; + + drawCenteredString(pMatrixStack, this.minecraft.font, new TranslatableComponent("vivecraft.messages.controls.1"), this.width / 2, middle - lineHeight, 16777215); + drawCenteredString(pMatrixStack, this.minecraft.font, new TranslatableComponent("vivecraft.messages.controls.2"), this.width / 2, middle, 16777215); + drawCenteredString(pMatrixStack, this.minecraft.font, new TranslatableComponent("vivecraft.messages.controls.3"), this.width / 2, middle + lineHeight, 16777215); + } +} diff --git a/common/src/main/java/org/vivecraft/client/gui/widgets/TextScrollWidget.java b/common/src/main/java/org/vivecraft/client/gui/widgets/TextScrollWidget.java new file mode 100644 index 000000000..de4eca01b --- /dev/null +++ b/common/src/main/java/org/vivecraft/client/gui/widgets/TextScrollWidget.java @@ -0,0 +1,159 @@ +package org.vivecraft.client.gui.widgets; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.narration.NarrationElementOutput; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.FormattedText; +import net.minecraft.network.chat.Style; +import net.minecraft.network.chat.TextComponent; +import org.lwjgl.glfw.GLFW; + +import java.util.List; + +public class TextScrollWidget extends AbstractWidget { + + private int maxLines = 0; + private int currentLine = 0; + private int scrollBarSize = 0; + private int scrollBarOffset = 0; + private int scrollSteps = 0; + + private boolean scrollDragActive; + + private final int scrollBarWidth = 5; + private final int padding = 5; + private final List formattedText; + + public TextScrollWidget(int x, int y, int width, int height, String text) { + super(x, y, width, height, new TextComponent("")); + + formattedText = Minecraft.getInstance().font.getSplitter().splitLines(text, width - scrollBarWidth*2, Style.EMPTY); + + initScroll(); + } + + public TextScrollWidget(int x, int y, int width, int height, Component text) { + super(x, y, width, height, new TextComponent("")); + + formattedText = Minecraft.getInstance().font.getSplitter().splitLines(text, width - scrollBarWidth*2, Style.EMPTY); + initScroll(); + } + + private void initScroll() { + + maxLines = (height - 2 - padding + 3) / 12; + currentLine = 0; + scrollSteps = formattedText.size() - maxLines; + scrollSteps = Math.max(scrollSteps, 0); + scrollBarSize = scrollSteps == 0 ? height - 2 : (int)(Math.max(formattedText.size(), maxLines) / (float)(scrollSteps) * 12); + scrollBarOffset = height - scrollBarSize - 2; + + } + + @Override + public void renderButton(PoseStack poseStack, int i, int j, float f) { + // draw box outline + fill(poseStack, + x, + y, + x + width, + y + this.height, + -6250336); + // draw box inside + fill(poseStack, + x + 1, + y + 1, + x + width - 1, + y + this.height - 1, + -16777216); + + // draw text + for (int line = 0; line + currentLine < formattedText.size() && line < maxLines; line++) { + drawString(poseStack, Minecraft.getInstance().font, formattedText.get(line + currentLine).getString(), x + padding, y + padding + line * 12, 16777215); + } + + float scrollbarStart = scrollSteps == 0 ? 0 : currentLine/(float)scrollSteps * scrollBarOffset; + + if (isFocused() || isHovered) { + // draw scroll bar outline + fill(poseStack, + x + width - scrollBarWidth - 2, + (int) (y + 1 + scrollbarStart), + x + width - 1, + (int) (y + 1 + scrollbarStart + scrollBarSize), + -1); + } + + // draw scroll bar + fill(poseStack, + x + width - scrollBarWidth - (isFocused() || isHovered ? 1 : 2), + (int)(y + (isFocused() || isHovered ? 2 : 1) + scrollbarStart), + x + width - (isFocused() || isHovered ? 2 : 1), + (int)(y + (isFocused() || isHovered ? 0 : 1) + scrollbarStart + scrollBarSize), + -6250336); + } + + @Override + public void updateNarration(NarrationElementOutput narrationElementOutput) { + + } + + @Override + public void onClick(double x, double y) { + if (x >= x + width - scrollBarWidth && x <= x + width && y >= y && y <= y + height) { + scrollDragActive = true; + if (maxLines < formattedText.size()) { + // update scroll position + setCurrentLineFromYPos(y); + } + } + } + + @Override + public void onRelease(double x, double y) { + scrollDragActive = false; + super.onRelease(x, y); + } + + @Override + public void onDrag(double x, double y, double xRel, double yRel) { + if (visible && active && scrollDragActive) { + setCurrentLineFromYPos(y); + } + } + + private void setCurrentLineFromYPos(double y) { + if (y < y + scrollBarSize * 0.5) { + currentLine = 0; + } else if (y > y + height - scrollBarSize * 0.5) { + currentLine = scrollSteps; + } else { + currentLine = (int)((y - y - scrollBarSize * 0.5) / (height - scrollBarSize) * scrollSteps); + } + } + + @Override + public boolean mouseScrolled(double x, double y, double scrollAmount) { + if (scrollAmount < 0.0 && currentLine < scrollSteps) { + currentLine++; + } else if (scrollAmount > 0.0 && currentLine > 0) { + currentLine--; + } else { + // scroll bar on limit, didn't consume the input + return false; + } + return true; + } + + @Override + public boolean keyPressed(int key, int scancode, int mods) { + if (key == GLFW.GLFW_KEY_UP || key == GLFW.GLFW_KEY_DOWN) { + if (mouseScrolled(0, 0, key == GLFW.GLFW_KEY_UP ? 1 : -1)) { + return true; + } + } + return super.keyPressed(key, scancode, mods); + } +} diff --git a/common/src/main/java/org/vivecraft/client/network/ClientNetworking.java b/common/src/main/java/org/vivecraft/client/network/ClientNetworking.java new file mode 100644 index 000000000..544d43f26 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client/network/ClientNetworking.java @@ -0,0 +1,323 @@ +package org.vivecraft.client.network; + +import com.google.common.base.Charsets; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.Registry; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.network.protocol.game.ServerboundCustomPayloadPacket; +import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.Pose; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.phys.Vec3; +import org.vivecraft.client.VRPlayersClient; +import org.vivecraft.common.network.CommonNetworkHelper; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.gameplay.VRPlayer; +import org.vivecraft.client_vr.settings.AutoCalibration; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.common.CommonDataHolder; +import org.vivecraft.common.VRServerPerms; +import org.vivecraft.common.network.VrPlayerState; + +import java.util.UUID; + +public class ClientNetworking { + + public static boolean displayedChatMessage = false; + public static boolean displayedChatWarning = false; + public static boolean serverWantsData = false; + public static boolean serverAllowsClimbey = false; + public static boolean serverSupportsDirectTeleport = false; + public static boolean serverAllowsCrawling = false; + public static boolean serverAllowsVrSwitching = false; + // assume a legacy server by default, to not send invalid packets + // -1 == legacy server + public static int usedNetworkVersion = -1; + private static float worldScallast = 0.0F; + private static float heightlast = 0.0F; + private static float capturedYaw; + private static float capturedPitch; + private static boolean overrideActive; + + public static boolean needsReset = true; + + public static ServerboundCustomPayloadPacket getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators command, byte[] payload) { + FriendlyByteBuf friendlybytebuf = new FriendlyByteBuf(Unpooled.buffer()); + friendlybytebuf.writeByte(command.ordinal()); + friendlybytebuf.writeBytes(payload); + return new ServerboundCustomPayloadPacket(CommonNetworkHelper.CHANNEL, friendlybytebuf); + } + + public static ServerboundCustomPayloadPacket createVRActivePacket(boolean vrActive) { + var buffer = new FriendlyByteBuf(Unpooled.buffer()); + buffer.writeByte(CommonNetworkHelper.PacketDiscriminators.IS_VR_ACTIVE.ordinal()); + buffer.writeBoolean(vrActive); + return new ServerboundCustomPayloadPacket(CommonNetworkHelper.CHANNEL, buffer); + } + + public static void resetServerSettings() { + worldScallast = 0.0F; + heightlast = 0.0F; + serverAllowsClimbey = false; + serverWantsData = false; + serverSupportsDirectTeleport = false; + serverAllowsCrawling = false; + serverAllowsVrSwitching = false; + usedNetworkVersion = -1; + //DataHolder.getInstance().vrSettings.overrides.resetAll(); move to mixin + } + + public static void sendVersionInfo() { + String s = CommonNetworkHelper.CHANNEL.toString(); + FriendlyByteBuf friendlybytebuf = new FriendlyByteBuf(Unpooled.buffer()); + friendlybytebuf.writeBytes(s.getBytes()); + Minecraft.getInstance().getConnection().send(new ServerboundCustomPayloadPacket(new ResourceLocation("minecraft:register"), friendlybytebuf)); + // send version string, with currently running + Minecraft.getInstance().getConnection().send(getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators.VERSION, + (CommonDataHolder.getInstance().versionIdentifier + (VRState.vrRunning ? " VR" : " NONVR") + + "\n" + CommonNetworkHelper.MAX_SUPPORTED_NETWORK_VERSION + + "\n" + CommonNetworkHelper.MIN_SUPPORTED_NETWORK_VERSION + ).getBytes(Charsets.UTF_8))); + } + + public static void sendVRPlayerPositions(VRPlayer vrPlayer) { + var connection = Minecraft.getInstance().getConnection(); + if (!serverWantsData || connection == null) { + return; + } + + float worldScale = ClientDataHolderVR.getInstance().vrPlayer.vrdata_world_post.worldScale; + + if (worldScale != worldScallast) { + ByteBuf bytebuf = Unpooled.buffer(); + bytebuf.writeFloat(worldScale); + byte[] abyte = new byte[bytebuf.readableBytes()]; + bytebuf.readBytes(abyte); + ServerboundCustomPayloadPacket serverboundcustompayloadpacket = getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators.WORLDSCALE, abyte); + Minecraft.getInstance().getConnection().send(serverboundcustompayloadpacket); + worldScallast = worldScale; + } + + float f1 = AutoCalibration.getPlayerHeight(); + + if (f1 != heightlast) { + ByteBuf bytebuf2 = Unpooled.buffer(); + bytebuf2.writeFloat(f1 / 1.52F); + byte[] abyte3 = new byte[bytebuf2.readableBytes()]; + bytebuf2.readBytes(abyte3); + ServerboundCustomPayloadPacket serverboundcustompayloadpacket1 = getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators.HEIGHT, abyte3); + Minecraft.getInstance().getConnection().send(serverboundcustompayloadpacket1); + heightlast = f1; + } + + var vrPlayerState = VrPlayerState.create(vrPlayer); + + if (usedNetworkVersion >= 0) { + connection.send(createVrPlayerStatePacket(vrPlayerState)); + } else { + sendLegacyPackets(connection, vrPlayerState); + } + VRPlayersClient.getInstance().Update(Minecraft.getInstance().player.getGameProfile().getId(), vrPlayerState, worldScale, f1 / 1.52F, true); + } + + public static ServerboundCustomPayloadPacket createVrPlayerStatePacket(VrPlayerState vrPlayerState) { + var buffer = new FriendlyByteBuf(Unpooled.buffer()); + buffer.writeByte(CommonNetworkHelper.PacketDiscriminators.VR_PLAYER_STATE.ordinal()); + vrPlayerState.serialize(buffer); + return new ServerboundCustomPayloadPacket(CommonNetworkHelper.CHANNEL, buffer); + } + + public static void sendLegacyPackets(ClientPacketListener connection, VrPlayerState vrPlayerState) { + // left controller packet + FriendlyByteBuf controller0Buffer = new FriendlyByteBuf(Unpooled.buffer()); + controller0Buffer.writeByte(CommonNetworkHelper.PacketDiscriminators.CONTROLLER0DATA.ordinal()); + controller0Buffer.writeBoolean(ClientDataHolderVR.getInstance().vrSettings.reverseHands); + vrPlayerState.controller0().serialize(controller0Buffer); + connection.send(new ServerboundCustomPayloadPacket(CommonNetworkHelper.CHANNEL, controller0Buffer)); + + // right controller packet + FriendlyByteBuf controller1Buffer = new FriendlyByteBuf(Unpooled.buffer()); + controller1Buffer.writeByte(CommonNetworkHelper.PacketDiscriminators.CONTROLLER1DATA.ordinal()); + controller1Buffer.writeBoolean(ClientDataHolderVR.getInstance().vrSettings.reverseHands); + vrPlayerState.controller1().serialize(controller1Buffer); + connection.send(new ServerboundCustomPayloadPacket(CommonNetworkHelper.CHANNEL, controller1Buffer)); + + // hmd packet + FriendlyByteBuf headBuffer = new FriendlyByteBuf(Unpooled.buffer()); + headBuffer.writeByte(CommonNetworkHelper.PacketDiscriminators.HEADDATA.ordinal()); + headBuffer.writeBoolean(ClientDataHolderVR.getInstance().vrSettings.seated); + vrPlayerState.hmd().serialize(headBuffer); + connection.send(new ServerboundCustomPayloadPacket(CommonNetworkHelper.CHANNEL, headBuffer)); + } + + public static boolean isLimitedSurvivalTeleport() { + return ClientDataHolderVR.getInstance().vrSettings.overrides.getSetting(VRSettings.VrOptions.LIMIT_TELEPORT).getBoolean(); + } + + public static int getTeleportUpLimit() { + return ClientDataHolderVR.getInstance().vrSettings.overrides.getSetting(VRSettings.VrOptions.TELEPORT_UP_LIMIT).getInt(); + } + + public static int getTeleportDownLimit() { + return ClientDataHolderVR.getInstance().vrSettings.overrides.getSetting(VRSettings.VrOptions.TELEPORT_DOWN_LIMIT).getInt(); + } + + public static int getTeleportHorizLimit() { + return ClientDataHolderVR.getInstance().vrSettings.overrides.getSetting(VRSettings.VrOptions.TELEPORT_HORIZ_LIMIT).getInt(); + } + + public static void sendActiveHand(byte c) { + if (serverWantsData) { + ServerboundCustomPayloadPacket serverboundcustompayloadpacket = getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators.ACTIVEHAND, new byte[]{c}); + + if (Minecraft.getInstance().getConnection() != null) { + Minecraft.getInstance().getConnection().send(serverboundcustompayloadpacket); + } + } + } + + public static void overridePose(LocalPlayer player) { + if (ClientDataHolderVR.getInstance().crawlTracker.crawling) { + player.setPose(Pose.SWIMMING); + } + } + + public static void overrideLook(Player player, Vec3 view) { + if (!serverWantsData) { + capturedPitch = player.getXRot(); + capturedYaw = player.getYRot(); + float f = (float) Math.toDegrees(Math.asin(-view.y / view.length())); + float f1 = (float) Math.toDegrees(Math.atan2(-view.x, view.z)); + ((LocalPlayer) player).connection.send(new ServerboundMovePlayerPacket.Rot(f1, f, player.isOnGround())); + overrideActive = true; + } + } + + public static void restoreLook(Player player) { + if (!serverWantsData) { + if (overrideActive) { + ((LocalPlayer) player).connection.send(new ServerboundMovePlayerPacket.Rot(capturedYaw, capturedPitch, player.isOnGround())); + overrideActive = false; + } + } + } + + public static void handlePacket(CommonNetworkHelper.PacketDiscriminators packetID, FriendlyByteBuf buffer) { + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); + Minecraft mc = Minecraft.getInstance(); + switch (packetID) { + case VERSION -> { + String s11 = buffer.readUtf(1024); + VRServerPerms.INSTANCE.setTeleportSupported(true); + if (VRState.vrInitialized) { + dataholder.vrPlayer.teleportWarning = false; + dataholder.vrPlayer.vrSwitchWarning = true; + } + if (!ClientNetworking.displayedChatMessage + && (dataholder.vrSettings.showServerPluginMessage == VRSettings.ChatServerPluginMessage.ALWAYS + || (dataholder.vrSettings.showServerPluginMessage == VRSettings.ChatServerPluginMessage.SERVER_ONLY && !Minecraft.getInstance().isLocalServer()))) { + ClientNetworking.displayedChatMessage = true; + mc.gui.getChat().addMessage(new TranslatableComponent("vivecraft.messages.serverplugin", s11)); + } + if (VRState.vrEnabled && dataholder.vrSettings.manualCalibration == -1.0F && !dataholder.vrSettings.seated) { + mc.gui.getChat().addMessage(new TranslatableComponent("vivecraft.messages.calibrateheight")); + } + } + case IS_VR_ACTIVE -> { + if (!buffer.readBoolean()) { + VRPlayersClient.getInstance().disableVR(buffer.readUUID()); + } + } + case REQUESTDATA -> ClientNetworking.serverWantsData = true; + case CLIMBING -> { + ClientNetworking.serverAllowsClimbey = buffer.readBoolean(); + if (buffer.readableBytes() > 0) { + dataholder.climbTracker.serverblockmode = buffer.readByte(); + dataholder.climbTracker.blocklist.clear(); + + while (buffer.readableBytes() > 0) { + String s12 = buffer.readUtf(16384); + Block block = Registry.BLOCK.get(new ResourceLocation(s12)); + + // if the block is not there AIR is returned + if (block != Blocks.AIR) { + dataholder.climbTracker.blocklist.add(block); + } + } + } + } + case TELEPORT -> ClientNetworking.serverSupportsDirectTeleport = true; + case UBERPACKET -> { + UUID uuid = buffer.readUUID(); + var vrPlayerState = VrPlayerState.deserialize(buffer); + float worldScale = buffer.readFloat(); + float heightScale = buffer.readFloat(); + VRPlayersClient.getInstance().Update(uuid, vrPlayerState, worldScale, heightScale); + } + case SETTING_OVERRIDE -> { + while (buffer.readableBytes() > 0) { + String s13 = buffer.readUtf(16384); + String s14 = buffer.readUtf(16384); + String[] astring = s13.split("\\.", 2); + + if (dataholder.vrSettings.overrides.hasSetting(astring[0])) { + VRSettings.ServerOverrides.Setting vrsettings$serveroverrides$setting = dataholder.vrSettings.overrides.getSetting(astring[0]); + + try { + if (astring.length > 1) { + String s15 = astring[1]; + switch (s15) { + case "min": + vrsettings$serveroverrides$setting.setValueMin(Float.parseFloat(s14)); + break; + + case "max": + vrsettings$serveroverrides$setting.setValueMax(Float.parseFloat(s14)); + } + } else { + Object object = vrsettings$serveroverrides$setting.getOriginalValue(); + + if (object instanceof Boolean) { + vrsettings$serveroverrides$setting.setValue(s14.equals("true")); + } else if (!(object instanceof Integer) && !(object instanceof Byte) && !(object instanceof Short)) { + if (!(object instanceof Float) && !(object instanceof Double)) { + vrsettings$serveroverrides$setting.setValue(s14); + } else { + vrsettings$serveroverrides$setting.setValue(Float.parseFloat(s14)); + } + } else { + vrsettings$serveroverrides$setting.setValue(Integer.parseInt(s14)); + } + } + + System.out.println("Server setting override: " + s13 + " = " + s14); + } catch (Exception exception) { + exception.printStackTrace(); + } + } + } + } + case CRAWL -> ClientNetworking.serverAllowsCrawling = true; + case NETWORK_VERSION -> // cast to unsigned byte + ClientNetworking.usedNetworkVersion = buffer.readByte() & 0xFF; + case VR_SWITCHING -> { + ClientNetworking.serverAllowsVrSwitching = buffer.readBoolean(); + if (VRState.vrInitialized) { + if (!ClientNetworking.serverAllowsVrSwitching) { + Minecraft.getInstance().gui.getChat().addMessage(new TranslatableComponent("vivecraft.messages.novrhotswitching")); + } + dataholder.vrPlayer.vrSwitchWarning = false; + } + } + } + } +} diff --git a/common/src/main/java/org/vivecraft/api/PatreonReceiver.java b/common/src/main/java/org/vivecraft/client/network/PatreonReceiver.java similarity index 90% rename from common/src/main/java/org/vivecraft/api/PatreonReceiver.java rename to common/src/main/java/org/vivecraft/client/network/PatreonReceiver.java index ca07702a2..4da27c86a 100644 --- a/common/src/main/java/org/vivecraft/api/PatreonReceiver.java +++ b/common/src/main/java/org/vivecraft/client/network/PatreonReceiver.java @@ -1,4 +1,4 @@ -package org.vivecraft.api; +package org.vivecraft.client.network; import java.io.IOException; import java.net.URL; @@ -10,7 +10,7 @@ import net.minecraft.world.entity.player.Player; import org.apache.commons.io.IOUtils; -import org.vivecraft.render.PlayerModelController; +import org.vivecraft.client.VRPlayersClient; public class PatreonReceiver { @@ -43,7 +43,7 @@ private static void fileDownloadFinished(String url, String data) { if (astring1[0].equalsIgnoreCase(player.getGameProfile().getName())) { - PlayerModelController.getInstance().setHMD(player.getUUID(), i); + VRPlayersClient.getInstance().setHMD(player.getUUID(), i); } } } @@ -79,7 +79,7 @@ public static void addPlayerInfo(Player p) if (cache == null) { queuedPlayers.add(p); - PlayerModelController.getInstance().setHMD(p.getUUID(), 0); + VRPlayersClient.getInstance().setHMD(p.getUUID(), 0); if (!downloadStarted) { @@ -97,7 +97,7 @@ public static void addPlayerInfo(Player p) } else { - PlayerModelController.getInstance().setHMD(p.getUUID(), cache.getOrDefault(p.getGameProfile().getName(), 0)); + VRPlayersClient.getInstance().setHMD(p.getUUID(), cache.getOrDefault(p.getGameProfile().getName(), 0)); } } } diff --git a/common/src/main/java/org/vivecraft/render/HMDLayer.java b/common/src/main/java/org/vivecraft/client/render/HMDLayer.java similarity index 90% rename from common/src/main/java/org/vivecraft/render/HMDLayer.java rename to common/src/main/java/org/vivecraft/client/render/HMDLayer.java index 865917096..b12cc961e 100644 --- a/common/src/main/java/org/vivecraft/render/HMDLayer.java +++ b/common/src/main/java/org/vivecraft/client/render/HMDLayer.java @@ -1,4 +1,4 @@ -package org.vivecraft.render; +package org.vivecraft.client.render; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; @@ -11,6 +11,7 @@ import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Player; +import org.vivecraft.client.VRPlayersClient; public class HMDLayer extends RenderLayer> { @@ -23,7 +24,7 @@ public HMDLayer(RenderLayerParent extends PlayerModel { private final boolean slim; public ModelPart vrHMD; - PlayerModelController.RotInfo rotInfo; + VRPlayersClient.RotInfo rotInfo; private boolean laying; - private final List parts; - public VRPlayerModel(ModelPart p_170821_, boolean p_170822_) + public VRPlayerModel(ModelPart modelPart, boolean isSlim) { - super(p_170821_, p_170822_); - this.slim = p_170822_; - this.vrHMD = p_170821_.getChild("vrHMD"); - this.parts = p_170821_.getAllParts().filter((p_170824_) -> - { - return !p_170824_.isEmpty(); - }).collect(ImmutableList.toImmutableList()); + super(modelPart, isSlim); + this.slim = isSlim; + this.vrHMD = modelPart.getChild("vrHMD"); } public static MeshDefinition createMesh(CubeDeformation p_170826_, boolean p_170827_) @@ -48,8 +39,8 @@ public static MeshDefinition createMesh(CubeDeformation p_170826_, boolean p_170 public void setupAnim(T pEntity, float pLimbSwing, float pLimbSwingAmount, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) { super.setupAnim(pEntity, pLimbSwing, pLimbSwingAmount, pAgeInTicks, pNetHeadYaw, pHeadPitch); - this.rotInfo = PlayerModelController.getInstance().getRotationsForPlayer(((Player)pEntity).getUUID()); - PlayerModelController.RotInfo rotinfo = PlayerModelController.getInstance().getRotationsForPlayer(((Player)pEntity).getUUID()); + this.rotInfo = VRPlayersClient.getInstance().getRotationsForPlayer(((Player)pEntity).getUUID()); + VRPlayersClient.RotInfo rotinfo = VRPlayersClient.getInstance().getRotationsForPlayer(((Player)pEntity).getUUID()); if (rotinfo == null) return; //how @@ -68,7 +59,12 @@ public void setupAnim(T pEntity, float pLimbSwing, float pLimbSwingAmount, float this.head.x = 0.0F; this.head.y = -4.0F; this.head.xRot = (float)((double)this.head.xRot - (Math.PI / 2D)); - } + } else if (this.crouching) { + // move head down when crouching + this.head.z = 0.0F; + this.head.x = 0.0F; + this.head.y = 4.2f; + } else { this.head.z = 0.0F; diff --git a/common/src/main/java/org/vivecraft/render/VRPlayerModel_WithArms.java b/common/src/main/java/org/vivecraft/client/render/VRPlayerModel_WithArms.java similarity index 80% rename from common/src/main/java/org/vivecraft/render/VRPlayerModel_WithArms.java rename to common/src/main/java/org/vivecraft/client/render/VRPlayerModel_WithArms.java index bf95a1dd0..624bad0d0 100644 --- a/common/src/main/java/org/vivecraft/render/VRPlayerModel_WithArms.java +++ b/common/src/main/java/org/vivecraft/client/render/VRPlayerModel_WithArms.java @@ -1,6 +1,4 @@ -package org.vivecraft.render; - -import java.util.List; +package org.vivecraft.client.render; import com.google.common.collect.ImmutableList; import com.mojang.blaze3d.vertex.PoseStack; @@ -20,8 +18,10 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; -import org.vivecraft.PehkuiHelper; -import org.vivecraft.Xplat; +import org.vivecraft.client.VRPlayersClient; +import org.vivecraft.mod_compat_vr.optifine.OptifineHelper; +import org.vivecraft.mod_compat_vr.pehkui.PehkuiHelper; +import org.vivecraft.client.Xplat; public class VRPlayerModel_WithArms extends VRPlayerModel { @@ -32,30 +32,49 @@ public class VRPlayerModel_WithArms extends VRPlayerMode public ModelPart rightShoulder_sleeve; public ModelPart leftHand; public ModelPart rightHand; - PlayerModelController.RotInfo rotInfo; + VRPlayersClient.RotInfo rotInfo; private boolean laying; - private final List parts; - public VRPlayerModel_WithArms(ModelPart p_170821_, boolean p_170822_) + public VRPlayerModel_WithArms(ModelPart modelPart, boolean isSlim) { - super(p_170821_, p_170822_); - this.slim = p_170822_; - this.leftShoulder = p_170821_.getChild("leftShoulder"); - this.rightShoulder = p_170821_.getChild("rightShoulder"); - this.leftShoulder_sleeve = p_170821_.getChild("leftShoulder_sleeve"); - this.rightShoulder_sleeve = p_170821_.getChild("rightShoulder_sleeve"); - this.rightHand = p_170821_.getChild("rightHand"); - this.leftHand = p_170821_.getChild("leftHand"); - - this.parts = p_170821_.getAllParts().filter((p_170824_) -> - { - return !p_170824_.isEmpty(); - }).collect(ImmutableList.toImmutableList()); + super(modelPart, isSlim); + this.slim = isSlim; + // use left/right arm as shoulders + this.leftShoulder = modelPart.getChild("left_arm"); + this.rightShoulder = modelPart.getChild("right_arm"); + this.leftShoulder_sleeve = modelPart.getChild("leftShoulder_sleeve"); + this.rightShoulder_sleeve = modelPart.getChild("rightShoulder_sleeve"); + this.rightHand = modelPart.getChild("rightHand"); + this.leftHand = modelPart.getChild("leftHand"); + + + //finger hax + // some mods remove the base parts + if (!leftShoulder.cubes.isEmpty()) { + copyUV(leftShoulder.cubes.get(0).polygons[1], leftHand.cubes.get(0).polygons[1]); + copyUV(leftShoulder.cubes.get(0).polygons[1], leftHand.cubes.get(0).polygons[0]); + } + if (!rightShoulder.cubes.isEmpty()) { + copyUV(rightShoulder.cubes.get(0).polygons[1], this.rightHand.cubes.get(0).polygons[1]); + copyUV(rightShoulder.cubes.get(0).polygons[1], this.rightHand.cubes.get(0).polygons[0]); + } + + if (!rightSleeve.cubes.isEmpty()) { + copyUV(rightShoulder_sleeve.cubes.get(0).polygons[1], this.rightSleeve.cubes.get(0).polygons[1]); + copyUV(rightShoulder_sleeve.cubes.get(0).polygons[1], this.rightSleeve.cubes.get(0).polygons[0]); + } + if (!leftSleeve.cubes.isEmpty()) { + copyUV(leftShoulder_sleeve.cubes.get(0).polygons[1], leftSleeve.cubes.get(0).polygons[1]); + copyUV(leftShoulder_sleeve.cubes.get(0).polygons[1], leftSleeve.cubes.get(0).polygons[0]); + } } private void copyUV(Polygon source, Polygon dest) { for (int i = 0; i < source.vertices.length; i++) { dest.vertices[i] = new Vertex(dest.vertices[i].pos, source.vertices[i].u, source.vertices[i].v); + if (OptifineHelper.isOptifineLoaded()) { + OptifineHelper.copyRenderPositions(source.vertices[i], dest.vertices[i]); + } } } @@ -64,17 +83,13 @@ public static MeshDefinition createMesh(CubeDeformation p_170826_, boolean p_170 MeshDefinition meshdefinition = VRPlayerModel.createMesh(p_170826_, p_170827_); PartDefinition partdefinition = meshdefinition.getRoot(); - //its just a flesh wound - partdefinition.addOrReplaceChild("left_arm", CubeListBuilder.create(), PartPose.ZERO); - partdefinition.addOrReplaceChild("right_arm", CubeListBuilder.create(), PartPose.ZERO); - if(p_170827_) { partdefinition.addOrReplaceChild("leftHand", CubeListBuilder.create().texOffs(32, 55).addBox(-1.0F, -2.0F, -2.0F, 3.0F, 5.0F, 4.0F, p_170826_), PartPose.offset(5.0F, 2.5F, 0.0F)); partdefinition.addOrReplaceChild("left_sleeve", CubeListBuilder.create().texOffs(48, 55).addBox(-1.0F, -2.0F, -2.0F, 3.0F, 5.0F, 4.0F, p_170826_.extend(0.25f)), PartPose.offset(5.0F, 2.5F, 0.0F)); partdefinition.addOrReplaceChild("rightHand", CubeListBuilder.create().texOffs(40, 23).addBox(-2.0F, -2.0F, -2.0F, 3.0F, 5.0F, 4.0F, p_170826_), PartPose.offset(-5.0F, 2.5F, 0.0F)); partdefinition.addOrReplaceChild("right_sleeve", CubeListBuilder.create().texOffs(40, 39).addBox(-2.0F, -2.0F, -2.0F, 3.0F, 5.0F, 4.0F, p_170826_.extend(0.25f)), PartPose.offset(-5.0F, 2.5F, 0.0F)); - partdefinition.addOrReplaceChild("leftShoulder", CubeListBuilder.create().texOffs(32, 48).addBox(-1.0F, -2.0F, -2.0F, 3.0F, 5.0F, 4.0F, p_170826_), PartPose.offset(5.0F, 2.5F, 0.0F)); - partdefinition.addOrReplaceChild("rightShoulder", CubeListBuilder.create().texOffs(40, 16).addBox(-2.0F, -2.0F, -2.0F, 3.0F, 5.0F, 4.0F, p_170826_), PartPose.offset(-5.0F, 2.5F, 0.0F)); + partdefinition.addOrReplaceChild("left_arm", CubeListBuilder.create().texOffs(32, 48).addBox(-1.0F, -2.0F, -2.0F, 3.0F, 5.0F, 4.0F, p_170826_), PartPose.offset(5.0F, 2.5F, 0.0F)); + partdefinition.addOrReplaceChild("right_arm", CubeListBuilder.create().texOffs(40, 16).addBox(-2.0F, -2.0F, -2.0F, 3.0F, 5.0F, 4.0F, p_170826_), PartPose.offset(-5.0F, 2.5F, 0.0F)); partdefinition.addOrReplaceChild("leftShoulder_sleeve", CubeListBuilder.create().texOffs(48, 48).addBox(-1.0F, -2.0F, -2.0F, 3.0F, 5.0F, 4.0F, p_170826_.extend(0.25f)), PartPose.offset(5.0F, 2.5F, 0.0F)); partdefinition.addOrReplaceChild("rightShoulder_sleeve", CubeListBuilder.create().texOffs(40, 32).addBox(-2.0F, -2.0F, -2.0F, 3.0F, 5.0F, 4.0F, p_170826_.extend(0.25f)), PartPose.offset(-5.0F, 2.5F, 0.0F)); }else { @@ -82,8 +97,8 @@ public static MeshDefinition createMesh(CubeDeformation p_170826_, boolean p_170 partdefinition.addOrReplaceChild("left_sleeve", CubeListBuilder.create().texOffs(48, 55).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 5.0F, 4.0F, p_170826_.extend(0.25f)), PartPose.offset(5.0F, 2.5F, 0.0F)); partdefinition.addOrReplaceChild("rightHand", CubeListBuilder.create().texOffs(40, 23).addBox(-2.0F, -2.0F, -2.0F, 4.0F, 5.0F, 4.0F, p_170826_), PartPose.offset(-5.0F, 2.5F, 0.0F)); partdefinition.addOrReplaceChild("right_sleeve", CubeListBuilder.create().texOffs(40, 39).addBox(-2.0F, -2.0F, -2.0F, 4.0F, 5.0F, 4.0F, p_170826_.extend(0.25f)), PartPose.offset(-5.0F, 2.5F, 0.0F)); - partdefinition.addOrReplaceChild("leftShoulder", CubeListBuilder.create().texOffs(32, 48).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 5.0F, 4.0F, p_170826_), PartPose.offset(5.0F, 2.5F, 0.0F)); - partdefinition.addOrReplaceChild("rightShoulder", CubeListBuilder.create().texOffs(40, 16).addBox(-2.0F, -2.0F, -2.0F, 4.0F, 5.0F, 4.0F, p_170826_), PartPose.offset(-5.0F, 2.5F, 0.0F)); + partdefinition.addOrReplaceChild("left_arm", CubeListBuilder.create().texOffs(32, 48).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 5.0F, 4.0F, p_170826_), PartPose.offset(5.0F, 2.5F, 0.0F)); + partdefinition.addOrReplaceChild("right_arm", CubeListBuilder.create().texOffs(40, 16).addBox(-2.0F, -2.0F, -2.0F, 4.0F, 5.0F, 4.0F, p_170826_), PartPose.offset(-5.0F, 2.5F, 0.0F)); partdefinition.addOrReplaceChild("leftShoulder_sleeve", CubeListBuilder.create().texOffs(48, 48).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 5.0F, 4.0F, p_170826_.extend(0.25f)), PartPose.offset(5.0F, 2.5F, 0.0F)); partdefinition.addOrReplaceChild("rightShoulder_sleeve", CubeListBuilder.create().texOffs(40, 32).addBox(-2.0F, -2.0F, -2.0F, 4.0F, 5.0F, 4.0F, p_170826_.extend(0.25f)), PartPose.offset(-5.0F, 2.5F, 0.0F)); @@ -100,8 +115,8 @@ protected Iterable bodyParts() public void setupAnim(T pEntity, float pLimbSwing, float pLimbSwingAmount, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) { super.setupAnim(pEntity, pLimbSwing, pLimbSwingAmount, pAgeInTicks, pNetHeadYaw, pHeadPitch); - this.rotInfo = PlayerModelController.getInstance().getRotationsForPlayer(((Player)pEntity).getUUID()); - PlayerModelController.RotInfo rotinfo = PlayerModelController.getInstance().getRotationsForPlayer(((Player)pEntity).getUUID()); + this.rotInfo = VRPlayersClient.getInstance().getRotationsForPlayer(((Player)pEntity).getUUID()); + VRPlayersClient.RotInfo rotinfo = VRPlayersClient.getInstance().getRotationsForPlayer(((Player)pEntity).getUUID()); if (rotinfo == null) return; @@ -117,9 +132,6 @@ public void setupAnim(T pEntity, float pLimbSwing, float pLimbSwingAmount, float this.laying = this.swimAmount > 0.0F || pEntity.isFallFlying() && !pEntity.isAutoSpinAttack(); - this.rightShoulder.visible = true; - this.leftShoulder.visible = true; - if (!rotinfo.reverse) { this.rightShoulder.setPos(-Mth.cos(this.body.yRot) * 5.0F, this.slim ? 2.5F : 2.0F, Mth.sin(this.body.yRot) * 5.0F); @@ -211,18 +223,6 @@ public void setupAnim(T pEntity, float pLimbSwing, float pLimbSwingAmount, float this.rightShoulder_sleeve.copyFrom(this.rightShoulder); this.leftShoulder_sleeve.visible = this.leftSleeve.visible; this.rightShoulder_sleeve.visible = this.rightSleeve.visible; - - int i = 3; - //finger hax - copyUV(rightShoulder.cubes.get(0).polygons[3], this.rightHand.cubes.get(0).polygons[3]); - copyUV(leftShoulder.cubes.get(0).polygons[3], leftHand.cubes.get(0).polygons[3]); - copyUV(rightShoulder.cubes.get(0).polygons[3], this.rightHand.cubes.get(0).polygons[2]); - copyUV(leftShoulder.cubes.get(0).polygons[3], leftHand.cubes.get(0).polygons[2]); - - copyUV(rightShoulder_sleeve.cubes.get(0).polygons[3], this.rightSleeve.cubes.get(0).polygons[3]); - copyUV(leftShoulder_sleeve.cubes.get(0).polygons[3], leftSleeve.cubes.get(0).polygons[3]); - copyUV(rightShoulder_sleeve.cubes.get(0).polygons[3], this.rightSleeve.cubes.get(0).polygons[2]); - copyUV(leftShoulder_sleeve.cubes.get(0).polygons[3], leftSleeve.cubes.get(0).polygons[2]); } public void setAllVisible(boolean pVisible) @@ -235,8 +235,6 @@ public void setAllVisible(boolean pVisible) this.leftShoulder_sleeve.visible = pVisible; this.rightHand.visible = pVisible; this.leftHand.visible = pVisible; - this.leftArm.visible = false; - this.rightArm.visible = false; } diff --git a/common/src/main/java/org/vivecraft/client/render/VRPlayerRenderer.java b/common/src/main/java/org/vivecraft/client/render/VRPlayerRenderer.java new file mode 100644 index 000000000..0e227038c --- /dev/null +++ b/common/src/main/java/org/vivecraft/client/render/VRPlayerRenderer.java @@ -0,0 +1,90 @@ +package org.vivecraft.client.render; + +import java.util.UUID; + +import net.minecraft.client.Minecraft; +import org.vivecraft.client.VRPlayersClient; +import org.vivecraft.client_vr.ClientDataHolderVR; +import com.mojang.blaze3d.vertex.PoseStack; + +import net.minecraft.client.model.geom.builders.CubeDeformation; +import net.minecraft.client.model.geom.builders.LayerDefinition; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.player.PlayerRenderer; +import net.minecraft.world.phys.Vec3; +import org.vivecraft.client_vr.render.RenderPass; + +public class VRPlayerRenderer extends PlayerRenderer +{ + static LayerDefinition VRLayerDef = LayerDefinition.create(VRPlayerModel.createMesh(CubeDeformation.NONE, false), 64, 64); + static LayerDefinition VRLayerDef_arms = LayerDefinition.create(VRPlayerModel_WithArms.createMesh(CubeDeformation.NONE, false), 64, 64); + static LayerDefinition VRLayerDef_slim = LayerDefinition.create(VRPlayerModel.createMesh(CubeDeformation.NONE, true), 64, 64); + static LayerDefinition VRLayerDef_arms_slim = LayerDefinition.create(VRPlayerModel_WithArms.createMesh(CubeDeformation.NONE, true), 64, 64); + + public VRPlayerRenderer(EntityRendererProvider.Context context, boolean slim, boolean seated) { + super(context, slim); + model = !slim ? + (seated ? + new VRPlayerModel<>(VRLayerDef.bakeRoot(), slim) : + new VRPlayerModel_WithArms<>(VRLayerDef_arms.bakeRoot(), slim)) : + (seated ? + new VRPlayerModel<>(VRLayerDef_slim.bakeRoot(), slim) : + new VRPlayerModel_WithArms<>(VRLayerDef_arms_slim.bakeRoot(), slim)); + + this.addLayer(new HMDLayer(this)); + } + + @Override + public void render(AbstractClientPlayer entityIn, float pEntityYaw, float pPartialTicks, PoseStack matrixStackIn, MultiBufferSource pBuffer, int pPackedLight) + { + + VRPlayersClient.RotInfo playermodelcontroller$rotinfo = VRPlayersClient.getInstance().getRotationsForPlayer(entityIn.getUUID()); + + if (playermodelcontroller$rotinfo != null) + { + matrixStackIn.scale(playermodelcontroller$rotinfo.heightScale, playermodelcontroller$rotinfo.heightScale, playermodelcontroller$rotinfo.heightScale); + super.render(entityIn, pEntityYaw, pPartialTicks, matrixStackIn, pBuffer, pPackedLight); + matrixStackIn.scale(1.0F, 1.0F / playermodelcontroller$rotinfo.heightScale, 1.0F); + } + } + + @Override + public Vec3 getRenderOffset(AbstractClientPlayer pEntity, float pPartialTicks) + { + //idk why we do this anymore + return pEntity.isVisuallySwimming() ? new Vec3(0.0D, -0.125D, 0.0D) : Vec3.ZERO; + // return pEntity.isCrouching() ? new Vec3(0.0D, -0.125D, 0.0D) : super.getRenderOffset(pEntity, pPartialTicks); + } + + @Override + public void setModelProperties(AbstractClientPlayer pClientPlayer) + { + super.setModelProperties(pClientPlayer); + + this.getModel().crouching &= !pClientPlayer.isVisuallySwimming(); + + if (pClientPlayer == Minecraft.getInstance().player && this.getModel() instanceof VRPlayerModel_WithArms armsModel && ClientDataHolderVR.getInstance().currentPass == RenderPass.CAMERA && ClientDataHolderVR.getInstance().cameraTracker.isQuickMode() && ClientDataHolderVR.getInstance().grabScreenShot) { + // player hands block the camera, so disable them for the screenshot + armsModel.leftHand.visible = false; + armsModel.rightHand.visible = false; + armsModel.leftSleeve.visible = false; + armsModel.rightSleeve.visible = false; + } + } + + @Override + protected void setupRotations(AbstractClientPlayer pEntityLiving, PoseStack pMatrixStack, float pAgeInTicks, float pRotationYaw, float pPartialTicks) + { + UUID uuid = pEntityLiving.getUUID(); + if (ClientDataHolderVR.getInstance().currentPass != RenderPass.GUI && VRPlayersClient.getInstance().isTracked(uuid)) + { + VRPlayersClient.RotInfo playermodelcontroller$rotinfo = VRPlayersClient.getInstance().getRotationsForPlayer(uuid); + pRotationYaw = (float)Math.toDegrees(playermodelcontroller$rotinfo.getBodyYawRadians()); + } + + //vanilla below here + super.setupRotations(pEntityLiving, pMatrixStack, pAgeInTicks, pRotationYaw, pPartialTicks); + } +} diff --git a/common/src/main/java/org/vivecraft/utils/Debug.java b/common/src/main/java/org/vivecraft/client/utils/Debug.java similarity index 95% rename from common/src/main/java/org/vivecraft/utils/Debug.java rename to common/src/main/java/org/vivecraft/client/utils/Debug.java index 24f574cb0..c7ec7ee26 100644 --- a/common/src/main/java/org/vivecraft/utils/Debug.java +++ b/common/src/main/java/org/vivecraft/client/utils/Debug.java @@ -1,6 +1,6 @@ -package org.vivecraft.utils; +package org.vivecraft.client.utils; -import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.Tesselator; @@ -13,8 +13,8 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import org.vivecraft.utils.math.Quaternion; -import org.vivecraft.utils.math.Vector3; +import org.vivecraft.common.utils.math.Quaternion; +import org.vivecraft.common.utils.math.Vector3; public class Debug { @@ -188,10 +188,10 @@ public void render(float partialTicks, long finishTimeNano) double d1 = player.yOld + (player.getY() - player.yOld) * (double)partialTicks; double d2 = player.zOld + (player.getZ() - player.zOld) * (double)partialTicks; // GlStateManager.lineWidth(5.0F); - GlStateManager._disableTexture(); + RenderSystem.disableTexture(); //GlStateManager._disableLighting(); - GlStateManager._depthMask(false); - GlStateManager._disableDepthTest(); + RenderSystem.depthMask(false); + RenderSystem.disableDepthTest(); Tesselator tesselator = Tesselator.getInstance(); BufferBuilder bufferbuilder = tesselator.getBuilder(); //bufferbuilder.begin(3, DefaultVertexFormat.POSITION_COLOR); @@ -205,10 +205,10 @@ public void render(float partialTicks, long finishTimeNano) } tesselator.end(); - GlStateManager._depthMask(true); - GlStateManager._enableTexture(); + RenderSystem.depthMask(true); + RenderSystem.enableTexture(); //GlStateManager._enableLighting(); - GlStateManager._enableDepthTest(); + RenderSystem.enableDepthTest(); if (!this.manualClearing) { diff --git a/common/src/main/java/org/vivecraft/utils/LangHelper.java b/common/src/main/java/org/vivecraft/client/utils/LangHelper.java similarity index 73% rename from common/src/main/java/org/vivecraft/utils/LangHelper.java rename to common/src/main/java/org/vivecraft/client/utils/LangHelper.java index 8df33bb8e..06a6f033b 100644 --- a/common/src/main/java/org/vivecraft/utils/LangHelper.java +++ b/common/src/main/java/org/vivecraft/client/utils/LangHelper.java @@ -1,11 +1,4 @@ -package org.vivecraft.utils; - -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.StringEscapeUtils; +package org.vivecraft.client.utils; import net.minecraft.client.resources.language.I18n; diff --git a/common/src/main/java/org/vivecraft/client/utils/RenderLayerTypes.java b/common/src/main/java/org/vivecraft/client/utils/RenderLayerTypes.java new file mode 100644 index 000000000..95c39ccee --- /dev/null +++ b/common/src/main/java/org/vivecraft/client/utils/RenderLayerTypes.java @@ -0,0 +1,15 @@ +package org.vivecraft.client.utils; + +/** + * part of the hacky way, to copy RenderLayers from the regular PlayerRenderer, to the VRPlayerRenderer + */ +public class RenderLayerTypes { + + // cant put that inside the other class, because of Mixin + public enum LayerType { + PARENT_ONLY, + PARENT_MODELSET, + PARENT_MODEL_MODEL, + OTHER + } +} diff --git a/common/src/main/java/org/vivecraft/client/utils/UpdateChecker.java b/common/src/main/java/org/vivecraft/client/utils/UpdateChecker.java new file mode 100644 index 000000000..57c3113c1 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client/utils/UpdateChecker.java @@ -0,0 +1,142 @@ +package org.vivecraft.client.utils; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.mojang.logging.LogUtils; +import net.minecraft.SharedConstants; +import org.vivecraft.client.Xplat; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.*; +import java.util.stream.Collectors; + +public class UpdateChecker { + + public static boolean hasUpdate = false; + + public static String changelog = ""; + + public static String newestVersion = ""; + + public static boolean checkForUpdates() { + System.out.println("Checking for Vivecraft Updates"); + try { + String apiURL = "https://api.modrinth.com/v2/project/vivecraft/version?loaders=[%22" + Xplat.getModloader() + "%22]&game_versions=[%22" + SharedConstants.VERSION_STRING + "%22]"; + HttpURLConnection conn = (HttpURLConnection) new URL(apiURL).openConnection(); + // 10 seconds read and connect timeout + conn.setConnectTimeout(10000); + conn.setReadTimeout(10000); + conn.setRequestProperty("Accept", "application/json,*/*"); + conn.connect(); + + if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) { + LogUtils.getLogger().error("Error " + conn.getResponseCode() + " fetching Vivecraft updates"); + return false; + } + + JsonElement j = JsonParser.parseString(inputStreamToString(conn.getInputStream())); + + List versions = new LinkedList<>(); + + if (j.isJsonArray()) { + for(JsonElement element : j.getAsJsonArray()) { + if (element.isJsonObject()) { + JsonObject obj = element.getAsJsonObject(); + versions.add( + new Version(obj.get("name").getAsString(), + obj.get("version_number").getAsString(), + obj.get("changelog").getAsString())); + } + } + } + // sort the versions, modrinth doesn't guarantee them to be sorted. + Collections.sort(versions); + + String currentVersionNumber = Xplat.getModVersion() + "-" +Xplat.getModloader(); + Version current = new Version(currentVersionNumber,currentVersionNumber,""); + + for (Version v : versions) { + if (current.compareTo(v) > 0) { + changelog += "§a"+v.fullVersion+"§r" + ": \n" + v.changelog + "\n\n"; + if (newestVersion.isEmpty()) { + newestVersion = v.fullVersion; + } + hasUpdate = true; + } + } + // no carriage returns please + changelog = changelog.replaceAll("\\r", ""); + if (hasUpdate) { + LogUtils.getLogger().info("Vivecraft update found: " + newestVersion); + } + } catch (IOException e) { + e.printStackTrace(); + } + return hasUpdate; + } + + private static String inputStreamToString(InputStream inputStream) { + return new BufferedReader(new InputStreamReader(inputStream)) + .lines().collect(Collectors.joining("\n")); + } + + private static class Version implements Comparable{ + + public String fullVersion; + + public String changelog; + + public int major; + public int minor; + public int patch; + int alpha = 0; + int beta = 0; + boolean featureTest = false; + + public Version(String version, String version_number, String changelog) { + this.fullVersion = version; + this.changelog = changelog; + String[] parts = version_number.split("-"); + if (parts.length > 3) { + // prerelease + if (parts[2].matches("a\\d+")) { + alpha = Integer.parseInt(parts[2].replaceAll("\\D+","")); + } else if (parts[2].matches("b\\d+\"")) { + beta = Integer.parseInt(parts[2].replaceAll("\\D+", "")); + } else { + featureTest = true; + } + } + // account for old version, without MC version prefix + int index = parts.length > 1 ? 1 : 0; + String[] ints = parts[index].split("\\."); + // remove all letters, since stupid me put a letter in one version + major = Integer.parseInt(ints[0].replaceAll("\\D+", "")); + minor = Integer.parseInt(ints[1].replaceAll("\\D+", "")); + patch = Integer.parseInt(ints[2].replaceAll("\\D+", "")); + } + + @Override + public int compareTo(UpdateChecker.Version o) { + long result = this.compareNumber() - o.compareNumber(); + if (result < 0) { + return 1; + } else if (result == 0L) { + return 0; + } + return -1; + } + + // two digits per segment, should be enough right? + private long compareNumber() { + return alpha + beta * 100L + (alpha + beta == 0 || featureTest ? 1000L : 0L) + patch * 100000L + minor * 10000000L + major * 1000000000L; + } + } + +} diff --git a/common/src/main/java/org/vivecraft/utils/Utils.java b/common/src/main/java/org/vivecraft/client/utils/Utils.java similarity index 88% rename from common/src/main/java/org/vivecraft/utils/Utils.java rename to common/src/main/java/org/vivecraft/client/utils/Utils.java index afea1b66f..7e7f6407b 100644 --- a/common/src/main/java/org/vivecraft/utils/Utils.java +++ b/common/src/main/java/org/vivecraft/client/utils/Utils.java @@ -1,4 +1,4 @@ -package org.vivecraft.utils; +package org.vivecraft.client.utils; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; @@ -25,6 +25,8 @@ import java.util.List; import java.util.Optional; import java.util.Random; +import java.util.stream.Collectors; +import java.util.stream.Stream; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -32,23 +34,24 @@ import org.apache.commons.io.IOUtils; import org.apache.logging.log4j.LogManager; -import org.vivecraft.render.VRShaders; -import org.vivecraft.tweaker.LoaderUtils; -import org.vivecraft.utils.lwjgl.Matrix3f; -import org.vivecraft.utils.lwjgl.Matrix4f; -import org.vivecraft.utils.lwjgl.Vector2f; -import org.vivecraft.utils.lwjgl.Vector3f; -import org.vivecraft.utils.lwjgl.Vector4f; -import org.vivecraft.utils.math.Quaternion; -import org.vivecraft.utils.math.Vector2; -import org.vivecraft.utils.math.Vector3; +import org.lwjgl.openvr.HmdMatrix44; +import org.vivecraft.client.Xplat; +import org.vivecraft.client_vr.render.VRShaders; +import org.vivecraft.client_vr.utils.LoaderUtils; +import org.vivecraft.common.utils.math.Quaternion; +import org.vivecraft.common.utils.math.Vector2; +import org.vivecraft.common.utils.math.Vector3; +import org.vivecraft.common.utils.lwjgl.Matrix3f; +import org.vivecraft.common.utils.lwjgl.Matrix4f; +import org.vivecraft.common.utils.lwjgl.Vector2f; +import org.vivecraft.common.utils.lwjgl.Vector3f; +import org.vivecraft.common.utils.lwjgl.Vector4f; import com.google.common.base.Charsets; import com.google.common.collect.Lists; import com.google.common.io.Files; import com.mojang.blaze3d.pipeline.RenderTarget; -import jopenvr.HmdMatrix44_t; import net.minecraft.ChatFormatting; import net.minecraft.client.ComponentCollector; import net.minecraft.client.Minecraft; @@ -102,7 +105,7 @@ public static Vector3 convertToOVRVector(Vec3 vector) return new Vector3((float)vector.x, (float)vector.y, (float)vector.z); } - public static Matrix4f convertOVRMatrix(org.vivecraft.utils.math.Matrix4f matrix) + public static Matrix4f convertOVRMatrix(org.vivecraft.common.utils.math.Matrix4f matrix) { Matrix4f matrix4f = new Matrix4f(); matrix4f.m00 = matrix.M[0][0]; @@ -125,11 +128,11 @@ public static Matrix4f convertOVRMatrix(org.vivecraft.utils.math.Matrix4f matrix return matrix4f; } - public static org.vivecraft.utils.math.Matrix4f convertToOVRMatrix(Matrix4f matrixIn) + public static org.vivecraft.common.utils.math.Matrix4f convertToOVRMatrix(Matrix4f matrixIn) { Matrix4f matrix4f = new Matrix4f(); matrixIn.transpose(matrix4f); - org.vivecraft.utils.math.Matrix4f matrix4f1 = new org.vivecraft.utils.math.Matrix4f(); + org.vivecraft.common.utils.math.Matrix4f matrix4f1 = new org.vivecraft.common.utils.math.Matrix4f(); matrix4f1.M[0][0] = matrix4f.m00; matrix4f1.M[0][1] = matrix4f.m01; matrix4f1.M[0][2] = matrix4f.m02; @@ -203,6 +206,11 @@ public static Vector3f directionFromMatrix(Matrix4f matrix, float x, float y, fl public static void wordWrap(String in, int length, ArrayList wrapped) { + // can't wrap with length 0, so return the original string + if (length == 0) { + wrapped.add(in); + return; + } String s = "\n"; boolean flag = false; in = in.replace("\r", ""); @@ -454,22 +462,39 @@ public static void unpackNatives(String directory) } System.out.println("Unpacking " + directory + " natives..."); - ZipFile zipfile = LoaderUtils.getVivecraftZip(); - Enumeration enumeration = zipfile.entries(); - while (enumeration.hasMoreElements()) + Path jarPath = Xplat.getJarPath(); + boolean didExtractSomething = false; + try (Stream natives = java.nio.file.Files.list(jarPath.resolve("natives/" + directory))) { - ZipEntry zipentry = enumeration.nextElement(); - - if (zipentry.getName().startsWith("natives/" + directory)) + for (Path file : natives.collect(Collectors.toCollection(ArrayList::new))) { - String s = Paths.get(zipentry.getName()).getFileName().toString(); - System.out.println(s); - writeStreamToFile(zipfile.getInputStream(zipentry), new File("openvr/" + directory + "/" + s)); + didExtractSomething = true; + System.out.println(file); + java.nio.file.Files.copy(file, new File("openvr/" + directory + "/" + file.getFileName()).toPath(), java.nio.file.StandardCopyOption.REPLACE_EXISTING); } + } catch (IOException e) + { + System.out.println("Failed to unpack natives from jar"); } + if (!didExtractSomething) { + ZipFile zipfile = LoaderUtils.getVivecraftZip(); + Enumeration enumeration = zipfile.entries(); + + while (enumeration.hasMoreElements()) + { + ZipEntry zipentry = enumeration.nextElement(); - zipfile.close(); + if (zipentry.getName().startsWith("natives/" + directory)) + { + String s = Paths.get(zipentry.getName()).getFileName().toString(); + System.out.println(s); + writeStreamToFile(zipfile.getInputStream(zipentry), new File("openvr/" + directory + "/" + s)); + } + } + + zipfile.close(); + } } catch (Exception exception1) { @@ -880,25 +905,25 @@ public static void printStackIfContainsClass(String className) } } - public static com.mojang.math.Matrix4f Matrix4fFromOpenVR(HmdMatrix44_t in) + public static com.mojang.math.Matrix4f Matrix4fFromOpenVR(HmdMatrix44 in) { com.mojang.math.Matrix4f matrix4f = new com.mojang.math.Matrix4f(); - matrix4f.m00 = in.m[0]; - matrix4f.m01 = in.m[1]; - matrix4f.m02 = in.m[2]; - matrix4f.m03 = in.m[3]; - matrix4f.m10 = in.m[4]; - matrix4f.m11 = in.m[5]; - matrix4f.m12 = in.m[6]; - matrix4f.m13 = in.m[7]; - matrix4f.m20 = in.m[8]; - matrix4f.m21 = in.m[9]; - matrix4f.m22 = in.m[10]; - matrix4f.m23 = in.m[11]; - matrix4f.m30 = in.m[12]; - matrix4f.m31 = in.m[13]; - matrix4f.m32 = in.m[14]; - matrix4f.m33 = in.m[15]; + matrix4f.m00 = in.m(0); + matrix4f.m01 = in.m(1); + matrix4f.m02 = in.m(2); + matrix4f.m03 = in.m(3); + matrix4f.m10 = in.m(4); + matrix4f.m11 = in.m(5); + matrix4f.m12 = in.m(6); + matrix4f.m13 = in.m(7); + matrix4f.m20 = in.m(8); + matrix4f.m21 = in.m(9); + matrix4f.m22 = in.m(10); + matrix4f.m23 = in.m(11); + matrix4f.m30 = in.m(12); + matrix4f.m31 = in.m(13); + matrix4f.m32 = in.m(14); + matrix4f.m33 = in.m(15); return matrix4f; } @@ -977,26 +1002,26 @@ else if (m11 > m22) return quaternion; } - public static org.vivecraft.utils.math.Matrix4f rotationXMatrix(float angle) + public static org.vivecraft.common.utils.math.Matrix4f rotationXMatrix(float angle) { float f = (float)Math.sin((double)angle); float f1 = (float)Math.cos((double)angle); - return new org.vivecraft.utils.math.Matrix4f(1.0F, 0.0F, 0.0F, 0.0F, f1, -f, 0.0F, f, f1); + return new org.vivecraft.common.utils.math.Matrix4f(1.0F, 0.0F, 0.0F, 0.0F, f1, -f, 0.0F, f, f1); } - public static org.vivecraft.utils.math.Matrix4f rotationZMatrix(float angle) + public static org.vivecraft.common.utils.math.Matrix4f rotationZMatrix(float angle) { float f = (float)Math.sin((double)angle); float f1 = (float)Math.cos((double)angle); - return new org.vivecraft.utils.math.Matrix4f(f1, -f, 0.0F, f, f1, 0.0F, 0.0F, 0.0F, 1.0F); + return new org.vivecraft.common.utils.math.Matrix4f(f1, -f, 0.0F, f, f1, 0.0F, 0.0F, 0.0F, 1.0F); } - public static Vector3 convertMatrix4ftoTranslationVector(org.vivecraft.utils.math.Matrix4f mat) + public static Vector3 convertMatrix4ftoTranslationVector(org.vivecraft.common.utils.math.Matrix4f mat) { return new Vector3(mat.M[0][3], mat.M[1][3], mat.M[2][3]); } - public static void Matrix4fSet(org.vivecraft.utils.math.Matrix4f mat, float m11, float m12, float m13, float m14, float m21, float m22, float m23, float m24, float m31, float m32, float m33, float m34, float m41, float m42, float m43, float m44) + public static void Matrix4fSet(org.vivecraft.common.utils.math.Matrix4f mat, float m11, float m12, float m13, float m14, float m21, float m22, float m23, float m24, float m31, float m32, float m33, float m34, float m41, float m42, float m43, float m44) { mat.M[0][0] = m11; mat.M[0][1] = m12; @@ -1016,7 +1041,7 @@ public static void Matrix4fSet(org.vivecraft.utils.math.Matrix4f mat, float m11, mat.M[3][3] = m44; } - public static void Matrix4fCopy(org.vivecraft.utils.math.Matrix4f source, org.vivecraft.utils.math.Matrix4f dest) + public static void Matrix4fCopy(org.vivecraft.common.utils.math.Matrix4f source, org.vivecraft.common.utils.math.Matrix4f dest) { dest.M[0][0] = source.M[0][0]; dest.M[0][1] = source.M[0][1]; @@ -1036,7 +1061,7 @@ public static void Matrix4fCopy(org.vivecraft.utils.math.Matrix4f source, org.vi dest.M[3][3] = source.M[3][3]; } - public static org.vivecraft.utils.math.Matrix4f Matrix4fSetIdentity(org.vivecraft.utils.math.Matrix4f mat) + public static org.vivecraft.common.utils.math.Matrix4f Matrix4fSetIdentity(org.vivecraft.common.utils.math.Matrix4f mat) { mat.M[0][0] = mat.M[1][1] = mat.M[2][2] = mat.M[3][3] = 1.0F; mat.M[0][1] = mat.M[1][0] = mat.M[2][3] = mat.M[3][1] = 0.0F; diff --git a/common/src/main/java/org/vivecraft/utils/math/BezierCurve.java b/common/src/main/java/org/vivecraft/client/utils/math/BezierCurve.java similarity index 94% rename from common/src/main/java/org/vivecraft/utils/math/BezierCurve.java rename to common/src/main/java/org/vivecraft/client/utils/math/BezierCurve.java index 66661f458..85d88bd8e 100644 --- a/common/src/main/java/org/vivecraft/utils/math/BezierCurve.java +++ b/common/src/main/java/org/vivecraft/client/utils/math/BezierCurve.java @@ -1,6 +1,6 @@ -package org.vivecraft.utils.math; +package org.vivecraft.client.utils.math; -import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.Tesselator; @@ -84,9 +84,9 @@ public void render(int vertexCount, Color c, float partialTicks) double d0 = player.xOld + (player.getX() - player.xOld) * (double)partialTicks; double d1 = player.yOld + (player.getY() - player.yOld) * (double)partialTicks; double d2 = player.zOld + (player.getZ() - player.zOld) * (double)partialTicks; - GlStateManager._disableTexture(); + RenderSystem.disableTexture(); //GlStateManager._disableLighting(); - GlStateManager._depthMask(false); + RenderSystem.depthMask(false); Tesselator tesselator = Tesselator.getInstance(); BufferBuilder bufferbuilder = tesselator.getBuilder(); bufferbuilder.begin(Mode.LINES, DefaultVertexFormat.POSITION_COLOR); @@ -99,8 +99,8 @@ public void render(int vertexCount, Color c, float partialTicks) tesselator.end(); //GlStateManager._enableLighting(); - GlStateManager._enableTexture(); - GlStateManager._depthMask(true); + RenderSystem.enableTexture(); + RenderSystem.depthMask(true); } void renderVertex(BufferBuilder buffer, Vec3 vert, Color color, double offX, double offY, double offZ) diff --git a/common/src/main/java/org/vivecraft/api/BlockTags.java b/common/src/main/java/org/vivecraft/client_vr/BlockTags.java similarity index 94% rename from common/src/main/java/org/vivecraft/api/BlockTags.java rename to common/src/main/java/org/vivecraft/client_vr/BlockTags.java index 9fcb093df..48392e4f0 100644 --- a/common/src/main/java/org/vivecraft/api/BlockTags.java +++ b/common/src/main/java/org/vivecraft/client_vr/BlockTags.java @@ -1,4 +1,4 @@ -package org.vivecraft.api; +package org.vivecraft.client_vr; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; diff --git a/common/src/main/java/org/vivecraft/ClientDataHolder.java b/common/src/main/java/org/vivecraft/client_vr/ClientDataHolderVR.java similarity index 53% rename from common/src/main/java/org/vivecraft/ClientDataHolder.java rename to common/src/main/java/org/vivecraft/client_vr/ClientDataHolderVR.java index 2a21f17e6..9455ccf79 100644 --- a/common/src/main/java/org/vivecraft/ClientDataHolder.java +++ b/common/src/main/java/org/vivecraft/client_vr/ClientDataHolderVR.java @@ -1,38 +1,19 @@ -package org.vivecraft; - -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Deque; -import java.util.List; - -import org.vivecraft.api.ErrorHelper; -import org.vivecraft.gameplay.VRPlayer; -import org.vivecraft.gameplay.trackers.BackpackTracker; -import org.vivecraft.gameplay.trackers.BowTracker; -import org.vivecraft.gameplay.trackers.CameraTracker; -import org.vivecraft.gameplay.trackers.ClimbTracker; -import org.vivecraft.gameplay.trackers.CrawlTracker; -import org.vivecraft.gameplay.trackers.EatingTracker; -import org.vivecraft.gameplay.trackers.HorseTracker; -import org.vivecraft.gameplay.trackers.InteractTracker; -import org.vivecraft.gameplay.trackers.JumpTracker; -import org.vivecraft.gameplay.trackers.RowTracker; -import org.vivecraft.gameplay.trackers.RunTracker; -import org.vivecraft.gameplay.trackers.SneakTracker; -import org.vivecraft.gameplay.trackers.SwimTracker; -import org.vivecraft.gameplay.trackers.SwingTracker; -import org.vivecraft.gameplay.trackers.TeleportTracker; -import org.vivecraft.gameplay.trackers.VehicleTracker; -import org.vivecraft.provider.MCVR; -import org.vivecraft.provider.VRRenderer; -import org.vivecraft.render.RenderPass; -import org.vivecraft.settings.VRSettings; +package org.vivecraft.client_vr; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.model.ModelResourceLocation; -import net.minecraft.client.sounds.SoundEngine; +import org.vivecraft.client_vr.gameplay.VRPlayer; +import org.vivecraft.client_vr.gameplay.trackers.*; +import org.vivecraft.client_vr.menuworlds.MenuWorldRenderer; +import org.vivecraft.client_vr.provider.MCVR; +import org.vivecraft.client_vr.provider.VRRenderer; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client_vr.settings.VRSettings; + +import java.util.ArrayList; +import java.util.List; -public class ClientDataHolder { +public class ClientDataHolderVR { public static boolean kiosk; public static boolean ismainhand; @@ -42,12 +23,12 @@ public class ClientDataHolder { public static ModelResourceLocation thirdPersonCameraModel = new ModelResourceLocation("vivecraft:camcorder"); public static ModelResourceLocation thirdPersonCameraDisplayModel = new ModelResourceLocation("vivecraft:camcorder_display"); public static List hrtfList = new ArrayList<>(); - private static ClientDataHolder INSTANCE; - public final float PIOVER180 = ((float) Math.PI / 180F); - //public String minecriftVerString; Common + private static ClientDataHolderVR INSTANCE; + public VRPlayer vrPlayer; public MCVR vr; public VRRenderer vrRenderer; + public MenuWorldRenderer menuWorldRenderer; public BackpackTracker backpackTracker = new BackpackTracker(Minecraft.getInstance(), this); public BowTracker bowTracker = new BowTracker(Minecraft.getInstance(), this); public SwimTracker swimTracker = new SwimTracker(Minecraft.getInstance(), this); @@ -61,38 +42,14 @@ public class ClientDataHolder { public SwingTracker swingTracker = new SwingTracker(Minecraft.getInstance(), this); public HorseTracker horseTracker = new HorseTracker(Minecraft.getInstance(), this); public VehicleTracker vehicleTracker = new VehicleTracker(Minecraft.getInstance(), this); - //public PhysicalGuiManager physicalGuiManager = new PhysicalGuiManager( Minecraft.getInstance()); public InteractTracker interactTracker = new InteractTracker(Minecraft.getInstance(), this); public CrawlTracker crawlTracker = new CrawlTracker(Minecraft.getInstance(), this); public CameraTracker cameraTracker = new CameraTracker(Minecraft.getInstance(), this); - public ThreadGroup backgroundThreadGroup = new ThreadGroup("background"); - public int lastShaderIndex = -1; - // public Field fieldHwnd = null; -// public Field fieldDisplay = null; -// public Field fieldWindow = null; -// public Field fieldResized = null; -// public Method fieldResizedMethod = null; public VRSettings vrSettings; - public long lastIntegratedServerLaunchCheck = 0L; public boolean integratedServerLaunchInProgress = false; public boolean grabScreenShot = false; - public boolean lastShowMouseNative = true; - public boolean enableWorldExport = false; - public SoundEngine sndManager = null; - //public MenuWorldRenderer menuWorldRenderer; - // private boolean firstInit = true; - public boolean showSplashScreen = true; - public long splashTimer1 = 0L; - public long splashTimer2 = 0L; - // private RenderTarget splash; -// private float splashFadeAlpha = 0.0F; - public Deque runTickTimeNanos = new ArrayDeque<>(); - public long medianRunTickTimeNanos = 0L; public long frameIndex = 0L; - public ErrorHelper errorHelper; public RenderPass currentPass; - // private boolean lastClick; - //public boolean resourcePacksChanged; SERVER public int tickCounter; public float watereffect; public float portaleffect; @@ -104,9 +61,15 @@ public class ClientDataHolder { boolean mirrorNotifyClear; long mirroNotifyLen; - public static ClientDataHolder getInstance() { + // showed chat notifications + public boolean showedUpdateNotification; + + public boolean skipStupidGoddamnChunkBoundaryClipping; + + + public static ClientDataHolderVR getInstance() { if (INSTANCE == null) { - INSTANCE = new ClientDataHolder(); + INSTANCE = new ClientDataHolderVR(); } return INSTANCE; } @@ -120,6 +83,4 @@ public void print(String string) { string = string.replace("\n", "\n[Minecrift] "); System.out.println("[Minecrift] " + string); } - - } diff --git a/common/src/main/java/org/vivecraft/api/ItemTags.java b/common/src/main/java/org/vivecraft/client_vr/ItemTags.java similarity index 92% rename from common/src/main/java/org/vivecraft/api/ItemTags.java rename to common/src/main/java/org/vivecraft/client_vr/ItemTags.java index 8e4901b26..f30ceaf38 100644 --- a/common/src/main/java/org/vivecraft/api/ItemTags.java +++ b/common/src/main/java/org/vivecraft/client_vr/ItemTags.java @@ -1,4 +1,4 @@ -package org.vivecraft.api; +package org.vivecraft.client_vr; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -8,6 +8,8 @@ public class ItemTags { public final static TagKey VIVECRAFT_ARROWS = tag("arrows"); + public final static TagKey VIVECRAFT_BRUSHES = tag("brushes"); + public final static TagKey VIVECRAFT_COMPASSES = tag("compasses"); public final static TagKey VIVECRAFT_CROSSBOWS = tag("crossbows"); diff --git a/common/src/main/java/org/vivecraft/MethodHolder.java b/common/src/main/java/org/vivecraft/client_vr/MethodHolder.java similarity index 67% rename from common/src/main/java/org/vivecraft/MethodHolder.java rename to common/src/main/java/org/vivecraft/client_vr/MethodHolder.java index 442cc920f..d43d2577f 100644 --- a/common/src/main/java/org/vivecraft/MethodHolder.java +++ b/common/src/main/java/org/vivecraft/client_vr/MethodHolder.java @@ -1,7 +1,7 @@ -package org.vivecraft; +package org.vivecraft.client_vr; import org.lwjgl.glfw.GLFW; -import org.vivecraft.provider.InputSimulator; +import org.vivecraft.client_vr.provider.InputSimulator; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Quaternion; @@ -17,11 +17,11 @@ public static boolean isKeyDown(int i) { public static void notifyMirror(String text, boolean clear, int lengthMs) { - ClientDataHolder clientDataHolder = ClientDataHolder.getInstance(); - clientDataHolder.mirroNotifyStart = System.currentTimeMillis(); - clientDataHolder.mirroNotifyLen = (long)lengthMs; - clientDataHolder.mirrorNotifyText = text; - clientDataHolder.mirrorNotifyClear = clear; + ClientDataHolderVR clientDataHolderVR = ClientDataHolderVR.getInstance(); + clientDataHolderVR.mirroNotifyStart = System.currentTimeMillis(); + clientDataHolderVR.mirroNotifyLen = (long)lengthMs; + clientDataHolderVR.mirrorNotifyText = text; + clientDataHolderVR.mirrorNotifyClear = clear; } public static void rotateDeg(PoseStack pose, float angle, float x, float y, float z) { diff --git a/common/src/main/java/org/vivecraft/ScreenUtils.java b/common/src/main/java/org/vivecraft/client_vr/ScreenUtils.java similarity index 84% rename from common/src/main/java/org/vivecraft/ScreenUtils.java rename to common/src/main/java/org/vivecraft/client_vr/ScreenUtils.java index 48d94d8ad..2601911d2 100644 --- a/common/src/main/java/org/vivecraft/ScreenUtils.java +++ b/common/src/main/java/org/vivecraft/client_vr/ScreenUtils.java @@ -1,4 +1,4 @@ -package org.vivecraft; +package org.vivecraft.client_vr; import java.util.ArrayList; import java.util.List; @@ -6,6 +6,7 @@ import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.Screen; +import org.vivecraft.client_vr.ClientDataHolderVR; public class ScreenUtils { @@ -39,13 +40,13 @@ public static AbstractWidget getSelectedButton(Screen screen, int x, int y) } public static int getBGFrom(){ - if(ClientDataHolder.getInstance().vrSettings==null || ClientDataHolder.getInstance().vrSettings.menuBackground) + if(ClientDataHolderVR.getInstance().vrSettings==null || ClientDataHolderVR.getInstance().vrSettings.menuBackground) return -1072689136; return 0; } public static int getBGTo(){ - if(ClientDataHolder.getInstance().vrSettings==null || ClientDataHolder.getInstance().vrSettings.menuBackground) + if(ClientDataHolderVR.getInstance().vrSettings==null || ClientDataHolderVR.getInstance().vrSettings.menuBackground) return -804253680; return 0; } diff --git a/common/src/main/java/org/vivecraft/api/VRData.java b/common/src/main/java/org/vivecraft/client_vr/VRData.java similarity index 88% rename from common/src/main/java/org/vivecraft/api/VRData.java rename to common/src/main/java/org/vivecraft/client_vr/VRData.java index b50445ae6..f428e5362 100644 --- a/common/src/main/java/org/vivecraft/api/VRData.java +++ b/common/src/main/java/org/vivecraft/client_vr/VRData.java @@ -1,11 +1,10 @@ -package org.vivecraft.api; +package org.vivecraft.client_vr; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.render.RenderPass; -import org.vivecraft.settings.VRSettings; -import org.vivecraft.utils.Utils; -import org.vivecraft.utils.math.Matrix4f; -import org.vivecraft.utils.math.Vector3; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.client.utils.Utils; +import org.vivecraft.common.utils.math.Matrix4f; +import org.vivecraft.common.utils.math.Vector3; import net.minecraft.client.Minecraft; import net.minecraft.world.phys.Vec3; @@ -29,8 +28,7 @@ public class VRData public VRData(Vec3 origin, float walkMul, float worldScale, float rotation) { - Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); this.origin = origin; this.worldScale = worldScale; this.rotation_radians = rotation; @@ -54,9 +52,9 @@ public VRData(Vec3 origin, float walkMul, float worldScale, float rotation) this.t1 = new VRDevicePose(this, matrix4f1, dataholder.vr.getAimSource(1).subtract(vec3).add(vec31), matrix4f1.transform(Vector3.forward()).toVector3d()); } - Matrix4f matrix4f2 = Matrix4f.multiply(Matrix4f.rotationY(-rotation), (new Matrix4f(ClientDataHolder.getInstance().cameraTracker.getRotation())).transposed()); + Matrix4f matrix4f2 = Matrix4f.multiply(Matrix4f.rotationY(-rotation), (new Matrix4f(ClientDataHolderVR.getInstance().cameraTracker.getRotation())).transposed()); float inverseWorldScale = 1.0F / worldScale; - this.cam = new VRData.VRDevicePose(this, matrix4f2, ClientDataHolder.getInstance().cameraTracker.getPosition().subtract(origin).yRot(-rotation).multiply(inverseWorldScale,inverseWorldScale,inverseWorldScale).subtract(vec3).add(vec31), matrix4f2.transform(Vector3.forward()).toVector3d()); + this.cam = new VRData.VRDevicePose(this, matrix4f2, ClientDataHolderVR.getInstance().cameraTracker.getPosition().subtract(origin).yRot(-rotation).multiply(inverseWorldScale,inverseWorldScale,inverseWorldScale).subtract(vec3).add(vec31), matrix4f2.transform(Vector3.forward()).toVector3d()); if (dataholder.vr.mrMovingCamActive) { @@ -64,7 +62,7 @@ public VRData(Vec3 origin, float walkMul, float worldScale, float rotation) } else { - VRSettings vrsettings = ClientDataHolder.getInstance().vrSettings; + VRSettings vrsettings = ClientDataHolderVR.getInstance().vrSettings; Matrix4f matrix4f3 = (new Matrix4f(vrsettings.vrFixedCamrotQuat)).transposed(); Vec3 vec32 = new Vec3((double)vrsettings.vrFixedCamposX, (double)vrsettings.vrFixedCamposY, (double)vrsettings.vrFixedCamposZ); Vec3 vec33 = matrix4f3.transform(Vector3.forward()).toVector3d(); @@ -75,7 +73,7 @@ public VRData(Vec3 origin, float walkMul, float worldScale, float rotation) private Matrix4f getSmoothedRotation(int c, float lenSec) { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); Vec3 vec3 = dataholder.vr.controllerHistory[c].averagePosition((double)lenSec); Vec3 vec31 = dataholder.vr.controllerForwardHistory[c].averagePosition((double)lenSec); @@ -96,7 +94,7 @@ public VRDevicePose getHand(int c) public float getBodyYaw() { - if (ClientDataHolder.getInstance().vrSettings.seated) + if (ClientDataHolderVR.getInstance().vrSettings.seated) { return this.hmd.getYaw(); } @@ -117,14 +115,14 @@ public float getBodyYaw() public float getFacingYaw() { - if (ClientDataHolder.getInstance().vrSettings.seated) + if (ClientDataHolderVR.getInstance().vrSettings.seated) { return this.hmd.getYaw(); } else { Vec3 vec3 = this.c1.getPosition().subtract(this.c0.getPosition()).normalize().yRot((-(float)Math.PI / 2F)); - return ClientDataHolder.getInstance().vrSettings.reverseHands ? (float)Math.toDegrees(Math.atan2(vec3.x, -vec3.z)) : (float)Math.toDegrees(Math.atan2(-vec3.x, vec3.z)); + return ClientDataHolderVR.getInstance().vrSettings.reverseHands ? (float)Math.toDegrees(Math.atan2(vec3.x, -vec3.z)) : (float)Math.toDegrees(Math.atan2(-vec3.x, vec3.z)); } } diff --git a/common/src/main/java/org/vivecraft/client_vr/VRState.java b/common/src/main/java/org/vivecraft/client_vr/VRState.java new file mode 100644 index 000000000..beb4e3873 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_vr/VRState.java @@ -0,0 +1,114 @@ +package org.vivecraft.client_vr; + +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.TranslatableComponent; +import org.lwjgl.glfw.GLFW; +import org.vivecraft.client_vr.gameplay.VRPlayer; +import org.vivecraft.client.gui.screens.ErrorScreen; +import org.vivecraft.client_vr.menuworlds.MenuWorldRenderer; +import org.vivecraft.client_vr.provider.nullvr.NullVR; +import org.vivecraft.client_vr.provider.openvr_lwjgl.MCOpenVR; +import org.vivecraft.client_vr.render.RenderConfigException; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.client_xr.render_pass.RenderPassManager; +import org.vivecraft.mod_compat_vr.optifine.OptifineHelper; + +public class VRState { + + public static boolean vrRunning = false; + public static boolean vrEnabled = false; + public static boolean vrInitialized = false; + + public static void initializeVR() { + if (vrInitialized) { + return; + } + try { + if (OptifineHelper.isOptifineLoaded() && OptifineHelper.isAntialiasing()) { + throw new RenderConfigException(new TranslatableComponent("vivecraft.messages.incompatiblesettings").getString(), new TranslatableComponent("vivecraft.messages.optifineaa")); + } + + vrInitialized = true; + ClientDataHolderVR dh = ClientDataHolderVR.getInstance(); + if (dh.vrSettings.stereoProviderPluginID == VRSettings.VRProvider.OPENVR) { + dh.vr = new MCOpenVR(Minecraft.getInstance(), dh); + } else { + dh.vr = new NullVR(Minecraft.getInstance(), dh); + } + if (!dh.vr.init()) { + throw new RenderConfigException("VR init Error", new TranslatableComponent("vivecraft.messages.rendersetupfailed", dh.vr.initStatus + "\nVR provider: " + dh.vr.getName())); + } + + dh.vrRenderer = dh.vr.createVRRenderer(); + dh.vrRenderer.lastGuiScale = Minecraft.getInstance().options.guiScale; + try { + dh.vrRenderer.setupRenderConfiguration(); + RenderPassManager.setVanillaRenderPass(); + } catch(RenderConfigException renderConfigException) { + throw new RenderConfigException("VR Render Error", new TranslatableComponent("vivecraft.messages.rendersetupfailed", renderConfigException.error + "\nVR provider: " + dh.vr.getName())); + } catch(Exception e) { + e.printStackTrace(); + } + + dh.vrPlayer = new VRPlayer(); + dh.vrPlayer.registerTracker(dh.backpackTracker); + dh.vrPlayer.registerTracker(dh.bowTracker); + dh.vrPlayer.registerTracker(dh.climbTracker); + dh.vrPlayer.registerTracker(dh.autoFood); + dh.vrPlayer.registerTracker(dh.jumpTracker); + dh.vrPlayer.registerTracker(dh.rowTracker); + dh.vrPlayer.registerTracker(dh.runTracker); + dh.vrPlayer.registerTracker(dh.sneakTracker); + dh.vrPlayer.registerTracker(dh.swimTracker); + dh.vrPlayer.registerTracker(dh.swingTracker); + dh.vrPlayer.registerTracker(dh.interactTracker); + dh.vrPlayer.registerTracker(dh.teleportTracker); + dh.vrPlayer.registerTracker(dh.horseTracker); + dh.vrPlayer.registerTracker(dh.vehicleTracker); + dh.vrPlayer.registerTracker(dh.crawlTracker); + dh.vrPlayer.registerTracker(dh.cameraTracker); + + dh.vr.postinit(); + + dh.menuWorldRenderer = new MenuWorldRenderer(); + + dh.menuWorldRenderer.init(); + } catch (RenderConfigException renderConfigException) { + vrEnabled = false; + destroyVR(true); + Minecraft.getInstance().setScreen(new ErrorScreen(renderConfigException.title, renderConfigException.error)); + } + } + + public static void startVR() { + GLFW.glfwSwapInterval(0); + } + + public static void destroyVR(boolean disableVRSetting) { + ClientDataHolderVR dh = ClientDataHolderVR.getInstance(); + if (dh.vr != null) { + dh.vr.destroy(); + } + dh.vr = null; + dh.vrPlayer = null; + if (dh.vrRenderer != null) { + dh.vrRenderer.destroy(); + } + dh.vrRenderer = null; + if (dh.menuWorldRenderer != null) { + dh.menuWorldRenderer.completeDestroy(); + dh.menuWorldRenderer = null; + } + vrEnabled = false; + vrInitialized = false; + vrRunning = false; + if (disableVRSetting) { + ClientDataHolderVR.getInstance().vrSettings.vrEnabled = false; + ClientDataHolderVR.getInstance().vrSettings.saveOptions(); + } + } + + public static void pauseVR() { + // GLFW.glfwSwapInterval(bl ? 1 : 0); + } +} diff --git a/common/src/main/java/org/vivecraft/client_vr/VRTextureTarget.java b/common/src/main/java/org/vivecraft/client_vr/VRTextureTarget.java new file mode 100644 index 000000000..50e095fdf --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_vr/VRTextureTarget.java @@ -0,0 +1,38 @@ +package org.vivecraft.client_vr; + +import com.mojang.blaze3d.pipeline.RenderTarget; +import com.mojang.blaze3d.systems.RenderSystem; +import org.vivecraft.client.Xplat; +import org.vivecraft.client.extensions.RenderTargetExtension; + +public class VRTextureTarget extends RenderTarget { + + private final String name; + public VRTextureTarget(String name, int width, int height, boolean usedepth, boolean onMac, int texid, boolean depthtex, boolean linearFilter, boolean useStencil) { + super(usedepth); + this.name = name; + RenderSystem.assertOnGameThreadOrInit(); + ((RenderTargetExtension) this).setTextid(texid); + ((RenderTargetExtension) this).isLinearFilter(linearFilter); + ((RenderTargetExtension) this).setUseStencil(useStencil); + this.resize(width, height, onMac); + if (useStencil) { + Xplat.enableRenderTargetStencil(this); + } + this.setClearColor(0, 0, 0, 0); + } + + @Override + public String toString() { + StringBuilder stringbuilder = new StringBuilder(); + stringbuilder.append("\n"); + if (this.name != null) { + stringbuilder.append("Name: " + this.name).append("\n"); + } + stringbuilder.append("Size: " + this.viewWidth + " x " + this.viewHeight).append("\n"); + stringbuilder.append("FB ID: " + this.frameBufferId).append("\n"); + stringbuilder.append("Tex ID: " + this.colorTextureId).append("\n"); + return stringbuilder.toString(); + } + +} diff --git a/common/src/main/java/org/vivecraft/api/Vec3History.java b/common/src/main/java/org/vivecraft/client_vr/Vec3History.java similarity index 99% rename from common/src/main/java/org/vivecraft/api/Vec3History.java rename to common/src/main/java/org/vivecraft/client_vr/Vec3History.java index 9f76f1116..a7505fe8a 100644 --- a/common/src/main/java/org/vivecraft/api/Vec3History.java +++ b/common/src/main/java/org/vivecraft/client_vr/Vec3History.java @@ -1,4 +1,4 @@ -package org.vivecraft.api; +package org.vivecraft.client_vr; import java.util.LinkedList; import java.util.ListIterator; diff --git a/common/src/main/java/org/vivecraft/extensions/EntityRenderDispatcherExtension.java b/common/src/main/java/org/vivecraft/client_vr/extensions/EntityRenderDispatcherVRExtension.java similarity index 53% rename from common/src/main/java/org/vivecraft/extensions/EntityRenderDispatcherExtension.java rename to common/src/main/java/org/vivecraft/client_vr/extensions/EntityRenderDispatcherVRExtension.java index 26c90797a..e099bf568 100644 --- a/common/src/main/java/org/vivecraft/extensions/EntityRenderDispatcherExtension.java +++ b/common/src/main/java/org/vivecraft/client_vr/extensions/EntityRenderDispatcherVRExtension.java @@ -1,11 +1,11 @@ -package org.vivecraft.extensions; +package org.vivecraft.client_vr.extensions; import com.mojang.math.Quaternion; -import org.vivecraft.render.VRArmRenderer; +import org.vivecraft.client_vr.render.VRArmRenderer; import java.util.Map; -public interface EntityRenderDispatcherExtension { +public interface EntityRenderDispatcherVRExtension { Quaternion getCameraOrientationOffset(float offset); diff --git a/common/src/main/java/org/vivecraft/extensions/FrustumExtension.java b/common/src/main/java/org/vivecraft/client_vr/extensions/FrustumExtension.java similarity index 82% rename from common/src/main/java/org/vivecraft/extensions/FrustumExtension.java rename to common/src/main/java/org/vivecraft/client_vr/extensions/FrustumExtension.java index 4ea1034cb..f0c206b32 100644 --- a/common/src/main/java/org/vivecraft/extensions/FrustumExtension.java +++ b/common/src/main/java/org/vivecraft/client_vr/extensions/FrustumExtension.java @@ -1,4 +1,4 @@ -package org.vivecraft.extensions; +package org.vivecraft.client_vr.extensions; import net.minecraft.world.phys.AABB; diff --git a/common/src/main/java/org/vivecraft/extensions/GameRendererExtension.java b/common/src/main/java/org/vivecraft/client_vr/extensions/GameRendererExtension.java similarity index 75% rename from common/src/main/java/org/vivecraft/extensions/GameRendererExtension.java rename to common/src/main/java/org/vivecraft/client_vr/extensions/GameRendererExtension.java index de1c1fb9d..70b6f2606 100644 --- a/common/src/main/java/org/vivecraft/extensions/GameRendererExtension.java +++ b/common/src/main/java/org/vivecraft/client_vr/extensions/GameRendererExtension.java @@ -1,8 +1,8 @@ -package org.vivecraft.extensions; +package org.vivecraft.client_vr.extensions; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.world.entity.LivingEntity; -import org.vivecraft.render.RenderPass; +import org.vivecraft.client_vr.render.RenderPass; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Matrix4f; @@ -21,6 +21,8 @@ public interface GameRendererExtension { boolean isInWater(); boolean isInMenuRoom(); + + boolean willBeInMenuRoom(Screen newScreen); boolean isInPortal(); @@ -28,8 +30,6 @@ public interface GameRendererExtension { Vec3 getCrossVec(); - void setMenuWorldFastTime(boolean b); - void setupClipPlanes(); float getMinClipDistance(); @@ -44,15 +44,14 @@ public interface GameRendererExtension { Matrix4f getThirdPassProjectionMatrix(); - void drawFramebufferNEW(float f, boolean pRenderLevel, PoseStack poseStack); - void drawEyeStencil(boolean flag1); float inBlock(); double getRveY(); - void renderVrFast(float f, boolean b, boolean menuhandright, boolean menuHandleft, PoseStack poseStack); + void renderVrFast(float partialTicks, boolean secondpass, boolean menuhandright, boolean menuHandleft, + PoseStack poseStack); void renderVRFabulous(float f, LevelRenderer levelRenderer, boolean menuhandright, boolean menuHandleft, PoseStack poseStack); @@ -61,4 +60,7 @@ public interface GameRendererExtension { void setupRVE(); void DrawScopeFB(PoseStack matrixStackIn, int i); + + void setShouldDrawScreen(boolean shouldDrawScreen); + void setShouldDrawGui(boolean shouldDrawGui); } diff --git a/common/src/main/java/org/vivecraft/extensions/GuiExtension.java b/common/src/main/java/org/vivecraft/client_vr/extensions/GuiExtension.java similarity index 77% rename from common/src/main/java/org/vivecraft/extensions/GuiExtension.java rename to common/src/main/java/org/vivecraft/client_vr/extensions/GuiExtension.java index 6c96be7cc..9a6b71c4c 100644 --- a/common/src/main/java/org/vivecraft/extensions/GuiExtension.java +++ b/common/src/main/java/org/vivecraft/client_vr/extensions/GuiExtension.java @@ -1,4 +1,4 @@ -package org.vivecraft.extensions; +package org.vivecraft.client_vr.extensions; public interface GuiExtension { diff --git a/common/src/main/java/org/vivecraft/extensions/ItemInHandRendererExtension.java b/common/src/main/java/org/vivecraft/client_vr/extensions/ItemInHandRendererExtension.java similarity index 78% rename from common/src/main/java/org/vivecraft/extensions/ItemInHandRendererExtension.java rename to common/src/main/java/org/vivecraft/client_vr/extensions/ItemInHandRendererExtension.java index 2e7c1cf60..4a514b905 100644 --- a/common/src/main/java/org/vivecraft/extensions/ItemInHandRendererExtension.java +++ b/common/src/main/java/org/vivecraft/client_vr/extensions/ItemInHandRendererExtension.java @@ -1,11 +1,11 @@ -package org.vivecraft.extensions; +package org.vivecraft.client_vr.extensions; import org.apache.commons.lang3.tuple.Triple; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; -import org.vivecraft.render.VRFirstPersonArmSwing; +import org.vivecraft.client_vr.render.VRFirstPersonArmSwing; public interface ItemInHandRendererExtension { @@ -13,7 +13,5 @@ public interface ItemInHandRendererExtension { boolean isInsideOpaqueBlock(Vec3 vec31); - void setXdist(float v); - void setSwingType(VRFirstPersonArmSwing interact); } diff --git a/common/src/main/java/org/vivecraft/extensions/LevelRendererExtension.java b/common/src/main/java/org/vivecraft/client_vr/extensions/LevelRendererExtension.java similarity index 80% rename from common/src/main/java/org/vivecraft/extensions/LevelRendererExtension.java rename to common/src/main/java/org/vivecraft/client_vr/extensions/LevelRendererExtension.java index 79be52a7f..3c55dfab7 100644 --- a/common/src/main/java/org/vivecraft/extensions/LevelRendererExtension.java +++ b/common/src/main/java/org/vivecraft/client_vr/extensions/LevelRendererExtension.java @@ -1,4 +1,4 @@ -package org.vivecraft.extensions; +package org.vivecraft.client_vr.extensions; import com.mojang.blaze3d.pipeline.RenderTarget; import net.minecraft.world.entity.Entity; @@ -11,4 +11,6 @@ public interface LevelRendererExtension { RenderTarget getAlphaSortVRUnoccludedFramebuffer(); RenderTarget getAlphaSortVRHandsFramebuffer(); + + void restoreVanillaPostChains(); } diff --git a/common/src/main/java/org/vivecraft/extensions/MinecraftExtension.java b/common/src/main/java/org/vivecraft/client_vr/extensions/MinecraftExtension.java similarity index 75% rename from common/src/main/java/org/vivecraft/extensions/MinecraftExtension.java rename to common/src/main/java/org/vivecraft/client_vr/extensions/MinecraftExtension.java index 05b97b4eb..2d9eb123e 100644 --- a/common/src/main/java/org/vivecraft/extensions/MinecraftExtension.java +++ b/common/src/main/java/org/vivecraft/client_vr/extensions/MinecraftExtension.java @@ -1,4 +1,4 @@ -package org.vivecraft.extensions; +package org.vivecraft.client_vr.extensions; public interface MinecraftExtension { diff --git a/common/src/main/java/org/vivecraft/extensions/OptionsExtension.java b/common/src/main/java/org/vivecraft/client_vr/extensions/OptionsExtension.java similarity index 59% rename from common/src/main/java/org/vivecraft/extensions/OptionsExtension.java rename to common/src/main/java/org/vivecraft/client_vr/extensions/OptionsExtension.java index d4a3c3244..212bcc1fd 100644 --- a/common/src/main/java/org/vivecraft/extensions/OptionsExtension.java +++ b/common/src/main/java/org/vivecraft/client_vr/extensions/OptionsExtension.java @@ -1,4 +1,4 @@ -package org.vivecraft.extensions; +package org.vivecraft.client_vr.extensions; public interface OptionsExtension { diff --git a/common/src/main/java/org/vivecraft/extensions/PlayerExtension.java b/common/src/main/java/org/vivecraft/client_vr/extensions/PlayerExtension.java similarity index 90% rename from common/src/main/java/org/vivecraft/extensions/PlayerExtension.java rename to common/src/main/java/org/vivecraft/client_vr/extensions/PlayerExtension.java index 152db5654..4213fcc44 100644 --- a/common/src/main/java/org/vivecraft/extensions/PlayerExtension.java +++ b/common/src/main/java/org/vivecraft/client_vr/extensions/PlayerExtension.java @@ -1,7 +1,7 @@ -package org.vivecraft.extensions; +package org.vivecraft.client_vr.extensions; import net.minecraft.client.player.LocalPlayer; -import org.vivecraft.render.VRFirstPersonArmSwing; +import org.vivecraft.client_vr.render.VRFirstPersonArmSwing; import net.minecraft.core.BlockPos; import net.minecraft.world.InteractionHand; diff --git a/common/src/main/java/org/vivecraft/gameplay/VRMovementStyle.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/VRMovementStyle.java similarity index 94% rename from common/src/main/java/org/vivecraft/gameplay/VRMovementStyle.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/VRMovementStyle.java index 9e1f22973..ca94b4f96 100644 --- a/common/src/main/java/org/vivecraft/gameplay/VRMovementStyle.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/VRMovementStyle.java @@ -1,6 +1,6 @@ -package org.vivecraft.gameplay; +package org.vivecraft.client_vr.gameplay; -import org.vivecraft.ClientDataHolder; +import org.vivecraft.client_vr.ClientDataHolderVR; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; @@ -29,10 +29,10 @@ public class VRMovementStyle public float endTeleportingSoundVolume; public boolean teleportOnRelease; public boolean arcAiming; - public ClientDataHolder dataholder; + public ClientDataHolderVR dataholder; private static final ResourceLocation beamPng = new ResourceLocation("textures/entity/endercrystal/endercrystal_beam.png"); - public VRMovementStyle(ClientDataHolder dataholder) + public VRMovementStyle(ClientDataHolderVR dataholder) { this.dataholder = dataholder; this.setStyle("Arc"); @@ -150,7 +150,7 @@ else if (requestedStyle == "Arc") else { flag = false; - ClientDataHolder.getInstance().printChatMessage("Unknown teleport style requested: " + requestedStyle); + ClientDataHolderVR.getInstance().printChatMessage("Unknown teleport style requested: " + requestedStyle); } if (flag && Minecraft.getInstance() != null && dataholder != null) diff --git a/common/src/main/java/org/vivecraft/gameplay/VRPlayer.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/VRPlayer.java similarity index 90% rename from common/src/main/java/org/vivecraft/gameplay/VRPlayer.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/VRPlayer.java index 1f1c578fc..5c77f12a5 100644 --- a/common/src/main/java/org/vivecraft/gameplay/VRPlayer.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/VRPlayer.java @@ -1,6 +1,5 @@ -package org.vivecraft.gameplay; +package org.vivecraft.client_vr.gameplay; -import net.minecraft.Util; import net.minecraft.client.Minecraft; import net.minecraft.client.particle.TerrainParticle; import net.minecraft.client.player.LocalPlayer; @@ -23,20 +22,22 @@ import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.PehkuiHelper; -import org.vivecraft.Xplat; -import org.vivecraft.api.ItemTags; -import org.vivecraft.extensions.GameRendererExtension; -import org.vivecraft.extensions.PlayerExtension; -import org.vivecraft.api.ClientNetworkHelper; -import org.vivecraft.api.VRData; -import org.vivecraft.gameplay.screenhandlers.GuiHandler; -import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; -import org.vivecraft.gameplay.screenhandlers.RadialHandler; -import org.vivecraft.settings.VRSettings; -import org.vivecraft.gameplay.trackers.Tracker; -import org.vivecraft.gameplay.trackers.VehicleTracker; +import org.vivecraft.client.VivecraftVRMod; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.common.VRServerPerms; +import org.vivecraft.client_vr.gameplay.trackers.Tracker; +import org.vivecraft.mod_compat_vr.pehkui.PehkuiHelper; +import org.vivecraft.client.Xplat; +import org.vivecraft.client_vr.ItemTags; +import org.vivecraft.client_vr.extensions.GameRendererExtension; +import org.vivecraft.client_vr.extensions.PlayerExtension; +import org.vivecraft.client.network.ClientNetworking; +import org.vivecraft.client_vr.VRData; +import org.vivecraft.client_vr.gameplay.screenhandlers.GuiHandler; +import org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler; +import org.vivecraft.client_vr.gameplay.screenhandlers.RadialHandler; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.client_vr.gameplay.trackers.VehicleTracker; import java.util.ArrayList; import java.util.Random; @@ -44,19 +45,19 @@ public class VRPlayer { Minecraft mc = Minecraft.getInstance(); - ClientDataHolder dh = ClientDataHolder.getInstance(); + ClientDataHolderVR dh = ClientDataHolderVR.getInstance(); public VRData vrdata_room_pre; public VRData vrdata_world_pre; public VRData vrdata_room_post; public VRData vrdata_world_post; public VRData vrdata_world_render; - private long errorPrintTime = Util.getMillis(); ArrayList trackers = new ArrayList<>(); - public float worldScale = ClientDataHolder.getInstance().vrSettings.overrides.getSetting(VRSettings.VrOptions.WORLD_SCALE).getFloat(); - private float rawWorldScale = ClientDataHolder.getInstance().vrSettings.overrides.getSetting(VRSettings.VrOptions.WORLD_SCALE).getFloat(); - private boolean noTeleportClient = true; + public float worldScale = ClientDataHolderVR.getInstance().vrSettings.overrides.getSetting(VRSettings.VrOptions.WORLD_SCALE).getFloat(); + private float rawWorldScale = ClientDataHolderVR.getInstance().vrSettings.overrides.getSetting(VRSettings.VrOptions.WORLD_SCALE).getFloat(); private boolean teleportOverride = false; - public int teleportWarningTimer = -1; + public boolean teleportWarning = false; + public boolean vrSwitchWarning = false; + public int chatWarningTimer = -1; public Vec3 roomOrigin = new Vec3(0.0D, 0.0D, 0.0D); private boolean isFreeMoveCurrent = true; public double wfMode = 0.0D; @@ -85,7 +86,7 @@ public VRData getVRDataWorld() public static VRPlayer get() { - return ClientDataHolder.getInstance().vrPlayer; + return ClientDataHolderVR.getInstance().vrPlayer; } public static Vec3 room_to_world_pos(Vec3 pos, VRData data) @@ -171,7 +172,7 @@ else if (this.worldScale < 0.025F) //minClip + player position indicator offset public void postTick() { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); VRData vrdata = new VRData(this.vrdata_world_pre.origin, dataholder.vrSettings.walkMultiplier, this.vrdata_world_pre.worldScale, this.vrdata_world_pre.rotation_radians); VRData vrdata1 = new VRData(this.vrdata_world_pre.origin, dataholder.vrSettings.walkMultiplier, this.worldScale, this.vrdata_world_pre.rotation_radians); Vec3 vec3 = vrdata1.hmd.getPosition().subtract(vrdata.hmd.getPosition()); @@ -183,14 +184,14 @@ public void postTick() this.vrdata_room_post = new VRData(new Vec3(0.0D, 0.0D, 0.0D), dataholder.vrSettings.walkMultiplier, 1.0F, 0.0F); this.vrdata_world_post = new VRData(this.roomOrigin, dataholder.vrSettings.walkMultiplier, this.worldScale, (float)Math.toRadians((double)dataholder.vrSettings.worldRotation)); this.doPermanantLookOverride(minecraft.player, this.vrdata_world_post); - ClientNetworkHelper.sendVRPlayerPositions(this); + ClientNetworking.sendVRPlayerPositions(this); this.onTick = false; } public void preRender(float par1) { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); float f = this.vrdata_world_post.worldScale * par1 + this.vrdata_world_pre.worldScale * (1.0F - par1); float f1 = this.vrdata_world_post.rotation_radians; float f2 = this.vrdata_world_pre.rotation_radians; @@ -251,7 +252,7 @@ public void snapRoomOriginToPlayerEntity(LocalPlayer player, boolean reset, bool if (player != null && player.position() != Vec3.ZERO) { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); if (dataholder.sneakTracker.sneakCounter <= 0) { @@ -363,7 +364,7 @@ public void doPlayerMoveInRoom(LocalPlayer player) else { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); if (player != null) { @@ -520,7 +521,7 @@ public boolean getFreeMove() public String toString() { - return "VRPlayer: \r\n \t origin: " + this.roomOrigin + "\r\n \t rotation: " + String.format("%.3f", ClientDataHolder.getInstance().vrSettings.worldRotation) + "\r\n \t scale: " + String.format("%.3f", this.worldScale) + "\r\n \t room_pre " + this.vrdata_room_pre + "\r\n \t world_pre " + this.vrdata_world_pre + "\r\n \t world_post " + this.vrdata_world_post + "\r\n \t world_render " + this.vrdata_world_render; + return "VRPlayer: \r\n \t origin: " + this.roomOrigin + "\r\n \t rotation: " + String.format("%.3f", ClientDataHolderVR.getInstance().vrSettings.worldRotation) + "\r\n \t scale: " + String.format("%.3f", this.worldScale) + "\r\n \t room_pre " + this.vrdata_room_pre + "\r\n \t world_pre " + this.vrdata_world_pre + "\r\n \t world_post " + this.vrdata_world_post + "\r\n \t world_render " + this.vrdata_world_render; } public Vec3 getRightClickLookOverride(Player entity, int c) @@ -604,9 +605,10 @@ public void doPermanantLookOverride(LocalPlayer entity, VRData data) else if (entity.isSprinting() && (entity.input.jumping || mc.options.keyJump.isDown()) || entity.isFallFlying() || entity.isSwimming() && entity.zza > 0.0F) { //Server-side movement - VRSettings vrsettings = this.dh.vrSettings; + VRSettings.FreeMove freeMoveType = entity.isFallFlying() && this.dh.vrSettings.vrFreeMoveFlyMode != VRSettings.FreeMove.AUTO ? this.dh.vrSettings.vrFreeMoveFlyMode : this.dh.vrSettings.vrFreeMoveMode; - if (this.dh.vrSettings.vrFreeMoveMode == VRSettings.FreeMove.CONTROLLER) + + if (freeMoveType == VRSettings.FreeMove.CONTROLLER) { entity.setYRot(data.getController(1).getYaw()); entity.setYHeadRot(entity.getYRot()); @@ -654,7 +656,7 @@ public HitResult rayTraceBlocksVR(VRData source, int controller, double blockRea public boolean isTeleportSupported() { - return !this.noTeleportClient; + return !VRServerPerms.INSTANCE.noTeleportClient; } public boolean isTeleportOverridden() @@ -664,7 +666,7 @@ public boolean isTeleportOverridden() public boolean isTeleportEnabled() { - boolean flag = !this.noTeleportClient || this.teleportOverride; + boolean flag = !VRServerPerms.INSTANCE.noTeleportClient || this.teleportOverride; if (this.dh.vrSettings.seated) { @@ -676,21 +678,15 @@ public boolean isTeleportEnabled() } } - public void setTeleportSupported(boolean supported) - { - this.noTeleportClient = !supported; - this.updateTeleportKeys(); - } - public void setTeleportOverride(boolean override) { this.teleportOverride = override; this.updateTeleportKeys(); } - private void updateTeleportKeys() + public void updateTeleportKeys() { - this.dh.vr.getInputAction(this.dh.vr.keyTeleport).setEnabled(this.isTeleportEnabled()); - this.dh.vr.getInputAction(this.dh.vr.keyTeleportFallback).setEnabled(!this.isTeleportEnabled()); + this.dh.vr.getInputAction(VivecraftVRMod.INSTANCE.keyTeleport).setEnabled(this.isTeleportEnabled()); + this.dh.vr.getInputAction(VivecraftVRMod.INSTANCE.keyTeleportFallback).setEnabled(!this.isTeleportEnabled()); } } diff --git a/common/src/main/java/org/vivecraft/gameplay/screenhandlers/GuiHandler.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/screenhandlers/GuiHandler.java similarity index 75% rename from common/src/main/java/org/vivecraft/gameplay/screenhandlers/GuiHandler.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/screenhandlers/GuiHandler.java index 4ea84802d..8046f6c7b 100644 --- a/common/src/main/java/org/vivecraft/gameplay/screenhandlers/GuiHandler.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/screenhandlers/GuiHandler.java @@ -1,20 +1,4 @@ -package org.vivecraft.gameplay.screenhandlers; - -import org.vivecraft.ClientDataHolder; -import org.vivecraft.extensions.GameRendererExtension; -import org.vivecraft.api.VRData; -import org.vivecraft.provider.ControllerType; -import org.vivecraft.provider.HandedKeyBinding; -import org.vivecraft.provider.InputSimulator; -import org.vivecraft.provider.openvr_jna.OpenVRUtil; -import org.vivecraft.settings.VRSettings; -import org.vivecraft.gameplay.VRPlayer; -import org.vivecraft.provider.MCVR; -import org.vivecraft.render.RenderPass; -import org.vivecraft.utils.Utils; -import org.vivecraft.utils.math.Matrix4f; -import org.vivecraft.utils.math.Quaternion; -import org.vivecraft.utils.math.Vector3; +package org.vivecraft.client_vr.gameplay.screenhandlers; import com.mojang.blaze3d.pipeline.RenderTarget; import com.mojang.blaze3d.vertex.PoseStack; @@ -24,27 +8,33 @@ import net.minecraft.client.gui.screens.ChatScreen; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.WinScreen; -import net.minecraft.client.gui.screens.inventory.AnvilScreen; -import net.minecraft.client.gui.screens.inventory.BeaconScreen; -import net.minecraft.client.gui.screens.inventory.BookEditScreen; -import net.minecraft.client.gui.screens.inventory.BrewingStandScreen; -import net.minecraft.client.gui.screens.inventory.ContainerScreen; -import net.minecraft.client.gui.screens.inventory.CraftingScreen; -import net.minecraft.client.gui.screens.inventory.DispenserScreen; -import net.minecraft.client.gui.screens.inventory.EnchantmentScreen; -import net.minecraft.client.gui.screens.inventory.FurnaceScreen; -import net.minecraft.client.gui.screens.inventory.HopperScreen; -import net.minecraft.client.gui.screens.inventory.ShulkerBoxScreen; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.SignEditScreen; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.HitResult; -import net.minecraft.world.phys.Vec2; -import net.minecraft.world.phys.Vec3; +import net.minecraft.client.gui.screens.inventory.BookEditScreen; +import net.minecraft.world.Container; +import net.minecraft.world.phys.*; + +import org.vivecraft.client_vr.VRData; +import org.vivecraft.client.utils.Utils; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.extensions.GameRendererExtension; +import org.vivecraft.client_vr.gameplay.VRPlayer; +import org.vivecraft.client_vr.provider.ControllerType; +import org.vivecraft.client_vr.provider.HandedKeyBinding; +import org.vivecraft.client_vr.provider.InputSimulator; +import org.vivecraft.client_vr.provider.MCVR; +import org.vivecraft.client_vr.provider.openvr_lwjgl.OpenVRUtil; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.common.utils.math.Matrix4f; +import org.vivecraft.common.utils.math.Quaternion; +import org.vivecraft.common.utils.math.Vector3; public class GuiHandler { public static Minecraft mc = Minecraft.getInstance(); - public static ClientDataHolder dh = ClientDataHolder.getInstance(); + public static ClientDataHolderVR dh = ClientDataHolderVR.getInstance(); static boolean lastPressedLeftClick; static boolean lastPressedRightClick; static boolean lastPressedMiddleClick; @@ -55,11 +45,12 @@ public class GuiHandler private static double controllerMouseY = -1.0D; public static boolean controllerMouseValid; public static int controllerMouseTicks; + public static boolean guiAppearOverBlockActive = false; public static float guiScale = 1.0F; public static float guiScaleApplied = 1.0F; public static Vec3 IPoint = new Vec3(0.0D, 0.0D, 0.0D); - public static Vec3 guiPos_room = new Vec3(0.0D, 0.0D, 0.0D); - public static Matrix4f guiRotation_room = new Matrix4f(); + public static Vec3 guiPos_room = null; + public static Matrix4f guiRotation_room = null; public static float hudScale = 1.0F; public static Vec3 hudPos_room = new Vec3(0.0D, 0.0D, 0.0D); public static Matrix4f hudRotation_room = new Matrix4f(); @@ -101,6 +92,35 @@ public boolean isPriorityOnController(ControllerType type) } }; public static RenderTarget guiFramebuffer = null; + public static int guiWidth = 1280; + public static int guiHeight = 720; + public static int guiScaleFactor = calculateScale(0, false, guiWidth, guiHeight); + public static int scaledWidth; + public static int scaledHeight; + + public static int calculateScale(int scaleIn, boolean forceUnicode, int framebufferWidth, int framebufferHeight) { + int j = 1; + + while(j != scaleIn && + j < framebufferWidth && + j < framebufferHeight && + framebufferWidth / (j + 1) >= 320 && + framebufferHeight / (j + 1) >= 240) { + ++j; + } + + if (forceUnicode && j % 2 != 0) { + ++j; + } + + int widthFloor = framebufferWidth / j; + scaledWidth = framebufferWidth / j > widthFloor ? widthFloor + 1 : widthFloor; + + int heightFloor = framebufferHeight / j; + scaledHeight = framebufferHeight / j > heightFloor ? heightFloor + 1 : heightFloor; + + return j; + } public static void processGui() { @@ -299,6 +319,10 @@ public static void processBindingsGui() public static void onScreenChanged(Screen previousGuiScreen, Screen newScreen, boolean unpressKeys) { + if (!VRState.vrRunning) { + return; + } + if (unpressKeys) { dh.vr.ignorePressesNextFrame = true; @@ -334,14 +358,16 @@ public static void onScreenChanged(Screen previousGuiScreen, Screen newScreen, b dh.vrSettings.worldRotation = 0.0F; } - boolean flag = mc.gameRenderer == null || ((GameRendererExtension) mc.gameRenderer).isInMenuRoom(); - flag = flag & (!dh.vrSettings.seated && !dh.vrSettings.menuAlwaysFollowFace); + // check if the new screen is meant to show the MenuRoom, instead of the current screen + boolean staticScreen = mc.gameRenderer == null || (((GameRendererExtension) mc.gameRenderer).willBeInMenuRoom(newScreen)); + staticScreen = staticScreen & (!dh.vrSettings.seated && !dh.vrSettings.menuAlwaysFollowFace); - if (flag) + if (staticScreen) { guiScale = 2.0F; float[] afloat = MCVR.get().getPlayAreaSize(); - guiPos_room = new Vec3(0.0D, (double)1.3F, (double)(-Math.max(afloat != null ? afloat[1] / 2.0F : 0.0F, 1.5F))); + // slight offset to center of the room, to prevent z fighting + guiPos_room = new Vec3(0.02D, (double)1.3F, (double)(-Math.max(afloat != null ? afloat[1] / 2.0F : 0.0F, 1.5F))); guiRotation_room = new Matrix4f(); guiRotation_room.M[0][0] = guiRotation_room.M[1][1] = guiRotation_room.M[2][2] = guiRotation_room.M[3][3] = 1.0F; guiRotation_room.M[0][1] = guiRotation_room.M[1][0] = guiRotation_room.M[2][3] = guiRotation_room.M[3][1] = 0.0F; @@ -352,29 +378,35 @@ public static void onScreenChanged(Screen previousGuiScreen, Screen newScreen, b { if (previousGuiScreen == null && newScreen != null || newScreen instanceof ChatScreen || newScreen instanceof BookEditScreen || newScreen instanceof SignEditScreen) { - boolean flag1 = newScreen instanceof CraftingScreen || newScreen instanceof ContainerScreen || newScreen instanceof ShulkerBoxScreen || newScreen instanceof HopperScreen || newScreen instanceof FurnaceScreen || newScreen instanceof BrewingStandScreen || newScreen instanceof BeaconScreen || newScreen instanceof DispenserScreen || newScreen instanceof EnchantmentScreen || newScreen instanceof AnvilScreen; - - if (flag1 && dh.vrSettings.guiAppearOverBlock && mc.hitResult != null && mc.hitResult.getType() == HitResult.Type.BLOCK) + // check if screen is a container screen + // and if the pointed at block is the same that was last interacted with + boolean isBlockScreen = newScreen instanceof AbstractContainerScreen + && mc.hitResult != null + && (mc.hitResult.getType() == HitResult.Type.BLOCK); + + // check if screen is a container screen + // and if the pointed at entity is the same that was last interacted with + boolean isEntityScreen = newScreen instanceof AbstractContainerScreen + && mc.hitResult instanceof EntityHitResult + && ((EntityHitResult) mc.hitResult).getEntity() instanceof Container; + + if (guiAppearOverBlockActive && (isBlockScreen || isEntityScreen) && dh.vrSettings.guiAppearOverBlock) { - BlockHitResult blockhitresult = (BlockHitResult)mc.hitResult; - Vec3 vec34 = new Vec3((double)((float)blockhitresult.getBlockPos().getX() + 0.5F), (double)blockhitresult.getBlockPos().getY(), (double)((float)blockhitresult.getBlockPos().getZ() + 0.5F)); - VRPlayer vrplayer = dh.vrPlayer; - Vec3 vec35 = VRPlayer.world_to_room_pos(vec34, dh.vrPlayer.vrdata_world_pre); - Vec3 vec36 = dh.vrPlayer.vrdata_room_pre.hmd.getPosition(); - double d0 = vec35.subtract(vec36).length(); - guiScale = (float)Math.sqrt(d0); - Vec3 vec37 = new Vec3(vec34.x, (double)blockhitresult.getBlockPos().getY() + 1.1D + (double)(0.5F * guiScale / 2.0F), vec34.z); - vrplayer = dh.vrPlayer; - guiPos_room = VRPlayer.world_to_room_pos(vec37, dh.vrPlayer.vrdata_world_pre); - Vector3 vector31 = new Vector3(); - vector31.setX((float)(guiPos_room.x - vec36.x)); - vector31.setY((float)(guiPos_room.y - vec36.y)); - vector31.setZ((float)(guiPos_room.z - vec36.z)); - float f2 = (float)Math.asin((double)(vector31.getY() / vector31.length())); - float f3 = (float)((double)(float)Math.PI + Math.atan2((double)vector31.getX(), (double)vector31.getZ())); - guiRotation_room = Matrix4f.rotationY(f3); - Matrix4f matrix4f1 = Utils.rotationXMatrix(f2); - guiRotation_room = Matrix4f.multiply(guiRotation_room, matrix4f1); + Vec3 sourcePos; + if (isEntityScreen) { + EntityHitResult entityHitResult = (EntityHitResult)mc.hitResult; + sourcePos = new Vec3(entityHitResult.getEntity().getX(), entityHitResult.getEntity().getY(), entityHitResult.getEntity().getZ()); + } else { + BlockHitResult blockHitResult = (BlockHitResult)mc.hitResult; + sourcePos = new Vec3(((float)blockHitResult.getBlockPos().getX() + 0.5F), blockHitResult.getBlockPos().getY(), ((float)blockHitResult.getBlockPos().getZ() + 0.5F)); + } + + Vec3 roomPos = VRPlayer.world_to_room_pos(sourcePos, dh.vrPlayer.vrdata_world_pre); + Vec3 hmdPos = dh.vrPlayer.vrdata_room_pre.hmd.getPosition(); + double distance = roomPos.subtract(hmdPos).length(); + guiScale = (float)Math.sqrt(distance); + Vec3 sourcePosWorld = new Vec3(sourcePos.x, sourcePos.y + 1.1D + (double)(0.5F * guiScale / 2.0F), sourcePos.z); + guiPos_room = VRPlayer.world_to_room_pos(sourcePosWorld, dh.vrPlayer.vrdata_world_pre); } else { @@ -389,26 +421,27 @@ else if (newScreen instanceof BookEditScreen || newScreen instanceof SignEditScr vec3 = new Vec3(0.0D, 0.25D, -2.0D); } - Vec3 vec31 = dh.vrPlayer.vrdata_room_pre.hmd.getPosition(); + Vec3 hmdPos = dh.vrPlayer.vrdata_room_pre.hmd.getPosition(); Vec3 vec32 = dh.vrPlayer.vrdata_room_pre.hmd.getCustomVector(vec3); - guiPos_room = new Vec3(vec32.x / 2.0D + vec31.x, vec32.y / 2.0D + vec31.y, vec32.z / 2.0D + vec31.z); + guiPos_room = new Vec3(vec32.x / 2.0D + hmdPos.x, vec32.y / 2.0D + hmdPos.y, vec32.z / 2.0D + hmdPos.z); - if (dh.vrSettings.physicalKeyboard && KeyboardHandler.Showing && guiPos_room.y < vec31.y + 0.2D) + if (dh.vrSettings.physicalKeyboard && KeyboardHandler.Showing && guiPos_room.y < hmdPos.y + 0.2D) { - guiPos_room = new Vec3(guiPos_room.x, vec31.y + 0.2D, guiPos_room.z); + guiPos_room = new Vec3(guiPos_room.x, hmdPos.y + 0.2D, guiPos_room.z); } - - Vec3 vec33 = dh.vrPlayer.vrdata_room_pre.hmd.getPosition(); - Vector3 vector3 = new Vector3(); - vector3.setX((float)(guiPos_room.x - vec33.x)); - vector3.setY((float)(guiPos_room.y - vec33.y)); - vector3.setZ((float)(guiPos_room.z - vec33.z)); - float f = (float)Math.asin((double)(vector3.getY() / vector3.length())); - float f1 = (float)((double)(float)Math.PI + Math.atan2((double)vector3.getX(), (double)vector3.getZ())); - guiRotation_room = Matrix4f.rotationY(f1); - Matrix4f matrix4f = Utils.rotationXMatrix(f); - guiRotation_room = Matrix4f.multiply(guiRotation_room, matrix4f); } + + // orient screen + Vec3 hmdPos = dh.vrPlayer.vrdata_room_pre.hmd.getPosition(); + Vector3 look = new Vector3(); + look.setX((float)(guiPos_room.x - hmdPos.x)); + look.setY((float)(guiPos_room.y - hmdPos.y)); + look.setZ((float)(guiPos_room.z - hmdPos.z)); + float pitch = (float)Math.asin((look.getY() / look.length())); + float yaw = (float)(Math.PI + Math.atan2(look.getX(), look.getZ())); + guiRotation_room = Matrix4f.rotationY(yaw); + Matrix4f tilt = Utils.rotationXMatrix(pitch); + guiRotation_room = Matrix4f.multiply(guiRotation_room, tilt); } KeyboardHandler.orientOverlay(newScreen != null); @@ -424,6 +457,11 @@ public static Vec3 applyGUIModelView(RenderPass currentPass, PoseStack pMatrixSt { //naughty mods! onScreenChanged((Screen)null, mc.screen, false); + } else if (mc.screen == null && guiPos_room != null) + { + //even naughtier mods! + // someone canceled the setScreen, so guiPos didn't get reset + onScreenChanged((Screen)null, null, false); } Vec3 guipos = guiPos_room; @@ -526,7 +564,7 @@ else if (dh.vrSettings.vrHudLockMode == VRSettings.HUDLock.WRIST) float f4 = ((GameRendererExtension) mc.gameRenderer).isInMenuRoom() ? 2.5F * dh.vrPlayer.vrdata_world_render.worldScale : dh.vrSettings.hudDistance; Vec3 vec39 = vec35.add(new Vec3(vec38.x * (double)f4, vec38.y * (double)f4, vec38.z * (double)f4)); Vec3 vec310 = new Vec3(vec39.x, vec39.y, vec39.z); - Matrix4f matrix4f3 = Matrix4f.rotationY(135.0F - f1); + Matrix4f matrix4f3 = Matrix4f.rotationY((float)Math.PI - f1); guirot = Matrix4f.multiply(matrix4f3, Matrix4f.rotationY(dh.vrPlayer.vrdata_world_render.rotation_radians)); VRPlayer vrplayer = dh.vrPlayer; guipos = VRPlayer.room_to_world_pos(vec310, dh.vrPlayer.vrdata_world_render); @@ -536,7 +574,17 @@ else if (dh.vrSettings.vrHudLockMode == VRSettings.HUDLock.WRIST) } //GL11.glMultMatrixf(dh.vrPlayer.vrdata_world_render.getEye(currentPass).getMatrix().toFloatBuffer()); - + + if (guipos == null) { + VRSettings.logger.error("guipos was null, how did that happen. vrRunning: {}", VRState.vrRunning); + new RuntimeException().printStackTrace(); + guiPos_room = new Vec3(0,0,0); + guipos = VRPlayer.room_to_world_pos(guiPos_room, dh.vrPlayer.vrdata_world_render); + guiRotation_room = new Matrix4f(); + guirot = new Matrix4f(); + guiScale = 1.0F; + } + Vec3 vec36 = guipos.subtract(vec3); pMatrixStack.translate(vec36.x, vec36.y, vec36.z); pMatrixStack.mulPoseMatrix(guirot.toMCMatrix()); diff --git a/common/src/main/java/org/vivecraft/gameplay/screenhandlers/KeyboardHandler.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/screenhandlers/KeyboardHandler.java similarity index 90% rename from common/src/main/java/org/vivecraft/gameplay/screenhandlers/KeyboardHandler.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/screenhandlers/KeyboardHandler.java index 6ff329c96..885c05290 100644 --- a/common/src/main/java/org/vivecraft/gameplay/screenhandlers/KeyboardHandler.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/screenhandlers/KeyboardHandler.java @@ -1,13 +1,13 @@ -package org.vivecraft.gameplay.screenhandlers; +package org.vivecraft.client_vr.gameplay.screenhandlers; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.provider.ControllerType; -import org.vivecraft.utils.lwjgl.Matrix4f; -import org.vivecraft.gui.GuiKeyboard; -import org.vivecraft.gui.PhysicalKeyboard; -import org.vivecraft.utils.Utils; -import org.vivecraft.utils.lwjgl.Vector3f; -import org.vivecraft.utils.math.Vector3; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.provider.ControllerType; +import org.vivecraft.common.utils.lwjgl.Matrix4f; +import org.vivecraft.client_vr.gui.GuiKeyboard; +import org.vivecraft.client_vr.gui.PhysicalKeyboard; +import org.vivecraft.client.utils.Utils; +import org.vivecraft.common.utils.lwjgl.Vector3f; +import org.vivecraft.common.utils.math.Vector3; import com.mojang.blaze3d.pipeline.RenderTarget; @@ -18,12 +18,12 @@ public class KeyboardHandler { public static Minecraft mc = Minecraft.getInstance(); - public static ClientDataHolder dh = ClientDataHolder.getInstance(); + public static ClientDataHolderVR dh = ClientDataHolderVR.getInstance(); public static boolean Showing = false; public static GuiKeyboard UI = new GuiKeyboard(); public static PhysicalKeyboard physicalKeyboard = new PhysicalKeyboard(); public static Vec3 Pos_room = new Vec3(0.0D, 0.0D, 0.0D); - public static org.vivecraft.utils.math.Matrix4f Rotation_room = new org.vivecraft.utils.math.Matrix4f(); + public static org.vivecraft.common.utils.math.Matrix4f Rotation_room = new org.vivecraft.common.utils.math.Matrix4f(); private static boolean lpl; private static boolean lps; private static boolean PointedL; @@ -36,7 +36,7 @@ public class KeyboardHandler public static boolean setOverlayShowing(boolean showingState) { - if (ClientDataHolder.kiosk) + if (ClientDataHolderVR.kiosk) { return false; } @@ -175,14 +175,14 @@ public static void orientOverlay(boolean guiRelative) vec31 = vec31.yRot((float)Math.toRadians((double)(-dh.vrPlayer.vrdata_room_pre.hmd.getYaw()))); Pos_room = new Vec3(vec3.x + vec31.x, vec3.y + vec31.y, vec3.z + vec31.z); float f = (float)Math.PI + (float)Math.toRadians((double)(-dh.vrPlayer.vrdata_room_pre.hmd.getYaw())); - Rotation_room = org.vivecraft.utils.math.Matrix4f.rotationY(f); - Rotation_room = org.vivecraft.utils.math.Matrix4f.multiply(Rotation_room, Utils.rotationXMatrix(2.5132742F)); + Rotation_room = org.vivecraft.common.utils.math.Matrix4f.rotationY(f); + Rotation_room = org.vivecraft.common.utils.math.Matrix4f.multiply(Rotation_room, Utils.rotationXMatrix(2.5132742F)); } else if (guiRelative && GuiHandler.guiRotation_room != null) { Matrix4f matrix4f1 = Utils.convertOVRMatrix(GuiHandler.guiRotation_room); Vec3 vec35 = new Vec3((double)matrix4f1.m10, (double)matrix4f1.m11, (double)matrix4f1.m12); - Vec3 vec37 = (new Vec3((double)matrix4f1.m20, (double)matrix4f1.m21, (double)matrix4f1.m22)).scale(0.25D); + Vec3 vec37 = (new Vec3((double)matrix4f1.m20, (double)matrix4f1.m21, (double)matrix4f1.m22)).scale(0.25D * GuiHandler.guiScale); vec35 = vec35.scale((double)0.8F); matrix4f.translate(new Vector3f((float)(GuiHandler.guiPos_room.x - vec35.x), (float)(GuiHandler.guiPos_room.y - vec35.y), (float)(GuiHandler.guiPos_room.z - vec35.z))); matrix4f.translate(new Vector3f((float)vec37.x, (float)vec37.y, (float)vec37.z)); @@ -207,7 +207,7 @@ else if (guiRelative && GuiHandler.guiRotation_room != null) vector3.setZ((float)(Pos_room.z - vec32.z)); float f1 = (float)Math.asin((double)(vector3.getY() / vector3.length())); float f2 = (float)((double)(float)Math.PI + Math.atan2((double)vector3.getX(), (double)vector3.getZ())); - Rotation_room = org.vivecraft.utils.math.Matrix4f.rotationY(f2); + Rotation_room = org.vivecraft.common.utils.math.Matrix4f.rotationY(f2); } } } diff --git a/common/src/main/java/org/vivecraft/gameplay/screenhandlers/RadialHandler.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/screenhandlers/RadialHandler.java similarity index 94% rename from common/src/main/java/org/vivecraft/gameplay/screenhandlers/RadialHandler.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/screenhandlers/RadialHandler.java index 3fb26b6f3..bc4f7004c 100644 --- a/common/src/main/java/org/vivecraft/gameplay/screenhandlers/RadialHandler.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/screenhandlers/RadialHandler.java @@ -1,12 +1,13 @@ -package org.vivecraft.gameplay.screenhandlers; +package org.vivecraft.client_vr.gameplay.screenhandlers; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.api.VRData; -import org.vivecraft.provider.ControllerType; -import org.vivecraft.gui.GuiRadial; -import org.vivecraft.utils.Utils; -import org.vivecraft.utils.math.Matrix4f; -import org.vivecraft.utils.math.Vector3; +import org.vivecraft.client.VivecraftVRMod; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRData; +import org.vivecraft.client_vr.provider.ControllerType; +import org.vivecraft.client_vr.gui.GuiRadial; +import org.vivecraft.client.utils.Utils; +import org.vivecraft.common.utils.math.Matrix4f; +import org.vivecraft.common.utils.math.Vector3; import com.mojang.blaze3d.pipeline.RenderTarget; @@ -17,7 +18,7 @@ public class RadialHandler { public static Minecraft mc = Minecraft.getInstance(); - public static ClientDataHolder dh = ClientDataHolder.getInstance(); + public static ClientDataHolderVR dh = ClientDataHolderVR.getInstance(); private static boolean Showing = false; public static GuiRadial UI = new GuiRadial(); public static Vec3 Pos_room = new Vec3(0.0D, 0.0D, 0.0D); @@ -35,7 +36,7 @@ public class RadialHandler public static boolean setOverlayShowing(boolean showingState, ControllerType controller) { - if (ClientDataHolder.kiosk) + if (ClientDataHolderVR.kiosk) { return false; } @@ -214,7 +215,7 @@ public static void processBindings() return; } - if (!dh.vr.keyRadialMenu.isDown()) + if (!VivecraftVRMod.INSTANCE.keyRadialMenu.isDown()) { if (activecontroller == ControllerType.LEFT) { diff --git a/common/src/main/java/org/vivecraft/gameplay/trackers/BackpackTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/BackpackTracker.java similarity index 91% rename from common/src/main/java/org/vivecraft/gameplay/trackers/BackpackTracker.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/BackpackTracker.java index 48aaeddf7..0540d73e2 100644 --- a/common/src/main/java/org/vivecraft/gameplay/trackers/BackpackTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/BackpackTracker.java @@ -1,7 +1,7 @@ -package org.vivecraft.gameplay.trackers; +package org.vivecraft.client_vr.gameplay.trackers; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.gameplay.VRPlayer; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.gameplay.VRPlayer; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -16,7 +16,7 @@ public class BackpackTracker extends Tracker public int previousSlot = 0; private Vec3 down = new Vec3(0.0D, -1.0D, 0.0D); - public BackpackTracker(Minecraft mc, ClientDataHolder dh) + public BackpackTracker(Minecraft mc, ClientDataHolderVR dh) { super(mc, dh); } @@ -24,7 +24,7 @@ public BackpackTracker(Minecraft mc, ClientDataHolder dh) public boolean isActive(LocalPlayer p) { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); if (dataholder.vrSettings.seated) { @@ -76,7 +76,7 @@ public void doProcess(LocalPlayer player) boolean flag4 = d0 < 0.0D; boolean flag5 = flag && flag1 && flag2; Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); if (flag5) { diff --git a/common/src/main/java/org/vivecraft/gameplay/trackers/BowTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/BowTracker.java similarity index 88% rename from common/src/main/java/org/vivecraft/gameplay/trackers/BowTracker.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/BowTracker.java index a9feccdeb..4193df1fb 100644 --- a/common/src/main/java/org/vivecraft/gameplay/trackers/BowTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/BowTracker.java @@ -1,17 +1,17 @@ -package org.vivecraft.gameplay.trackers; +package org.vivecraft.client_vr.gameplay.trackers; import java.nio.ByteBuffer; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.PehkuiHelper; -import org.vivecraft.Xplat; -import org.vivecraft.api.CommonNetworkHelper; -import org.vivecraft.extensions.PlayerExtension; -import org.vivecraft.api.ClientNetworkHelper; -import org.vivecraft.api.VRData; -import org.vivecraft.gameplay.VRPlayer; -import org.vivecraft.settings.VRSettings; -import org.vivecraft.utils.math.Vector3; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.gameplay.VRPlayer; +import org.vivecraft.mod_compat_vr.pehkui.PehkuiHelper; +import org.vivecraft.client.Xplat; +import org.vivecraft.common.network.CommonNetworkHelper; +import org.vivecraft.client_vr.extensions.PlayerExtension; +import org.vivecraft.client.network.ClientNetworking; +import org.vivecraft.client_vr.VRData; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.common.utils.math.Vector3; import net.minecraft.Util; import net.minecraft.client.Minecraft; @@ -47,7 +47,7 @@ public class BowTracker extends Tracker int hapcounter = 0; int lasthapStep = 0; - public BowTracker(Minecraft mc, ClientDataHolder dh) + public BowTracker(Minecraft mc, ClientDataHolderVR dh) { super(mc, dh); } @@ -73,11 +73,11 @@ public static boolean isBow(ItemStack itemStack) { return false; } - else if (ClientDataHolder.getInstance().vrSettings.bowMode == VRSettings.BowMode.OFF) + else if (ClientDataHolderVR.getInstance().vrSettings.bowMode == VRSettings.BowMode.OFF) { return false; } - else if (ClientDataHolder.getInstance().vrSettings.bowMode == VRSettings.BowMode.VANILLA) + else if (ClientDataHolderVR.getInstance().vrSettings.bowMode == VRSettings.BowMode.VANILLA) { return itemStack.getItem() == Items.BOW; } @@ -89,7 +89,7 @@ else if (ClientDataHolder.getInstance().vrSettings.bowMode == VRSettings.BowMode public static boolean isHoldingBow(LivingEntity e, InteractionHand hand) { - return ClientDataHolder.getInstance().vrSettings.seated ? false : isBow(e.getItemInHand(hand)); + return ClientDataHolderVR.getInstance().vrSettings.seated ? false : isBow(e.getItemInHand(hand)); } public static boolean isHoldingBowEither(LivingEntity e) @@ -237,10 +237,10 @@ else if ((float)Util.getMillis() - this.tsNotch > 500.0F) { this.dh.vr.triggerHapticPulse(0, 500); this.dh.vr.triggerHapticPulse(1, 3000); - ServerboundCustomPayloadPacket serverboundcustompayloadpacket = ClientNetworkHelper.getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators.DRAW, ByteBuffer.allocate(4).putFloat(this.getDrawPercent()).array()); + ServerboundCustomPayloadPacket serverboundcustompayloadpacket = ClientNetworking.getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators.DRAW, ByteBuffer.allocate(4).putFloat(this.getDrawPercent()).array()); Minecraft.getInstance().getConnection().send(serverboundcustompayloadpacket); this.mc.gameMode.releaseUsingItem(player); - serverboundcustompayloadpacket = ClientNetworkHelper.getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators.DRAW, ByteBuffer.allocate(4).putFloat(0.0F).array()); + serverboundcustompayloadpacket = ClientNetworking.getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators.DRAW, ByteBuffer.allocate(4).putFloat(0.0F).array()); Minecraft.getInstance().getConnection().send(serverboundcustompayloadpacket); this.isDrawing = false; } diff --git a/common/src/main/java/org/vivecraft/gameplay/trackers/CameraTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/CameraTracker.java similarity index 89% rename from common/src/main/java/org/vivecraft/gameplay/trackers/CameraTracker.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/CameraTracker.java index 6727ba775..aec66d535 100644 --- a/common/src/main/java/org/vivecraft/gameplay/trackers/CameraTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/CameraTracker.java @@ -1,12 +1,12 @@ -package org.vivecraft.gameplay.trackers; +package org.vivecraft.client_vr.gameplay.trackers; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.api.VRData; -import org.vivecraft.render.RenderPass; -import org.vivecraft.utils.Utils; -import org.vivecraft.utils.math.Matrix4f; -import org.vivecraft.utils.math.Quaternion; -import org.vivecraft.utils.math.Vector3; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRData; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client.utils.Utils; +import org.vivecraft.common.utils.math.Matrix4f; +import org.vivecraft.common.utils.math.Quaternion; +import org.vivecraft.common.utils.math.Vector3; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -26,7 +26,7 @@ public class CameraTracker extends Tracker private Quaternion startRotation; private boolean quickMode; - public CameraTracker(Minecraft mc, ClientDataHolder dh) + public CameraTracker(Minecraft mc, ClientDataHolderVR dh) { super(mc, dh); } @@ -66,7 +66,7 @@ public void doProcess(LocalPlayer player) this.visible = false; } - if (this.dh.vrPlayer.vrdata_world_render.getEye(RenderPass.CENTER).getPosition().distanceTo(this.position) > (double)(this.mc.options.renderDistance * 12)) + if (this.dh.vrPlayer.vrdata_world_render.getEye(RenderPass.CENTER).getPosition().distanceTo(this.position) > (double)(this.mc.options.getEffectiveRenderDistance() * 12)) { this.visible = false; } diff --git a/common/src/main/java/org/vivecraft/gameplay/trackers/ClimbTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/ClimbTracker.java similarity index 92% rename from common/src/main/java/org/vivecraft/gameplay/trackers/ClimbTracker.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/ClimbTracker.java index e982fd288..479f9bb18 100644 --- a/common/src/main/java/org/vivecraft/gameplay/trackers/ClimbTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/ClimbTracker.java @@ -1,4 +1,4 @@ -package org.vivecraft.gameplay.trackers; +package org.vivecraft.client_vr.gameplay.trackers; import java.util.ArrayList; import java.util.HashSet; @@ -6,13 +6,14 @@ import java.util.Random; import java.util.Set; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.api.BlockTags; -import org.vivecraft.api.CommonNetworkHelper; -import org.vivecraft.extensions.PlayerExtension; -import org.vivecraft.api.ClientNetworkHelper; -import org.vivecraft.gameplay.VRPlayer; -import org.vivecraft.provider.ControllerType; +import org.vivecraft.client.VivecraftVRMod; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.BlockTags; +import org.vivecraft.common.network.CommonNetworkHelper; +import org.vivecraft.client_vr.extensions.PlayerExtension; +import org.vivecraft.client.network.ClientNetworking; +import org.vivecraft.client_vr.gameplay.VRPlayer; +import org.vivecraft.client_vr.provider.ControllerType; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -60,7 +61,7 @@ public class ClimbTracker extends Tracker private Random rand = new Random(); boolean unsetflag; - public ClimbTracker(Minecraft mc, ClientDataHolder dh) + public ClimbTracker(Minecraft mc, ClientDataHolderVR dh) { super(mc, dh); } @@ -115,7 +116,7 @@ public boolean isActive(LocalPlayer p) { return false; } - else if (!this.dh.vrPlayer.getFreeMove() && !ClientDataHolder.getInstance().vrSettings.simulateFalling) + else if (!this.dh.vrPlayer.getFreeMove() && !ClientDataHolderVR.getInstance().vrSettings.simulateFalling) { return false; } @@ -151,7 +152,7 @@ public boolean isClimbeyClimb() public boolean isClimbeyClimbEquipped() { - return ClientNetworkHelper.serverAllowsClimbey && ((PlayerExtension) this.mc.player).isClimbeyClimbEquipped(); + return ClientNetworking.serverAllowsClimbey && ((PlayerExtension) this.mc.player).isClimbeyClimbEquipped(); } private boolean canstand(BlockPos bp, LocalPlayer p) @@ -197,8 +198,8 @@ else if (this.mc.player.isOnGround() || this.mc.player.getAbilities().flying) this.forceActivate = false; } - this.dh.vr.getInputAction(this.dh.vr.keyClimbeyGrab).setEnabled(ControllerType.RIGHT, this.isClimbeyClimb() && (this.isGrabbingLadder() || this.inblock[0] || this.forceActivate)); - this.dh.vr.getInputAction(this.dh.vr.keyClimbeyGrab).setEnabled(ControllerType.LEFT, this.isClimbeyClimb() && (this.isGrabbingLadder() || this.inblock[1] || this.forceActivate)); + this.dh.vr.getInputAction(VivecraftVRMod.INSTANCE.keyClimbeyGrab).setEnabled(ControllerType.RIGHT, this.isClimbeyClimb() && (this.isGrabbingLadder() || this.inblock[0] || this.forceActivate)); + this.dh.vr.getInputAction(VivecraftVRMod.INSTANCE.keyClimbeyGrab).setEnabled(ControllerType.LEFT, this.isClimbeyClimb() && (this.isGrabbingLadder() || this.inblock[1] || this.forceActivate)); } public void reset(LocalPlayer player) @@ -396,11 +397,11 @@ else if (aabb2 == this.westBB) if (i == 0) { - aboolean[i] = this.dh.vr.keyClimbeyGrab.isDown(ControllerType.RIGHT); + aboolean[i] = VivecraftVRMod.INSTANCE.keyClimbeyGrab.isDown(ControllerType.RIGHT); } else { - aboolean[i] = this.dh.vr.keyClimbeyGrab.isDown(ControllerType.LEFT); + aboolean[i] = VivecraftVRMod.INSTANCE.keyClimbeyGrab.isDown(ControllerType.LEFT); } this.inblock[i] = this.box[i] != null && this.box[i].move(blockpos).contains(avec3[i]); @@ -427,11 +428,11 @@ else if (aabb2 == this.westBB) if (i == 0) { - this.dh.vr.keyClimbeyGrab.unpressKey(ControllerType.RIGHT); + VivecraftVRMod.INSTANCE.keyClimbeyGrab.unpressKey(ControllerType.RIGHT); } else { - this.dh.vr.keyClimbeyGrab.unpressKey(ControllerType.LEFT); + VivecraftVRMod.INSTANCE.keyClimbeyGrab.unpressKey(ControllerType.LEFT); } flag2 = true; @@ -507,7 +508,7 @@ else if (aabb2 == this.westBB) if (!this.wantjump && !flag3) { - this.wantjump = this.dh.vr.keyClimbeyJump.isDown() && this.dh.jumpTracker.isClimbeyJumpEquipped(); + this.wantjump = VivecraftVRMod.INSTANCE.keyClimbeyJump.isDown() && this.dh.jumpTracker.isClimbeyJumpEquipped(); } flag2 = flag2 & this.wantjump; @@ -530,8 +531,8 @@ else if (aabb2 == this.westBB) if (player.isOnGround() && this.unsetflag) { this.unsetflag = false; - this.dh.vr.keyClimbeyGrab.unpressKey(ControllerType.RIGHT); - this.dh.vr.keyClimbeyGrab.unpressKey(ControllerType.LEFT); + VivecraftVRMod.INSTANCE.keyClimbeyGrab.unpressKey(ControllerType.RIGHT); + VivecraftVRMod.INSTANCE.keyClimbeyGrab.unpressKey(ControllerType.LEFT); } this.latchStartController = -1; @@ -598,12 +599,14 @@ else if (aabb2 == this.westBB) { d0 = d8 - vec36.z; d10 = (double)((float)blockpos2.getX() + 0.5F); + d10 += (1.0 - Math.min(ClientDataHolderVR.getInstance().vrPlayer.worldScale, 1.0)) * (j == 4 ? 0.5 : -0.5); } } else { d10 = d4 - vec36.x; d0 = (double)((float)blockpos2.getZ() + 0.5F); + d0 += (1.0 - Math.min(ClientDataHolderVR.getInstance().vrPlayer.worldScale, 1.0)) * (j == 2 ? 0.5 : -0.5); } } @@ -706,7 +709,7 @@ else if (aabb2 == this.westBB) } else { - ServerboundCustomPayloadPacket serverboundcustompayloadpacket = ClientNetworkHelper.getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators.CLIMBING, new byte[0]); + ServerboundCustomPayloadPacket serverboundcustompayloadpacket = ClientNetworking.getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators.CLIMBING, new byte[0]); if (this.mc.getConnection() != null) { diff --git a/common/src/main/java/org/vivecraft/gameplay/trackers/CrawlTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/CrawlTracker.java similarity index 68% rename from common/src/main/java/org/vivecraft/gameplay/trackers/CrawlTracker.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/CrawlTracker.java index 45c16cc3c..27c25393e 100644 --- a/common/src/main/java/org/vivecraft/gameplay/trackers/CrawlTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/CrawlTracker.java @@ -1,13 +1,15 @@ -package org.vivecraft.gameplay.trackers; +package org.vivecraft.client_vr.gameplay.trackers; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.api.ClientNetworkHelper; +import org.vivecraft.client.Xplat; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client.network.ClientNetworking; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraft.network.protocol.game.ServerboundCustomPayloadPacket; import net.minecraft.world.entity.Pose; -import org.vivecraft.api.CommonNetworkHelper; +import org.vivecraft.common.network.CommonNetworkHelper; +import org.vivecraft.mod_compat_vr.pehkui.PehkuiHelper; public class CrawlTracker extends Tracker { @@ -15,7 +17,7 @@ public class CrawlTracker extends Tracker public boolean crawling; public boolean crawlsteresis; - public CrawlTracker(Minecraft mc, ClientDataHolder dh) + public CrawlTracker(Minecraft mc, ClientDataHolderVR dh) { super(mc, dh); } @@ -30,7 +32,7 @@ else if (!this.dh.vrSettings.allowCrawling) { return false; } - else if (!ClientNetworkHelper.serverAllowsCrawling) + else if (!ClientNetworking.serverAllowsCrawling) { return false; } @@ -61,7 +63,11 @@ public void reset(LocalPlayer player) public void doProcess(LocalPlayer player) { - this.crawling = this.dh.vr.hmdPivotHistory.averagePosition((double)0.2F).y * (double)this.dh.vrPlayer.worldScale + (double)0.1F < (double)this.dh.vrSettings.crawlThreshold; + double scaleMultiplier = 1.0; + if (Xplat.isModLoaded("pehkui")) { + scaleMultiplier /= PehkuiHelper.getPlayerScale(player, mc.getFrameTime()); + } + this.crawling = this.dh.vr.hmdPivotHistory.averagePosition((double)0.2F).y * (double)this.dh.vrPlayer.worldScale * scaleMultiplier + (double)0.1F < (double)this.dh.vrSettings.crawlThreshold; this.updateState(player); } @@ -75,9 +81,9 @@ private void updateState(LocalPlayer player) this.crawlsteresis = true; } - if (ClientNetworkHelper.serverAllowsCrawling) + if (ClientNetworking.serverAllowsCrawling) { - ServerboundCustomPayloadPacket serverboundcustompayloadpacket = ClientNetworkHelper.getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators.CRAWL, new byte[] {(byte)(this.crawling ? 1 : 0)}); + ServerboundCustomPayloadPacket serverboundcustompayloadpacket = ClientNetworking.getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators.CRAWL, new byte[] {(byte)(this.crawling ? 1 : 0)}); if (this.mc.getConnection() != null) { diff --git a/common/src/main/java/org/vivecraft/gameplay/trackers/EatingTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/EatingTracker.java similarity index 92% rename from common/src/main/java/org/vivecraft/gameplay/trackers/EatingTracker.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/EatingTracker.java index 1bfb252f3..d92054dcc 100644 --- a/common/src/main/java/org/vivecraft/gameplay/trackers/EatingTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/EatingTracker.java @@ -1,9 +1,9 @@ -package org.vivecraft.gameplay.trackers; +package org.vivecraft.client_vr.gameplay.trackers; import java.util.Random; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.gameplay.VRPlayer; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.gameplay.VRPlayer; import net.minecraft.Util; import net.minecraft.client.Minecraft; @@ -22,7 +22,7 @@ public class EatingTracker extends Tracker long eatStart; private Random r = new Random(); - public EatingTracker(Minecraft mc, ClientDataHolder dh) + public EatingTracker(Minecraft mc, ClientDataHolderVR dh) { super(mc, dh); } @@ -34,7 +34,7 @@ public boolean isEating() public boolean isActive(LocalPlayer p) { - if (ClientDataHolder.getInstance().vrSettings.seated) + if (ClientDataHolderVR.getInstance().vrSettings.seated) { return false; } @@ -117,7 +117,7 @@ else if (itemstack.getUseAnimation() == UseAnim.EAT) { //Minecraft.getInstance().physicalGuiManager.preClickAction(); if (this.mc.gameMode.useItem(player, player.level, c == 0 ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND).consumesAction()) - { + { this.mc.gameRenderer.itemInHandRenderer.itemUsed(c == 0 ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND); this.eating[c] = true; this.eatStart = Util.getMillis(); @@ -130,7 +130,7 @@ else if (itemstack.getUseAnimation() == UseAnim.EAT) { if (k > 0L && k % 5L <= (long)crunchiness) { - this.dh.vr.triggerHapticPulse(c, 700); + this.dh.vr.triggerHapticPulse(c, 700); } } diff --git a/common/src/main/java/org/vivecraft/gameplay/trackers/HorseTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/HorseTracker.java similarity index 92% rename from common/src/main/java/org/vivecraft/gameplay/trackers/HorseTracker.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/HorseTracker.java index 7fd29c0cc..31ddc5027 100644 --- a/common/src/main/java/org/vivecraft/gameplay/trackers/HorseTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/HorseTracker.java @@ -1,10 +1,10 @@ -package org.vivecraft.gameplay.trackers; +package org.vivecraft.client_vr.gameplay.trackers; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.gameplay.VRPlayer; -import org.vivecraft.settings.VRSettings; -import org.vivecraft.utils.Utils; -import org.vivecraft.utils.math.Quaternion; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.gameplay.VRPlayer; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.client.utils.Utils; +import org.vivecraft.common.utils.math.Quaternion; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -25,7 +25,7 @@ public class HorseTracker extends Tracker Horse horse = null; ModelInfo info = new ModelInfo(); - public HorseTracker(Minecraft mc, ClientDataHolder dh) + public HorseTracker(Minecraft mc, ClientDataHolderVR dh) { super(mc, dh); } diff --git a/common/src/main/java/org/vivecraft/gameplay/trackers/InteractTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/InteractTracker.java similarity index 85% rename from common/src/main/java/org/vivecraft/gameplay/trackers/InteractTracker.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/InteractTracker.java index 9d03e4d46..9dd93bb90 100644 --- a/common/src/main/java/org/vivecraft/gameplay/trackers/InteractTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/InteractTracker.java @@ -1,15 +1,17 @@ -package org.vivecraft.gameplay.trackers; +package org.vivecraft.client_vr.gameplay.trackers; import java.util.HashSet; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.extensions.PlayerExtension; -import org.vivecraft.api.VRData; -import org.vivecraft.provider.ControllerType; -import org.vivecraft.settings.VRHotkeys; -import org.vivecraft.settings.VRSettings; -import org.vivecraft.render.RenderPass; -import org.vivecraft.render.VRFirstPersonArmSwing; +import org.vivecraft.client.VivecraftVRMod; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client.Xplat; +import org.vivecraft.client_vr.extensions.PlayerExtension; +import org.vivecraft.client_vr.VRData; +import org.vivecraft.client_vr.provider.ControllerType; +import org.vivecraft.client_vr.settings.VRHotkeys; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client_vr.render.VRFirstPersonArmSwing; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; @@ -47,7 +49,7 @@ public class InteractTracker extends Tracker boolean[] wasactive = new boolean[2]; private HashSet rightClickable = null; - public InteractTracker(Minecraft mc, ClientDataHolder dh) + public InteractTracker(Minecraft mc, ClientDataHolderVR dh) { super(mc, dh); } @@ -73,7 +75,7 @@ else if (p.isSleeping()) else { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); if (dataholder.vrSettings.seated) { @@ -117,7 +119,7 @@ private void reset(LocalPlayer player, int c) this.inCamera[c] = false; this.inHandheldCamera[c] = false; this.active[c] = false; - this.dh.vr.getInputAction(this.dh.vr.keyVRInteract).setEnabled(ControllerType.values()[c], false); + this.dh.vr.getInputAction(VivecraftVRMod.INSTANCE.keyVRInteract).setEnabled(ControllerType.values()[c], false); } public void doProcess(LocalPlayer player) @@ -126,20 +128,15 @@ public void doProcess(LocalPlayer player) { this.rightClickable = new HashSet<>(); - String name = "use"; - String unmappedName = "method_9534"; + String name = Xplat.getUseMethodName(); for (Object object : Registry.BLOCK) { Class oclass = object.getClass(); try { - if (oclass.getMethod(name, BlockState.class, - net.minecraft.world.level.Level.class, - BlockPos.class, - net.minecraft.world.entity.player.Player.class, - InteractionHand.class, - BlockHitResult.class).getDeclaringClass() == oclass || oclass.getMethod(unmappedName, BlockState.class, + if (oclass.getMethod(name, + BlockState.class, net.minecraft.world.level.Level.class, BlockPos.class, net.minecraft.world.entity.player.Player.class, @@ -156,12 +153,8 @@ public void doProcess(LocalPlayer player) try { - if (oclass.getMethod(name, BlockState.class, - net.minecraft.world.level.Level.class, - BlockPos.class, - net.minecraft.world.entity.player.Player.class, - InteractionHand.class, - BlockHitResult.class).getDeclaringClass() == oclass || oclass.getMethod(unmappedName, BlockState.class, + if (oclass.getMethod(name, + BlockState.class, net.minecraft.world.level.Level.class, BlockPos.class, net.minecraft.world.entity.player.Player.class, @@ -184,7 +177,7 @@ public void doProcess(LocalPlayer player) for (int j = 0; j < 2; ++j) { - if (!this.inCamera[j] && !this.inHandheldCamera[j] || !this.dh.vr.keyVRInteract.isDown(ControllerType.values()[j])) + if (!this.inCamera[j] && !this.inHandheldCamera[j] || !VivecraftVRMod.INSTANCE.keyVRInteract.isDown(ControllerType.values()[j])) { this.reset(player, j); @@ -251,7 +244,7 @@ public void doProcess(LocalPlayer player) BlockPos blockpos = null; blockpos = new BlockPos(vec3); BlockState blockstate = this.mc.level.getBlockState(blockpos); - BlockHitResult blockhitresult = blockstate.getOcclusionShape(this.mc.level, blockpos).clip(vec35, vec3, blockpos); + BlockHitResult blockhitresult = blockstate.getShape(this.mc.level, blockpos).clip(vec35, vec3, blockpos); this.inBlockPos[j] = blockpos; this.inBlockHit[j] = blockhitresult; this.active[j] = blockhitresult != null && (this.rightClickable.contains(blockstate.getBlock().getClass()) || this.rightClickable.contains(blockstate.getBlock().getClass().getSuperclass())); @@ -269,7 +262,7 @@ public void doProcess(LocalPlayer player) this.dh.vr.triggerHapticPulse(j, 250); } - this.dh.vr.getInputAction(this.dh.vr.keyVRInteract).setEnabled(ControllerType.values()[j], this.active[j]); + this.dh.vr.getInputAction(VivecraftVRMod.INSTANCE.keyVRInteract).setEnabled(ControllerType.values()[j], this.active[j]); this.wasactive[j] = this.active[j]; } } @@ -294,7 +287,7 @@ public void processBindings() { for (int i = 0; i < 2; ++i) { - if (this.dh.vr.keyVRInteract.consumeClick(ControllerType.values()[i]) && this.active[i]) + if (VivecraftVRMod.INSTANCE.keyVRInteract.consumeClick(ControllerType.values()[i]) && this.active[i]) { InteractionHand interactionhand = InteractionHand.values()[i]; boolean flag = false; @@ -330,11 +323,11 @@ else if (this.inEntityHit[i] != null) } else if (this.inBlockHit[i] != null) { - flag = this.mc.gameMode.useItemOn(this.mc.player, (ClientLevel)this.mc.player.level, interactionhand, this.inBlockHit[i]).consumesAction(); + flag = this.mc.gameMode.useItemOn(this.mc.player, (ClientLevel) this.mc.player.level, interactionhand, this.inBlockHit[i]).consumesAction(); } else if (this.bukkit[i]) { - flag = this.mc.gameMode.useItem(this.mc.player, (ClientLevel)this.mc.player.level, interactionhand).consumesAction(); + flag = this.mc.gameMode.useItem(this.mc.player, this.mc.player.level, interactionhand).consumesAction(); } if (flag) diff --git a/common/src/main/java/org/vivecraft/gameplay/trackers/JumpTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/JumpTracker.java similarity index 85% rename from common/src/main/java/org/vivecraft/gameplay/trackers/JumpTracker.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/JumpTracker.java index 5eba4515f..2b89a946f 100644 --- a/common/src/main/java/org/vivecraft/gameplay/trackers/JumpTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/JumpTracker.java @@ -1,10 +1,11 @@ -package org.vivecraft.gameplay.trackers; +package org.vivecraft.client_vr.gameplay.trackers; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.extensions.PlayerExtension; -import org.vivecraft.api.ClientNetworkHelper; -import org.vivecraft.gameplay.VRPlayer; -import org.vivecraft.settings.AutoCalibration; +import org.vivecraft.client.VivecraftVRMod; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.extensions.PlayerExtension; +import org.vivecraft.client.network.ClientNetworking; +import org.vivecraft.client_vr.gameplay.VRPlayer; +import org.vivecraft.client_vr.settings.AutoCalibration; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -22,7 +23,7 @@ public class JumpTracker extends Tracker private boolean c0Latched = false; private boolean c1Latched = false; - public JumpTracker(Minecraft mc, ClientDataHolder dh) + public JumpTracker(Minecraft mc, ClientDataHolderVR dh) { super(mc, dh); } @@ -34,20 +35,20 @@ public boolean isClimbeyJump() public boolean isClimbeyJumpEquipped() { - return ClientNetworkHelper.serverAllowsClimbey && ((PlayerExtension) Minecraft.getInstance().player).isClimbeyJumpEquipped(); + return ClientNetworking.serverAllowsClimbey && ((PlayerExtension) Minecraft.getInstance().player).isClimbeyJumpEquipped(); } public boolean isActive(LocalPlayer p) { - if (ClientDataHolder.getInstance().vrSettings.seated) + if (ClientDataHolderVR.getInstance().vrSettings.seated) { return false; } - else if (!ClientDataHolder.getInstance().vrPlayer.getFreeMove() && !ClientDataHolder.getInstance().vrSettings.simulateFalling) + else if (!ClientDataHolderVR.getInstance().vrPlayer.getFreeMove() && !ClientDataHolderVR.getInstance().vrSettings.simulateFalling) { return false; } - else if (!ClientDataHolder.getInstance().vrSettings.realisticJumpEnabled) + else if (!ClientDataHolderVR.getInstance().vrSettings.realisticJumpEnabled) { return false; } @@ -79,7 +80,7 @@ public boolean isjumping() public void idleTick(LocalPlayer player) { - this.dh.vr.getInputAction(this.dh.vr.keyClimbeyJump).setEnabled(this.isClimbeyJumpEquipped() && (this.isActive(player) || this.dh.climbTracker.isClimbeyClimbEquipped() && this.dh.climbTracker.isGrabbingLadder())); + this.dh.vr.getInputAction(VivecraftVRMod.INSTANCE.keyClimbeyJump).setEnabled(this.isClimbeyJumpEquipped() && (this.isActive(player) || this.dh.climbTracker.isClimbeyClimbEquipped() && this.dh.climbTracker.isGrabbingLadder())); } public void reset(LocalPlayer player) @@ -97,7 +98,7 @@ public void doProcess(LocalPlayer player) for (int i = 0; i < 2; ++i) { - aboolean[i] = this.dh.vr.keyClimbeyJump.isDown(); + aboolean[i] = VivecraftVRMod.INSTANCE.keyClimbeyJump.isDown(); } boolean flag = false; diff --git a/common/src/main/java/org/vivecraft/gameplay/trackers/RowTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/RowTracker.java similarity index 89% rename from common/src/main/java/org/vivecraft/gameplay/trackers/RowTracker.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/RowTracker.java index a534a3c2a..9bfb70e5f 100644 --- a/common/src/main/java/org/vivecraft/gameplay/trackers/RowTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/RowTracker.java @@ -1,9 +1,9 @@ -package org.vivecraft.gameplay.trackers; +package org.vivecraft.client_vr.gameplay.trackers; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.gameplay.VRPlayer; -import org.vivecraft.settings.VRSettings; -import org.vivecraft.utils.math.Quaternion; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.gameplay.VRPlayer; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.common.utils.math.Quaternion; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -20,18 +20,18 @@ public class RowTracker extends Tracker public float ROar; public float Foar; - public RowTracker(Minecraft mc, ClientDataHolder dh) + public RowTracker(Minecraft mc, ClientDataHolderVR dh) { super(mc, dh); } public boolean isActive(LocalPlayer p) { - if (ClientDataHolder.getInstance().vrSettings.seated) + if (ClientDataHolderVR.getInstance().vrSettings.seated) { return false; } - else if (!ClientDataHolder.getInstance().vrSettings.realisticRowEnabled) + else if (!ClientDataHolderVR.getInstance().vrSettings.realisticRowEnabled) { return false; } @@ -51,7 +51,7 @@ else if (!(p.getVehicle() instanceof Boat)) } else { - return !ClientDataHolder.getInstance().bowTracker.isNotched(); + return !ClientDataHolderVR.getInstance().bowTracker.isNotched(); } } else diff --git a/common/src/main/java/org/vivecraft/gameplay/trackers/RunTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/RunTracker.java similarity index 83% rename from common/src/main/java/org/vivecraft/gameplay/trackers/RunTracker.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/RunTracker.java index fbd09aeea..953f91aa9 100644 --- a/common/src/main/java/org/vivecraft/gameplay/trackers/RunTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/RunTracker.java @@ -1,7 +1,7 @@ -package org.vivecraft.gameplay.trackers; +package org.vivecraft.client_vr.gameplay.trackers; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.settings.VRSettings; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.settings.VRSettings; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -13,16 +13,16 @@ public class RunTracker extends Tracker private double speed = 0.0D; private Vec3 movedir; - public RunTracker(Minecraft mc, ClientDataHolder dh) + public RunTracker(Minecraft mc, ClientDataHolderVR dh) { super(mc, dh); } public boolean isActive(LocalPlayer p) { - if (ClientDataHolder.getInstance().vrPlayer.getFreeMove() && !ClientDataHolder.getInstance().vrSettings.seated) + if (ClientDataHolderVR.getInstance().vrPlayer.getFreeMove() && !ClientDataHolderVR.getInstance().vrSettings.seated) { - if (ClientDataHolder.getInstance().vrSettings.vrFreeMoveMode != VRSettings.FreeMove.RUN_IN_PLACE) + if (ClientDataHolderVR.getInstance().vrSettings.vrFreeMoveMode != VRSettings.FreeMove.RUN_IN_PLACE) { return false; } @@ -40,7 +40,7 @@ else if (p.isOnGround() || !p.isInWater() && !p.isInLava()) } else { - return !ClientDataHolder.getInstance().bowTracker.isNotched(); + return !ClientDataHolderVR.getInstance().bowTracker.isNotched(); } } else diff --git a/common/src/main/java/org/vivecraft/gameplay/trackers/SneakTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/SneakTracker.java similarity index 71% rename from common/src/main/java/org/vivecraft/gameplay/trackers/SneakTracker.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/SneakTracker.java index ec878b505..07e02266b 100644 --- a/common/src/main/java/org/vivecraft/gameplay/trackers/SneakTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/SneakTracker.java @@ -1,7 +1,7 @@ -package org.vivecraft.gameplay.trackers; +package org.vivecraft.client_vr.gameplay.trackers; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.settings.AutoCalibration; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.settings.AutoCalibration; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -11,22 +11,22 @@ public class SneakTracker extends Tracker public boolean sneakOverride = false; public int sneakCounter = 0; - public SneakTracker(Minecraft mc, ClientDataHolder dh) + public SneakTracker(Minecraft mc, ClientDataHolderVR dh) { super(mc, dh); } public boolean isActive(LocalPlayer p) { - if (ClientDataHolder.getInstance().vrSettings.seated) + if (ClientDataHolderVR.getInstance().vrSettings.seated) { return false; } - else if (!ClientDataHolder.getInstance().vrPlayer.getFreeMove() && !ClientDataHolder.getInstance().vrSettings.simulateFalling) + else if (!ClientDataHolderVR.getInstance().vrPlayer.getFreeMove() && !ClientDataHolderVR.getInstance().vrSettings.simulateFalling) { return false; } - else if (!ClientDataHolder.getInstance().vrSettings.realisticSneakEnabled) + else if (!ClientDataHolderVR.getInstance().vrSettings.realisticSneakEnabled) { return false; } diff --git a/common/src/main/java/org/vivecraft/gameplay/trackers/SwimTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/SwimTracker.java similarity index 94% rename from common/src/main/java/org/vivecraft/gameplay/trackers/SwimTracker.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/SwimTracker.java index baa40a447..b0f6a4227 100644 --- a/common/src/main/java/org/vivecraft/gameplay/trackers/SwimTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/SwimTracker.java @@ -1,6 +1,6 @@ -package org.vivecraft.gameplay.trackers; +package org.vivecraft.client_vr.gameplay.trackers; -import org.vivecraft.ClientDataHolder; +import org.vivecraft.client_vr.ClientDataHolderVR; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -14,7 +14,7 @@ public class SwimTracker extends Tracker final double riseSpeed = (double)0.005F; double swimspeed = (double)1.3F; - public SwimTracker(Minecraft mc, ClientDataHolder dh) + public SwimTracker(Minecraft mc, ClientDataHolderVR dh) { super(mc, dh); } diff --git a/common/src/main/java/org/vivecraft/gameplay/trackers/SwingTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/SwingTracker.java similarity index 90% rename from common/src/main/java/org/vivecraft/gameplay/trackers/SwingTracker.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/SwingTracker.java index 315d71193..9d1405960 100644 --- a/common/src/main/java/org/vivecraft/gameplay/trackers/SwingTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/SwingTracker.java @@ -1,35 +1,25 @@ -package org.vivecraft.gameplay.trackers; +package org.vivecraft.client_vr.gameplay.trackers; import java.util.List; +import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.block.*; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.api.BlockTags; -import org.vivecraft.api.ItemTags; -import org.vivecraft.api.Vec3History; -import org.vivecraft.provider.ControllerType; -import org.vivecraft.settings.VRSettings; +import org.vivecraft.client.VivecraftVRMod; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.BlockTags; +import org.vivecraft.client_vr.ItemTags; +import org.vivecraft.client_vr.Vec3History; +import org.vivecraft.client_vr.provider.ControllerType; +import org.vivecraft.client_vr.settings.VRSettings; import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ArrowItem; -import net.minecraft.world.item.DiggerItem; -import net.minecraft.world.item.FishingRodItem; -import net.minecraft.world.item.FlintAndSteelItem; -import net.minecraft.world.item.FoodOnAStickItem; -import net.minecraft.world.item.HoeItem; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.item.ShearsItem; -import net.minecraft.world.item.SwordItem; -import net.minecraft.world.item.TridentItem; +import net.minecraft.world.item.*; import net.minecraft.world.level.ClipContext; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; @@ -49,7 +39,7 @@ public class SwingTracker extends Tracker Vec3 forward = new Vec3(0.0D, 0.0D, -1.0D); double speedthresh = 3.0D; - public SwingTracker(Minecraft mc, ClientDataHolder dh) + public SwingTracker(Minecraft mc, ClientDataHolderVR dh) { super(mc, dh); } @@ -80,7 +70,7 @@ else if (p.isSleeping()) else { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); if (minecraft.screen != null) { @@ -238,7 +228,7 @@ else if (!itemstack.isEmpty()) this.canact[i] = this.canact[i] && !flag1 && !flag2; - if (!this.dh.climbTracker.isClimbeyClimb() || (i != 0 || !this.dh.vr.keyClimbeyGrab.isDown(ControllerType.RIGHT)) && flag && (i != 1 || !this.dh.vr.keyClimbeyGrab.isDown(ControllerType.LEFT)) && flag) + if (!this.dh.climbTracker.isClimbeyClimb() || (i != 0 || !VivecraftVRMod.INSTANCE.keyClimbeyGrab.isDown(ControllerType.RIGHT)) && flag && (i != 1 || !VivecraftVRMod.INSTANCE.keyClimbeyGrab.isDown(ControllerType.LEFT)) && flag) { BlockPos blockpos = new BlockPos(this.miningPoint[i]); BlockState blockstate = this.mc.level.getBlockState(blockpos); @@ -266,8 +256,8 @@ else if (!itemstack.isEmpty()) // actually use the item on the block boolean useSuccessful = this.mc.gameMode.useItemOn(player, (ClientLevel)player.level, i == 0 ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND, blockhitresult1).shouldSwing(); if (itemstack.is(ItemTags.VIVECRAFT_SCYTHES) && !useSuccessful) { - // some scythes just need to be used - this.mc.gameMode.useItem(player, player.level, i == 0 ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND); + // some scythes just need to be used + this.mc.gameMode.useItem(player, player.level, i == 0 ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND); } } else if (blockstate.getBlock() instanceof NoteBlock || blockstate.is(BlockTags.VIVECRAFT_MUSIC_BLOCKS)) @@ -344,10 +334,10 @@ public static float getItemFade(LocalPlayer p, ItemStack is) f = 0.75F; } - boolean[] aboolean = ClientDataHolder.getInstance().swingTracker.lastWeaponSolid; + boolean[] aboolean = ClientDataHolderVR.getInstance().swingTracker.lastWeaponSolid; Minecraft.getInstance().getItemRenderer(); - if (aboolean[ClientDataHolder.ismainhand ? 0 : 1]) + if (aboolean[ClientDataHolderVR.ismainhand ? 0 : 1]) { f -= 0.25F; } diff --git a/common/src/main/java/org/vivecraft/gameplay/trackers/TeleportTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/TeleportTracker.java similarity index 91% rename from common/src/main/java/org/vivecraft/gameplay/trackers/TeleportTracker.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/TeleportTracker.java index a5d43ed92..bf108e68b 100644 --- a/common/src/main/java/org/vivecraft/gameplay/trackers/TeleportTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/TeleportTracker.java @@ -1,4 +1,4 @@ -package org.vivecraft.gameplay.trackers; +package org.vivecraft.client_vr.gameplay.trackers; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -15,19 +15,19 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.api.BlockTags; -import org.vivecraft.api.ItemTags; -import org.vivecraft.extensions.GameRendererExtension; -import org.vivecraft.extensions.PlayerExtension; -import org.vivecraft.api.ClientNetworkHelper; -import org.vivecraft.provider.openvr_jna.OpenVRUtil; -import org.vivecraft.gameplay.VRMovementStyle; -import org.vivecraft.utils.Utils; -import org.vivecraft.utils.math.Angle; -import org.vivecraft.utils.math.Matrix4f; -import org.vivecraft.utils.math.Quaternion; -import org.vivecraft.utils.math.Vector3; +import org.vivecraft.client.VivecraftVRMod; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.BlockTags; +import org.vivecraft.client_vr.extensions.GameRendererExtension; +import org.vivecraft.client_vr.extensions.PlayerExtension; +import org.vivecraft.client.network.ClientNetworking; +import org.vivecraft.client_vr.provider.openvr_lwjgl.OpenVRUtil; +import org.vivecraft.client_vr.gameplay.VRMovementStyle; +import org.vivecraft.client.utils.Utils; +import org.vivecraft.common.utils.math.Angle; +import org.vivecraft.common.utils.math.Matrix4f; +import org.vivecraft.common.utils.math.Quaternion; +import org.vivecraft.common.utils.math.Vector3; import java.util.Random; @@ -43,7 +43,7 @@ public class TeleportTracker extends Tracker public double lastTeleportArcDisplayOffset = 0.0D; public VRMovementStyle vrMovementStyle; - public TeleportTracker(Minecraft mc, ClientDataHolder dh) + public TeleportTracker(Minecraft mc, ClientDataHolderVR dh) { super(mc, dh); this.vrMovementStyle = new VRMovementStyle(dh); @@ -102,7 +102,7 @@ public void doProcess(LocalPlayer player) boolean flag = false; Vec3 vec3 = null; - boolean flag1 = this.dh.vr.keyTeleport.isDown() && this.dh.vrPlayer.isTeleportEnabled(); + boolean flag1 = VivecraftVRMod.INSTANCE.keyTeleport.isDown() && this.dh.vrPlayer.isTeleportEnabled(); boolean flag2 = this.dh.vrSettings.seated && !this.dh.vrPlayer.getFreeMove() && (player.input.forwardImpulse != 0.0F || player.input.leftImpulse != 0.0F); if ((flag1 || flag2) && !player.isPassenger()) @@ -234,7 +234,7 @@ else if (((PlayerExtension) player).getMovementTeleportTimer() >= 0 && (vec3.x ! } else { - if (ClientNetworkHelper.serverSupportsDirectTeleport) + if (ClientNetworking.serverSupportsDirectTeleport) { ((PlayerExtension) player).setTeleported(true); } @@ -330,17 +330,17 @@ private void updateTeleportArc(Minecraft mc, LocalPlayer player) flag1 = false; } - if (!mc.player.getAbilities().mayfly && ClientNetworkHelper.isLimitedSurvivalTeleport()) + if (!mc.player.getAbilities().mayfly && ClientNetworking.isLimitedSurvivalTeleport()) { - if (ClientNetworkHelper.getTeleportDownLimit() > 0 && d0 > (double) ClientNetworkHelper.getTeleportDownLimit() + 0.2D) + if (ClientNetworking.getTeleportDownLimit() > 0 && d0 > (double) ClientNetworking.getTeleportDownLimit() + 0.2D) { flag1 = false; } - else if (ClientNetworkHelper.getTeleportUpLimit() > 0 && -d0 > (double) ClientNetworkHelper.getTeleportUpLimit() * (double)((PlayerExtension) player).getMuhJumpFactor() + 0.2D) + else if (ClientNetworking.getTeleportUpLimit() > 0 && -d0 > (double) ClientNetworking.getTeleportUpLimit() * (double)((PlayerExtension) player).getMuhJumpFactor() + 0.2D) { flag1 = false; } - else if (ClientNetworkHelper.getTeleportHorizLimit() > 0 && d1 > (double) ClientNetworkHelper.getTeleportHorizLimit() * (double)((PlayerExtension) player).getMuhSpeedFactor() + 0.2D) + else if (ClientNetworking.getTeleportHorizLimit() > 0 && d1 > (double) ClientNetworking.getTeleportHorizLimit() * (double)((PlayerExtension) player).getMuhSpeedFactor() + 0.2D) { flag1 = false; } @@ -365,10 +365,10 @@ else if (ClientNetworkHelper.getTeleportHorizLimit() > 0 && d1 > (double) Client private void doTeleportCallback() { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); dataholder.swingTracker.disableSwing = 3; - if (ClientNetworkHelper.isLimitedSurvivalTeleport()) + if (ClientNetworking.isLimitedSurvivalTeleport()) { minecraft.player.causeFoodExhaustion((float)(this.movementTeleportDistance / 16.0D * (double)1.2F)); @@ -433,7 +433,7 @@ else if (collision.getDirection() != Direction.UP) return true; } - if (!mc.player.getAbilities().mayfly && ClientNetworkHelper.isLimitedSurvivalTeleport()) + if (!mc.player.getAbilities().mayfly && ClientNetworking.isLimitedSurvivalTeleport()) { return false; } diff --git a/common/src/main/java/org/vivecraft/gameplay/trackers/TelescopeTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/TelescopeTracker.java similarity index 82% rename from common/src/main/java/org/vivecraft/gameplay/trackers/TelescopeTracker.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/TelescopeTracker.java index 4c3449848..766acda9d 100644 --- a/common/src/main/java/org/vivecraft/gameplay/trackers/TelescopeTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/TelescopeTracker.java @@ -1,9 +1,9 @@ -package org.vivecraft.gameplay.trackers; +package org.vivecraft.client_vr.gameplay.trackers; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.api.ItemTags; -import org.vivecraft.api.VRData; -import org.vivecraft.render.RenderPass; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.ItemTags; +import org.vivecraft.client_vr.VRData; +import org.vivecraft.client_vr.render.RenderPass; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -22,7 +22,7 @@ public class TelescopeTracker extends Tracker private static final double lensDotMax = 0.9D; private static final double lensDotMin = 0.75D; - public TelescopeTracker(Minecraft mc, ClientDataHolder dh) + public TelescopeTracker(Minecraft mc, ClientDataHolderVR dh) { super(mc, dh); } @@ -38,7 +38,7 @@ public void doProcess(LocalPlayer player) public static boolean isTelescope(ItemStack i) { - return i.getItem() == Items.SPYGLASS || isLegacyTelescope(i) || i.is(ItemTags.VIVECRAFT_TELESCOPE); + return i != null && (i.getItem() == Items.SPYGLASS || isLegacyTelescope(i) || i.is(ItemTags.VIVECRAFT_TELESCOPE)); } // TODO: old eye of the farseer, remove this eventually @@ -67,13 +67,13 @@ else if (!i.hasTag() || !i.getTag().getBoolean("Unbreakable")) private static Vec3 getLensOrigin(int controller) { - VRData.VRDevicePose vrdata$vrdevicepose = ClientDataHolder.getInstance().vrPlayer.vrdata_room_pre.getController(controller); + VRData.VRDevicePose vrdata$vrdevicepose = ClientDataHolderVR.getInstance().vrPlayer.vrdata_room_pre.getController(controller); return vrdata$vrdevicepose.getPosition().add(getViewVector(controller).scale(-0.2D).add(vrdata$vrdevicepose.getDirection().scale((double)0.05F))); } private static Vec3 getViewVector(int controller) { - return ClientDataHolder.getInstance().vrPlayer.vrdata_room_pre.getController(controller).getCustomVector(new Vec3(0.0D, -1.0D, 0.0D)); + return ClientDataHolderVR.getInstance().vrPlayer.vrdata_room_pre.getController(controller).getCustomVector(new Vec3(0.0D, -1.0D, 0.0D)); } public static boolean isViewing(int controller) @@ -84,7 +84,7 @@ public static boolean isViewing(int controller) public static float viewPercent(int controller) { LocalPlayer p = Minecraft.getInstance().player; - if(p!= null && ClientDataHolder.getInstance().vrSettings.seated) { + if(p!= null && ClientDataHolderVR.getInstance().vrSettings.seated) { if(isTelescope(p.getUseItem())) return 1; else @@ -114,7 +114,7 @@ private static float viewPercent(int controller, int e) } else { - VRData.VRDevicePose eye = ClientDataHolder.getInstance().vrPlayer.vrdata_room_pre.getEye(RenderPass.values()[e]); + VRData.VRDevicePose eye = ClientDataHolderVR.getInstance().vrPlayer.vrdata_room_pre.getEye(RenderPass.values()[e]); double dist = eye.getPosition().subtract(getLensOrigin(controller)).length(); Vec3 look = eye.getDirection(); double dot = Math.abs(look.dot(getViewVector(controller))); diff --git a/common/src/main/java/org/vivecraft/gameplay/trackers/Tracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/Tracker.java similarity index 76% rename from common/src/main/java/org/vivecraft/gameplay/trackers/Tracker.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/Tracker.java index 3f8ebcc6f..e67aed315 100644 --- a/common/src/main/java/org/vivecraft/gameplay/trackers/Tracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/Tracker.java @@ -1,6 +1,6 @@ -package org.vivecraft.gameplay.trackers; +package org.vivecraft.client_vr.gameplay.trackers; -import org.vivecraft.ClientDataHolder; +import org.vivecraft.client_vr.ClientDataHolderVR; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -8,9 +8,9 @@ public abstract class Tracker { public Minecraft mc; - public ClientDataHolder dh; + public ClientDataHolderVR dh; - public Tracker(Minecraft mc, ClientDataHolder dh) + public Tracker(Minecraft mc, ClientDataHolderVR dh) { this.mc = mc; this.dh = dh; diff --git a/common/src/main/java/org/vivecraft/gameplay/trackers/VehicleTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/VehicleTracker.java similarity index 95% rename from common/src/main/java/org/vivecraft/gameplay/trackers/VehicleTracker.java rename to common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/VehicleTracker.java index 97c6b6a95..83163c1dc 100644 --- a/common/src/main/java/org/vivecraft/gameplay/trackers/VehicleTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/VehicleTracker.java @@ -1,9 +1,9 @@ -package org.vivecraft.gameplay.trackers; +package org.vivecraft.client_vr.gameplay.trackers; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.api.ItemTags; -import org.vivecraft.api.VRData; -import org.vivecraft.settings.VRSettings; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.ItemTags; +import org.vivecraft.client_vr.VRData; +import org.vivecraft.client_vr.settings.VRSettings; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -25,7 +25,7 @@ public class VehicleTracker extends Tracker private int minecartStupidityCounter; public int dismountCooldown = 0; - public VehicleTracker(Minecraft mc, ClientDataHolder dh) + public VehicleTracker(Minecraft mc, ClientDataHolderVR dh) { super(mc, dh); } @@ -64,7 +64,7 @@ public static Vec3 getSteeringDirection(LocalPlayer player) Vec3 vec3 = null; Entity entity = player.getVehicle(); Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); if (!(entity instanceof AbstractHorse) && !(entity instanceof Boat)) { @@ -206,7 +206,7 @@ else if (entity instanceof Mob) public void onStartRiding(Entity vehicle, LocalPlayer player) { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); this.PreMount_World_Rotation = dataholder.vrPlayer.vrdata_world_pre.rotation_radians; Vec3 vec3 = dataholder.vrPlayer.vrdata_room_pre.getHeadPivot(); this.Premount_Pos_Room = new Vec3(vec3.x, 0.0D, vec3.z); diff --git a/common/src/main/java/org/vivecraft/gui/GuiKeyboard.java b/common/src/main/java/org/vivecraft/client_vr/gui/GuiKeyboard.java similarity index 80% rename from common/src/main/java/org/vivecraft/gui/GuiKeyboard.java rename to common/src/main/java/org/vivecraft/client_vr/gui/GuiKeyboard.java index 5447fc2a5..60c2ce23b 100644 --- a/common/src/main/java/org/vivecraft/gui/GuiKeyboard.java +++ b/common/src/main/java/org/vivecraft/client_vr/gui/GuiKeyboard.java @@ -1,13 +1,13 @@ -package org.vivecraft.gui; +package org.vivecraft.client_vr.gui; import org.lwjgl.glfw.GLFW; -import org.vivecraft.gui.framework.TwoHandedScreen; -import org.vivecraft.provider.InputSimulator; +import org.vivecraft.client.gui.framework.TwoHandedScreen; +import org.vivecraft.client_vr.provider.InputSimulator; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.components.Button; -import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; public class GuiKeyboard extends TwoHandedScreen { @@ -53,7 +53,7 @@ public void init() } String s2 = String.valueOf(c0); - Button button = new Button(k + k1 * (i1 + l), k + j1 * (20 + l), i1, 20, new TextComponent(s2), (p) -> + Button button = new Button(k + k1 * (i1 + l), k + j1 * (20 + l), i1, 20, new TranslatableComponent(s2), (p) -> { InputSimulator.typeChars(s2); }); @@ -61,69 +61,69 @@ public void init() } } - this.addRenderableWidget(new Button(0, k + 3 * (20 + l), 30, 20, new TextComponent("Shift"), (p) -> + this.addRenderableWidget(new Button(0, k + 3 * (20 + l), 30, 20, new TranslatableComponent("Shift"), (p) -> { this.setShift(!this.isShift); })); - this.addRenderableWidget(new Button(k + 4 * (i1 + l), k + j * (20 + l), 5 * (i1 + l), 20, new TextComponent(" "), (p) -> + this.addRenderableWidget(new Button(k + 4 * (i1 + l), k + j * (20 + l), 5 * (i1 + l), 20, new TranslatableComponent(" "), (p) -> { InputSimulator.typeChars(" "); })); - this.addRenderableWidget(new Button(i * (i1 + l) + k, k, 35, 20, new TextComponent("BKSP"), (p) -> + this.addRenderableWidget(new Button(i * (i1 + l) + k, k, 35, 20, new TranslatableComponent("BKSP"), (p) -> { InputSimulator.pressKey(GLFW.GLFW_KEY_BACKSPACE); InputSimulator.releaseKey(GLFW.GLFW_KEY_BACKSPACE); })); - this.addRenderableWidget(new Button(i * (i1 + l) + k, k + 2 * (20 + l), 35, 20, new TextComponent("ENTER"), (p) -> + this.addRenderableWidget(new Button(i * (i1 + l) + k, k + 2 * (20 + l), 35, 20, new TranslatableComponent("ENTER"), (p) -> { InputSimulator.pressKey(GLFW.GLFW_KEY_ENTER); InputSimulator.releaseKey(GLFW.GLFW_KEY_ENTER); })); - this.addRenderableWidget(new Button(0, k + 20 + l, 30, 20, new TextComponent("TAB"), (p) -> + this.addRenderableWidget(new Button(0, k + 20 + l, 30, 20, new TranslatableComponent("TAB"), (p) -> { InputSimulator.pressKey(GLFW.GLFW_KEY_TAB); InputSimulator.releaseKey(GLFW.GLFW_KEY_TAB); })); - this.addRenderableWidget(new Button(0, k, 30, 20, new TextComponent("ESC"), (p) -> + this.addRenderableWidget(new Button(0, k, 30, 20, new TranslatableComponent("ESC"), (p) -> { InputSimulator.pressKey(GLFW.GLFW_KEY_ESCAPE); InputSimulator.releaseKey(GLFW.GLFW_KEY_ESCAPE); })); - this.addRenderableWidget(new Button((i - 1) * (i1 + l) + k, k + j * (20 + l), i1, 20, new TextComponent("\u2191"), (p) -> + this.addRenderableWidget(new Button((i - 1) * (i1 + l) + k, k + j * (20 + l), i1, 20, new TranslatableComponent("\u2191"), (p) -> { InputSimulator.pressKey(GLFW.GLFW_KEY_UP); InputSimulator.releaseKey(GLFW.GLFW_KEY_UP); })); - this.addRenderableWidget(new Button((i - 1) * (i1 + l) + k, k + (j + 1) * (20 + l), i1, 20, new TextComponent("\u2193"), (p) -> + this.addRenderableWidget(new Button((i - 1) * (i1 + l) + k, k + (j + 1) * (20 + l), i1, 20, new TranslatableComponent("\u2193"), (p) -> { InputSimulator.pressKey(GLFW.GLFW_KEY_DOWN); InputSimulator.releaseKey(GLFW.GLFW_KEY_DOWN); })); - this.addRenderableWidget(new Button((i - 2) * (i1 + l) + k, k + (j + 1) * (20 + l), i1, 20, new TextComponent("\u2190"), (p) -> + this.addRenderableWidget(new Button((i - 2) * (i1 + l) + k, k + (j + 1) * (20 + l), i1, 20, new TranslatableComponent("\u2190"), (p) -> { InputSimulator.pressKey(GLFW.GLFW_KEY_LEFT); InputSimulator.releaseKey(GLFW.GLFW_KEY_LEFT); })); - this.addRenderableWidget(new Button(i * (i1 + l) + k, k + (j + 1) * (20 + l), i1, 20, new TextComponent("\u2192"), (p) -> + this.addRenderableWidget(new Button(i * (i1 + l) + k, k + (j + 1) * (20 + l), i1, 20, new TranslatableComponent("\u2192"), (p) -> { InputSimulator.pressKey(GLFW.GLFW_KEY_RIGHT); InputSimulator.releaseKey(GLFW.GLFW_KEY_RIGHT); })); - this.addRenderableWidget(new Button(k, k + -1 * (20 + l), 35, 20, new TextComponent("CUT"), (p) -> + this.addRenderableWidget(new Button(k, k + -1 * (20 + l), 35, 20, new TranslatableComponent("CUT"), (p) -> { InputSimulator.pressKey(GLFW.GLFW_KEY_LEFT_CONTROL); InputSimulator.pressKey(GLFW.GLFW_KEY_X); InputSimulator.releaseKey(GLFW.GLFW_KEY_X); InputSimulator.releaseKey(GLFW.GLFW_KEY_LEFT_CONTROL); })); - this.addRenderableWidget(new Button(35 + l + k, k + -1 * (20 + l), 35, 20, new TextComponent("COPY"), (p) -> + this.addRenderableWidget(new Button(35 + l + k, k + -1 * (20 + l), 35, 20, new TranslatableComponent("COPY"), (p) -> { InputSimulator.pressKey(GLFW.GLFW_KEY_LEFT_CONTROL); InputSimulator.pressKey(GLFW.GLFW_KEY_C); InputSimulator.releaseKey(GLFW.GLFW_KEY_C); InputSimulator.releaseKey(GLFW.GLFW_KEY_LEFT_CONTROL); })); - this.addRenderableWidget(new Button(2 * (35 + l) + k, k + -1 * (20 + l), 35, 20, new TextComponent("PASTE"), (p) -> + this.addRenderableWidget(new Button(2 * (35 + l) + k, k + -1 * (20 + l), 35, 20, new TranslatableComponent("PASTE"), (p) -> { InputSimulator.pressKey(GLFW.GLFW_KEY_LEFT_CONTROL); InputSimulator.pressKey(GLFW.GLFW_KEY_V); diff --git a/common/src/main/java/org/vivecraft/gui/GuiRadial.java b/common/src/main/java/org/vivecraft/client_vr/gui/GuiRadial.java similarity index 94% rename from common/src/main/java/org/vivecraft/gui/GuiRadial.java rename to common/src/main/java/org/vivecraft/client_vr/gui/GuiRadial.java index 85c5bcae5..10c26c117 100644 --- a/common/src/main/java/org/vivecraft/gui/GuiRadial.java +++ b/common/src/main/java/org/vivecraft/client_vr/gui/GuiRadial.java @@ -1,8 +1,8 @@ -package org.vivecraft.gui; +package org.vivecraft.client_vr.gui; -import org.vivecraft.gui.framework.TwoHandedScreen; -import org.vivecraft.provider.MCVR; -import org.vivecraft.provider.openvr_jna.VRInputAction; +import org.vivecraft.client.gui.framework.TwoHandedScreen; +import org.vivecraft.client_vr.provider.MCVR; +import org.vivecraft.client_vr.provider.openvr_lwjgl.VRInputAction; import com.mojang.blaze3d.vertex.PoseStack; diff --git a/common/src/main/java/org/vivecraft/gui/PhysicalKeyboard.java b/common/src/main/java/org/vivecraft/client_vr/gui/PhysicalKeyboard.java similarity index 97% rename from common/src/main/java/org/vivecraft/gui/PhysicalKeyboard.java rename to common/src/main/java/org/vivecraft/client_vr/gui/PhysicalKeyboard.java index 14f09e4b8..be5282827 100644 --- a/common/src/main/java/org/vivecraft/gui/PhysicalKeyboard.java +++ b/common/src/main/java/org/vivecraft/client_vr/gui/PhysicalKeyboard.java @@ -1,4 +1,4 @@ -package org.vivecraft.gui; +package org.vivecraft.client_vr.gui; import java.io.File; import java.io.FileWriter; @@ -16,17 +16,17 @@ import org.lwjgl.glfw.GLFW; import org.lwjgl.opengl.GL11; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.gameplay.screenhandlers.GuiHandler; -import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; -import org.vivecraft.provider.ControllerType; -import org.vivecraft.provider.InputSimulator; -import org.vivecraft.provider.MCVR; -import org.vivecraft.settings.OptionEnum; -import org.vivecraft.utils.RGBAColor; -import org.vivecraft.utils.Utils; -import org.vivecraft.utils.lwjgl.Matrix4f; -import org.vivecraft.utils.lwjgl.Vector3f; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.gameplay.screenhandlers.GuiHandler; +import org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler; +import org.vivecraft.client_vr.provider.ControllerType; +import org.vivecraft.client_vr.provider.InputSimulator; +import org.vivecraft.client_vr.provider.MCVR; +import org.vivecraft.client_vr.settings.OptionEnum; +import org.vivecraft.client_vr.utils.RGBAColor; +import org.vivecraft.client.utils.Utils; +import org.vivecraft.common.utils.lwjgl.Matrix4f; +import org.vivecraft.common.utils.lwjgl.Vector3f; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; @@ -51,7 +51,7 @@ public class PhysicalKeyboard { private final Minecraft mc = Minecraft.getInstance(); - private ClientDataHolder dh = ClientDataHolder.getInstance(); + private ClientDataHolderVR dh = ClientDataHolderVR.getInstance(); private boolean reinit; private boolean shift; private boolean shiftSticky; diff --git a/common/src/main/java/org/vivecraft/client_vr/menuworlds/FakeBlockAccess.java b/common/src/main/java/org/vivecraft/client_vr/menuworlds/FakeBlockAccess.java new file mode 100644 index 000000000..c369d5e2a --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_vr/menuworlds/FakeBlockAccess.java @@ -0,0 +1,360 @@ +package org.vivecraft.client_vr.menuworlds; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.DimensionSpecialEffects; +import net.minecraft.core.*; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.ColorResolver; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.LightLayer; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeManager; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.border.WorldBorder; +import net.minecraft.world.level.chunk.ChunkAccess; +import net.minecraft.world.level.chunk.ChunkStatus; +import net.minecraft.world.level.dimension.DimensionType; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.lighting.LevelLightEngine; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class FakeBlockAccess implements LevelReader { + private int version; + private long seed; + private DimensionType dimensionType; + private boolean isFlat; + private BlockState[] blocks; + private byte[] skylightmap; + private byte[] blocklightmap; + private Biome[] biomemap; + + private short[][] heightmap; + private int xSize; + private int ySize; + private int zSize; + private float ground; + + // same as ground, but includes an optional vertical view offset + public float effectiveGround; + + private float rotation; + private boolean rain; + private boolean thunder; + + private BiomeManager biomeManager; + private DimensionSpecialEffects dimensionInfo; + + public FakeBlockAccess(int version, long seed, BlockState[] blocks, byte[] skylightmap, byte[] blocklightmap, Biome[] biomemap, short[][] heightmap, int xSize, int ySize, int zSize, int ground, DimensionType dimensionType, boolean isFlat, float rotation, boolean rain, boolean thunder) { + this.version = version; + this.seed = seed; + this.blocks = blocks; + this.skylightmap = skylightmap; + this.blocklightmap = blocklightmap; + this.biomemap = biomemap; + this.heightmap = heightmap; + this.xSize = xSize; + this.ySize = ySize; + this.zSize = zSize; + this.ground = ground - dimensionType.minY(); + this.dimensionType = dimensionType; + this.isFlat = isFlat; + + this.rotation = rotation; + this.rain = rain; + this.thunder = thunder; + + this.biomeManager = new BiomeManager(this, BiomeManager.obfuscateSeed(seed)); + this.dimensionInfo = DimensionSpecialEffects.forType(dimensionType); + + // set the ground to the height of the center block + BlockPos pos = new BlockPos(0, (int)this.ground, 0); + BlockState standing = blocks[encodeCoords(pos)]; + this.ground += Math.max(standing.getCollisionShape(this, pos).max(Direction.Axis.Y), 0.0); + this.effectiveGround = this.ground; + } + + private int encodeCoords(int x, int z) { + return z * xSize + x; + } + + private int encodeCoords(int x, int y, int z) { + return ((y+(int)effectiveGround) * zSize + (z+zSize/2)) * xSize + (x+xSize/2); + } + + private int encodeCoords(BlockPos pos) { + return encodeCoords(pos.getX(), pos.getY(), pos.getZ()); + } + + private boolean checkCoords(int x, int y, int z) { + return x >= -xSize/2 && y >= -(int)effectiveGround && z >= -zSize/2 && x < xSize/2 && y < ySize-(int)effectiveGround && z < zSize/2; + } + + private boolean checkCoords(BlockPos pos) { + return checkCoords(pos.getX(), pos.getY(), pos.getZ()); + } + + public float getGround() { + return effectiveGround; + } + + public void setGroundOffset(float offset) { + effectiveGround = ground + offset; + } + + public int getXSize() { + return xSize; + } + + public int getYSize() { + return ySize; + } + + public int getZSize() { + return zSize; + } + + public long getSeed() { + return seed; + } + + public float getRotation() { + return rotation; + } + public boolean getRain() { + return rain; + } + public boolean getThunder() { + return thunder; + } + + @Override + public DimensionType dimensionType() { + return dimensionType; + } + + public DimensionSpecialEffects getDimensionReaderInfo() { + return dimensionInfo; + } + + public double getVoidFogYFactor() { + return isFlat ? 1.0D : 0.03125D; + } + + public double getHorizon() { + return isFlat ? -effectiveGround : 63.0D-effectiveGround+getMinBuildHeight(); + } + + @Override + public BlockState getBlockState(BlockPos pos) { + if (!checkCoords(pos)) + return Blocks.BEDROCK.defaultBlockState(); + + BlockState state = blocks[encodeCoords(pos)]; + return state != null ? state : Blocks.AIR.defaultBlockState(); + } + + @Override + public FluidState getFluidState(BlockPos pos) { + return getBlockState(pos).getFluidState(); + } + + @Override + public BlockEntity getBlockEntity(BlockPos pos) { + return null; // You're a funny guy, I kill you last + } + + @Override + public int getBlockTint(BlockPos blockPosIn, ColorResolver colorResolverIn) { + int i = Minecraft.getInstance().options.biomeBlendRadius; + + if (i == 0) + { + return colorResolverIn.getColor(this.getBiome(blockPosIn).value(), blockPosIn.getX(), blockPosIn.getZ()); + } + else + { + int j = (i * 2 + 1) * (i * 2 + 1); + int k = 0; + int l = 0; + int i1 = 0; + Cursor3D cursor3D = new Cursor3D(blockPosIn.getX() - i, blockPosIn.getY(), blockPosIn.getZ() - i, blockPosIn.getX() + i, blockPosIn.getY(), blockPosIn.getZ() + i); + int j1; + + for (BlockPos.MutableBlockPos blockpos$mutable = new BlockPos.MutableBlockPos(); cursor3D.advance(); i1 += j1 & 255) + { + blockpos$mutable.set(cursor3D.nextX(), cursor3D.nextY(), cursor3D.nextZ()); + j1 = colorResolverIn.getColor(this.getBiome(blockpos$mutable).value(), (double)blockpos$mutable.getX(), (double)blockpos$mutable.getZ()); + k += (j1 & 16711680) >> 16; + l += (j1 & 65280) >> 8; + } + + return (k / j & 255) << 16 | (l / j & 255) << 8 | i1 / j & 255; + } + } + + @Override + public int getBrightness(LightLayer type, BlockPos pos) { + if (!checkCoords(pos)) + return (type != LightLayer.SKY || !this.dimensionType.hasSkyLight()) && type != LightLayer.BLOCK ? 0 : type.surrounding; + + if (type == LightLayer.SKY) + return this.dimensionType.hasSkyLight() ? skylightmap[encodeCoords(pos)] : 0; + else + return type == LightLayer.BLOCK ? blocklightmap[encodeCoords(pos)] : type.surrounding; + } + + @Override + public int getRawBrightness(BlockPos pos, int amount) { + if (!checkCoords(pos.getX(), 0, pos.getZ())) + return 0; + + if (pos.getY() < 0) { + return 0; + } else if (pos.getY() >= 256) { + int light = 15 - amount; + if (light < 0) + light = 0; + return light; + } else { + int light = (this.dimensionType.hasSkyLight() ? skylightmap[encodeCoords(pos)] : 0) - amount; + int blockLight = blocklightmap[encodeCoords(pos)]; + + if (blockLight > light) + light = blockLight; + return light; + } + } + + @Override + public float getShade(Direction face, boolean shade) { + boolean flag = this.dimensionInfo.constantAmbientLight(); // isNether?? yeah mate nice hard-coding + + if (!shade) { + return flag ? 0.9F : 1.0F; + } + else { + switch (face) { + case DOWN: + return flag ? 0.9F : 0.5F; + + case UP: + return flag ? 0.9F : 1.0F; + + case NORTH: + case SOUTH: + return 0.8F; + + case WEST: + case EAST: + return 0.6F; + + default: + return 1.0F; + } + } + } + + @Override + public boolean hasChunk(int x, int z) { + return checkCoords(x * 16, 0, z * 16); // :thonk: + } + + @Override + public ChunkAccess getChunk(int x, int z, ChunkStatus requiredStatus, boolean nonnull) { + return null; // �\_(?)_/� + } + + @Override + public int getHeight(Heightmap.Types heightmapType, int x, int z) { + if (heightmapType == Heightmap.Types.MOTION_BLOCKING) { + return getHeightBlocking(x, z); + } + return 0; // �\_(?)_/� + } + + public int getHeightBlocking(int x, int z) { + return heightmap[x+xSize/2][z+zSize/2] - (int)effectiveGround; + } + + @Override + public BlockPos getHeightmapPos(Heightmap.Types heightmapType, BlockPos pos) { + return BlockPos.ZERO; // �\_(?)_/� + } + + @Override + public int getSkyDarken() { + return 0; // idk this is just what RenderChunkCache does + } + + @Override + public WorldBorder getWorldBorder() { + return new WorldBorder(); + } + + @Override + public boolean isUnobstructed(Entity entityIn, VoxelShape shape) { + return false; // ??? + } + + @Override + public List getEntityCollisions(@Nullable Entity entityIn, AABB aabb) { + return Collections.emptyList(); // nani + } + + @Override + public boolean isEmptyBlock(BlockPos pos) { + return this.getBlockState(pos).isAir(); + } + + @Override + public Holder getNoiseBiome(int x, int y, int z) { + int xMoved = x + xSize/8; + int yMoved = y + (int)effectiveGround/4; + int zMoved = z + zSize/8; + if (!checkCoords(x * 4, y * 4, z * 4)) { + xMoved = Mth.clamp(xMoved, 0, xSize / 4 - 1); + yMoved = Mth.clamp(yMoved, 0, (ySize-(int)effectiveGround) / 4 - 1); + zMoved = Mth.clamp(zMoved, 0, zSize / 4 - 1); + } + return Holder.direct(biomemap[(yMoved * (zSize / 4) + zMoved) * (xSize / 4) + xMoved]); + } + + @Override + public int getDirectSignal(BlockPos pos, Direction direction) { + return 0; + } + + @Override + public boolean isClientSide() { + return false; + } + + @Override + public int getSeaLevel() { + return (int)(63-effectiveGround+getMinBuildHeight()); // magic number + } + + @Override + public LevelLightEngine getLightEngine() { + return null; // uh? + } + + @Override + public BiomeManager getBiomeManager() { + return biomeManager; + } + + @Override + public Holder getUncachedNoiseBiome(int x, int y, int z) { + return null; // don't need this + } +} diff --git a/common/src/main/java/org/vivecraft/client_vr/menuworlds/MenuWorldDownloader.java b/common/src/main/java/org/vivecraft/client_vr/menuworlds/MenuWorldDownloader.java new file mode 100644 index 000000000..e50e81345 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_vr/menuworlds/MenuWorldDownloader.java @@ -0,0 +1,138 @@ +package org.vivecraft.client_vr.menuworlds; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.security.NoSuchAlgorithmException; +import java.util.*; + +import net.minecraft.SharedConstants; +import org.vivecraft.client.utils.Utils; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.settings.VRSettings; + +public class MenuWorldDownloader { + private static final String baseUrl = "https://cache.techjargaming.com/vivecraft/115/"; + public static final String customWorldFolder = "menuworlds/custom_118"; + + private static String lastWorld = ""; + private static boolean init; + private static Random rand; + + public static void init() { + if (init) return; + rand = new Random(); + rand.nextInt(); + init = true; + } + + public static void downloadWorld(String path) throws IOException, NoSuchAlgorithmException { + File file = new File(path); + file.getParentFile().mkdirs(); + if (file.exists()) { + String localSha1 = Utils.getFileChecksum(file, "SHA-1"); + String remoteSha1 = Utils.httpReadLine(baseUrl + "checksum.php?file=" + path); + if (localSha1.equals(remoteSha1)) { + VRSettings.logger.info("MenuWorlds: SHA-1 matches for " + path); + return; + } + } + VRSettings.logger.info("MenuWorlds: Downloading world " + path); + Utils.httpReadToFile(baseUrl + path, file, true); + } + + public static InputStream getRandomWorld() throws IOException, NoSuchAlgorithmException { + init(); + VRSettings settings = ClientDataHolderVR.getInstance().vrSettings; + + try { + List worldList = new ArrayList<>(); + if (settings.menuWorldSelection == VRSettings.MenuWorld.BOTH || settings.menuWorldSelection == VRSettings.MenuWorld.CUSTOM) + worldList.addAll(getCustomWorlds()); + if (settings.menuWorldSelection == VRSettings.MenuWorld.BOTH || settings.menuWorldSelection == VRSettings.MenuWorld.OFFICIAL || worldList.size() == 0) + worldList.addAll(getOfficialWorlds()); + + // don't load the same world twice in a row + if (worldList.size() > 1) + worldList.removeIf(world -> lastWorld.equals(world.path) || (world.file != null && lastWorld.equals(world.file.getPath()))); + + if (worldList.size() == 0) + return getRandomWorldFallback(); + + MenuWorldItem world = getRandomWorldFromList(worldList); + if (world != null) { + lastWorld = world.file != null ? world.file.getPath() : world.path; + } + return getStreamForWorld(world); + } catch (IOException e) { + e.printStackTrace(); + return getRandomWorldFallback(); + } + } + + private static InputStream getStreamForWorld(MenuWorldItem world) throws IOException, NoSuchAlgorithmException { + if (world.file != null) { + VRSettings.logger.info("MenuWorlds: Using world " + world.file.getName()); + return new FileInputStream(world.file); + } else if (world.path != null) { + downloadWorld(world.path); + VRSettings.logger.info("MenuWorlds: Using official world " + world.path); + return new FileInputStream(world.path); + } else { + throw new IllegalArgumentException("File or path must be assigned"); + } + } + + private static List getCustomWorlds() throws IOException { + File dir = new File(customWorldFolder); + if (dir.exists()) + return getWorldsInDirectory(dir); + return new ArrayList<>(); + } + + private static List getOfficialWorlds() throws IOException { + List list = new ArrayList<>(); + List resultList = Utils.httpReadAllLines(baseUrl + "menuworlds_list.php?minver=" + MenuWorldExporter.MIN_VERSION + "&maxver=" + MenuWorldExporter.VERSION + "&mcver=" + SharedConstants.VERSION_STRING); + for (String str : resultList) + list.add(new MenuWorldItem("menuworlds/" + str, null)); + return list; + } + + private static InputStream getRandomWorldFallback() throws IOException, NoSuchAlgorithmException { + VRSettings.logger.info("MenuWorlds: Couldn't find a world, trying random file from directory"); + File dir = new File("menuworlds"); + if (dir.exists()) { + MenuWorldItem world = getRandomWorldFromList(getWorldsInDirectory(dir)); + if (world != null) + return getStreamForWorld(world); + } + return null; + } + + private static List getWorldsInDirectory(File dir) throws IOException { + List worlds = new ArrayList<>(); + for (File file : dir.listFiles(file -> file.isFile() && file.getName().toLowerCase().endsWith(".mmw"))) { + int version = MenuWorldExporter.readVersion(file); + if (version >= MenuWorldExporter.MIN_VERSION && version <= MenuWorldExporter.VERSION) + worlds.add(new MenuWorldItem(null, file)); + } + return worlds; + } + + private static MenuWorldItem getRandomWorldFromList(List list) { + if (list.size() > 0) + return list.get(rand.nextInt(list.size())); + return null; + } + + private static class MenuWorldItem { + final File file; + final String path; + + public MenuWorldItem(String path, File file) { + this.file = file; + this.path = path; + } + } +} diff --git a/common/src/main/java/org/vivecraft/client_vr/menuworlds/MenuWorldExporter.java b/common/src/main/java/org/vivecraft/client_vr/menuworlds/MenuWorldExporter.java new file mode 100644 index 000000000..d6eebd335 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_vr/menuworlds/MenuWorldExporter.java @@ -0,0 +1,703 @@ +package org.vivecraft.client_vr.menuworlds; + +import com.google.common.io.Files; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.OptionalLong; +import java.util.zip.DataFormatException; +import java.util.zip.Deflater; +import java.util.zip.Inflater; + +import net.minecraft.core.Registry; +import org.vivecraft.client_vr.settings.VRSettings; + +import com.mojang.datafixers.DataFixer; +import com.mojang.serialization.Dynamic; +import net.minecraft.SharedConstants; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.core.BlockPos; +import net.minecraft.core.RegistryAccess; +import net.minecraft.core.particles.ParticleOptions; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtAccounter; +import net.minecraft.nbt.NbtOps; +import net.minecraft.nbt.NbtUtils; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.CrudeIncrementalIntIdentityHashBiMap; +import net.minecraft.util.StringRepresentable; +import net.minecraft.util.datafix.DataFixers; +import net.minecraft.util.datafix.fixes.References; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LightLayer; +import net.minecraft.world.level.biome.AmbientParticleSettings; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeGenerationSettings; +import net.minecraft.world.level.biome.BiomeSpecialEffects; +import net.minecraft.world.level.biome.MobSpawnSettings; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.dimension.DimensionType; +import org.vivecraft.client.Xplat; + +public class MenuWorldExporter { + public static final int VERSION = 5; + public static final int MIN_VERSION = 2; + + private static final DataFixer dataFixer = DataFixers.getDataFixer(); + + public static byte[] saveArea(Level level, int xMin, int zMin, int xSize, int zSize, int ground) throws IOException { + BlockStateMapper blockStateMapper = new BlockStateMapper(); + PaletteBiomeMapper biomeMapper = new PaletteBiomeMapper(); + + int yMin = level.getMinBuildHeight(); + int ySize = level.getHeight(); + int[] blocks = new int[xSize * ySize * zSize]; + byte[] skylightmap = new byte[xSize * ySize * zSize]; + byte[] blocklightmap = new byte[xSize * ySize * zSize]; + int[] biomemap = new int[(xSize * ySize * zSize) / 64]; + for (int x = xMin; x < xMin + xSize; x++) { + int xl = x - xMin; + for (int z = zMin; z < zMin + zSize; z++) { + int zl = z - zMin; + for (int y = yMin; y < yMin + ySize; y++) { + int yl = y - yMin; + int index3 = (yl * zSize + zl) * xSize + xl; + BlockPos pos3 = new BlockPos(x, y, z); + BlockState state = level.getBlockState(pos3); + blocks[index3] = blockStateMapper.getId(state); + skylightmap[index3] = (byte)level.getBrightness(LightLayer.SKY, pos3); + blocklightmap[index3] = (byte)level.getBrightness(LightLayer.BLOCK, pos3); + + if (x % 4 == 0 && y % 4 == 0 && z % 4 == 0) { + int indexBiome = ((yl / 4) * (zSize / 4) + (zl / 4)) * (xSize / 4) + (xl / 4); + // getNoiseBiome expects pre-divided coordinates + biomemap[indexBiome] = biomeMapper.getId(level.getNoiseBiome(x / 4, y / 4, z / 4).value()); + } + } + } + } + + ByteArrayOutputStream data = new ByteArrayOutputStream(); + DataOutputStream dos = new DataOutputStream(data); + dos.writeInt(xSize); + dos.writeInt(ySize); + dos.writeInt(zSize); + dos.writeInt(ground); + dos.writeUTF(level.dimensionType().effectsLocation().toString()); + + if (level instanceof ServerLevel) + dos.writeBoolean(((ServerLevel)level).isFlat()); + else + dos.writeBoolean(((ClientLevel)level).getLevelData().isFlat); + + dos.writeBoolean(level.dimensionType().hasSkyLight()); + + if (level instanceof ServerLevel) + dos.writeLong(((ServerLevel)level).getSeed()); + else + dos.writeLong(level.getBiomeManager().biomeZoomSeed); // not really correct :/ + + dos.writeInt(SharedConstants.getCurrentVersion().getDataVersion().getVersion()); + + dos.writeBoolean(level.dimensionType().fixedTime.isPresent()); + if (level.dimensionType().fixedTime.isPresent()) + dos.writeLong(level.dimensionType().fixedTime.getAsLong()); + dos.writeBoolean(level.dimensionType().hasCeiling()); + dos.writeInt(level.dimensionType().minY()); + dos.writeFloat(level.dimensionType().ambientLight); + + dos.writeFloat(switch (Minecraft.getInstance().player.getDirection()) { + case SOUTH -> 180.0f; + case WEST -> -90.0f; + case EAST -> 90.0f; + default -> 0.0f; // also NORTH + }); + + dos.writeBoolean(level.getRainLevel(1.0f) > 0.0f); + dos.writeBoolean(level.getThunderLevel(1.0f) > 0.0f); + + blockStateMapper.writePalette(dos); + biomeMapper.writePalette(dos, level.registryAccess()); + + for (int i = 0; i < blocks.length; i++) { + dos.writeInt(blocks[i]); + } + + for (int i = 0; i < skylightmap.length; i++) { + dos.writeByte(skylightmap[i] | blocklightmap[i] << 4); + } + + for (int i = 0; i < biomemap.length; i++) { + dos.writeInt(biomemap[i]); + } + + Header header = new Header(); + header.version = VERSION; + header.uncompressedSize = data.size(); + + ByteArrayOutputStream output = new ByteArrayOutputStream(); + DataOutputStream headerStream = new DataOutputStream(output); + header.write(headerStream); + + Deflater deflater = new Deflater(9); + deflater.setInput(data.toByteArray()); + deflater.finish(); + byte[] buffer = new byte[1048576]; + while (!deflater.finished()) { + int len = deflater.deflate(buffer); + output.write(buffer, 0, len); + } + + return output.toByteArray(); + } + + public static void saveAreaToFile(Level world, int xMin, int zMin, int xSize, int zSize, int ground, File file) throws IOException { + byte[] bytes = saveArea(world, xMin, zMin, xSize, zSize, ground); + Files.write(bytes, file); + } + + public static FakeBlockAccess loadWorld(byte[] data) throws IOException, DataFormatException { + Header header = new Header(); + try (DataInputStream dis = new DataInputStream(new ByteArrayInputStream(data))) { + header.read(dis); + } + if (header.version > VERSION || header.version < MIN_VERSION) + throw new DataFormatException("Unsupported menu world version: " + header.version); + + Inflater inflater = new Inflater(); + inflater.setInput(data, Header.SIZE, data.length - Header.SIZE); + ByteArrayOutputStream output = new ByteArrayOutputStream(header.uncompressedSize); + byte[] buffer = new byte[1048576]; + while (!inflater.finished()) { + int len = inflater.inflate(buffer); + output.write(buffer, 0, len); + } + + DataInputStream dis = new DataInputStream(new ByteArrayInputStream(output.toByteArray())); + int xSize = dis.readInt(); + int ySize = dis.readInt(); + int zSize = dis.readInt(); + int ground = dis.readInt(); + + ResourceLocation dimName; + if (header.version < 4) { // old format + int dimId = dis.readInt(); + dimName = switch (dimId) { + case -1 -> DimensionType.NETHER_EFFECTS; + case 1 -> DimensionType.END_EFFECTS; + default -> DimensionType.OVERWORLD_EFFECTS; + }; + } else { + dimName = new ResourceLocation(dis.readUTF()); + } + + boolean isFlat; + + if (header.version < 4) // old format + isFlat = dis.readUTF().equals("flat"); + else + isFlat = dis.readBoolean(); + + boolean dimHasSkyLight = dis.readBoolean(); + + long seed = 0; + if (header.version >= 3) + seed = dis.readLong(); + + int dataVersion; + if (header.version == 2) + dataVersion = 1631; // assume 1.13.2 + else if (header.version == 3) + dataVersion = 2230; // assume 1.15.2 + else if (header.version == 4) + dataVersion = 2586; // assume 1.16.5 + else + dataVersion = dis.readInt(); // v5+ stores the real data version + + if (dataVersion > SharedConstants.getCurrentVersion().getDataVersion().getVersion()) + VRSettings.logger.warn("Data version is newer than current, this menu world may not load correctly."); + + OptionalLong dimFixedTime = OptionalLong.empty(); + boolean dimHasCeiling; + int dimMinY; + float dimAmbientLight; + + if (header.version < 5) { // fill in missing values + if (DimensionType.NETHER_EFFECTS.equals(dimName)) { + dimFixedTime = OptionalLong.of(18000L); + dimHasCeiling = true; + dimMinY = 0; + dimAmbientLight = 0.1f; + } else if (DimensionType.END_EFFECTS.equals(dimName)) { + dimFixedTime = OptionalLong.of(6000L); + dimHasCeiling = false; + dimMinY = 0; + dimAmbientLight = 0.0f; + } else { // overworld/default + dimHasCeiling = false; + dimMinY = 0; // pre-v5 worlds don't have deeper underground + dimAmbientLight = 0.0f; + } + } else { + if (dis.readBoolean()) + dimFixedTime = OptionalLong.of(dis.readLong()); + dimHasCeiling = dis.readBoolean(); + dimMinY = dis.readInt(); + dimAmbientLight = dis.readFloat(); + } + + DimensionType dimensionType = DimensionType.create(dimFixedTime, dimHasSkyLight, dimHasCeiling, false, false, 1.0, true, false, false, false, false, dimMinY, ySize, ySize, BlockTags.INFINIBURN_OVERWORLD, dimName, dimAmbientLight); + + float rotation = 0.0f; + boolean rain = false; + boolean thunder = false; + + if (header.version >= 5) { + rotation = dis.readFloat(); + rain = dis.readBoolean(); + thunder = dis.readBoolean(); + } + + BlockStateMapper blockStateMapper = new BlockStateMapper(); + blockStateMapper.readPalette(dis, dataVersion); + + BiomeMapper biomeMapper; + if (header.version >= 5) { + biomeMapper = new PaletteBiomeMapper(); + ((PaletteBiomeMapper)biomeMapper).readPalette(dis); + } else { + biomeMapper = new LegacyBiomeMapper(); + } + + BlockState[] blocks = new BlockState[xSize * ySize * zSize]; + for (int i = 0; i < blocks.length; i++) { + blocks[i] = blockStateMapper.getState(dis.readInt()); + } + + short[][] heightmap = new short[xSize][zSize]; + for (int x = 0; x < xSize; x++) { + for (int z = 0; z < zSize; z++) { + for (int y = ySize - 1; y >= 0; y--) { + int index = (y * zSize + z) * xSize + x; + if (blocks[index].getMaterial().blocksMotion() || !blocks[index].getFluidState().isEmpty()) { + heightmap[x][z] = (short)(y + 1); + break; + } + } + } + } + + byte[] skylightmap = new byte[xSize * ySize * zSize]; + byte[] blocklightmap = new byte[xSize * ySize * zSize]; + for (int i = 0; i < skylightmap.length; i++) { + int b = dis.readByte() & 0xFF; + skylightmap[i] = (byte)(b & 15); + blocklightmap[i] = (byte)(b >> 4); + } + + Biome[] biomemap = new Biome[xSize * ySize * zSize / 64]; + if (header.version == 2) { + Biome[] tempBiomemap = new Biome[xSize * zSize]; + for (int i = 0; i < tempBiomemap.length; i++) { + tempBiomemap[i] = biomeMapper.getBiome(dis.readInt()); + } + for (int x = 0; x < xSize / 4; x++) { + for (int z = 0; z < zSize / 4; z++) { + biomemap[z * (xSize / 4) + x] = tempBiomemap[(z * 4) * xSize + (x * 4)]; + } + } + int yStride = (xSize / 4) * (zSize / 4); + for (int y = 1; y < ySize / 4; y++) { + System.arraycopy(biomemap, 0, biomemap, yStride * y, yStride); + } + } else { + for (int i = 0; i < biomemap.length; i++) { + biomemap[i] = biomeMapper.getBiome(dis.readInt()); + } + } + + return new FakeBlockAccess(header.version, seed, blocks, skylightmap, blocklightmap, biomemap, heightmap, xSize, ySize, zSize, ground, dimensionType, isFlat, rotation, rain, thunder); + } + + public static FakeBlockAccess loadWorld(InputStream is) throws IOException, DataFormatException { + ByteArrayOutputStream data = new ByteArrayOutputStream(); + byte[] buffer = new byte[1048576]; + int count; + while ((count = is.read(buffer)) != -1) { + data.write(buffer, 0, count); + } + return loadWorld(data.toByteArray()); + } + + public static int readVersion(File file) throws IOException { + try (DataInputStream dis = new DataInputStream(new FileInputStream(file))) { + Header header = new Header(); + header.read(dis); + return header.version; + } + } + + private static Optional decodeEnum(Class type, String input) { + return Arrays.stream(type.getEnumConstants()).filter(e -> input.equals(((StringRepresentable)e).getSerializedName())).findFirst(); + } + + public static class Header { + public static final int SIZE = 8; + + public int version; + public int uncompressedSize; + + public void read(DataInputStream dis) throws IOException { + this.version = dis.readInt(); + this.uncompressedSize = dis.readInt(); + } + + public void write(DataOutputStream dos) throws IOException { + dos.writeInt(this.version); + dos.writeInt(this.uncompressedSize); + } + } + + private static class BlockStateMapper { + CrudeIncrementalIntIdentityHashBiMap paletteMap = CrudeIncrementalIntIdentityHashBiMap.create(256); + + private BlockStateMapper() { + } + + int getId(BlockState state) { + int id = this.paletteMap.getId(state); + return id == -1 ? this.paletteMap.add(state) : id; + } + + BlockState getState(int id) { + return this.paletteMap.byId(id); + } + + void readPalette(DataInputStream dis, int dataVersion) throws IOException { + this.paletteMap.clear(); + int size = dis.readInt(); + + for (int i = 0; i < size; i++) { + CompoundTag tag = CompoundTag.TYPE.load(dis, 0, NbtAccounter.UNLIMITED); + tag = (CompoundTag)dataFixer.update(References.BLOCK_STATE, new Dynamic<>(NbtOps.INSTANCE, tag), dataVersion, SharedConstants.getCurrentVersion().getDataVersion().getVersion()).getValue(); + this.paletteMap.add(NbtUtils.readBlockState(tag)); + } + } + + void writePalette(DataOutputStream dos) throws IOException { + dos.writeInt(this.paletteMap.size()); + + for (int i = 0; i < this.paletteMap.size(); i++) { + CompoundTag compoundtag = NbtUtils.writeBlockState(this.paletteMap.byId(i)); + compoundtag.write(dos); + } + } + } + + private interface BiomeMapper { + int getId(Biome biome); + Biome getBiome(int id); + } + + private static final BiomeGenerationSettings dummyGenerationSettings = new BiomeGenerationSettings.Builder().build(); + private static final MobSpawnSettings dummyMobSpawnSettings = new MobSpawnSettings.Builder().build(); + + private static class PaletteBiomeMapper implements BiomeMapper { + CrudeIncrementalIntIdentityHashBiMap paletteMap = CrudeIncrementalIntIdentityHashBiMap.create(256); + + private PaletteBiomeMapper() { + } + + @Override + public int getId(Biome biome) { + int id = this.paletteMap.getId(biome); + return id == -1 ? this.paletteMap.add(biome) : id; + } + + @Override + public Biome getBiome(int id) { + return this.paletteMap.byId(id); + } + + void readPalette(DataInputStream dis) throws IOException { + this.paletteMap.clear(); + int size = dis.readInt(); + + for (int i = 0; i < size; i++) { + Biome.BiomeBuilder builder = new Biome.BiomeBuilder(); + + dis.readUTF(); // registry key, not actually used though, just for reference + + boolean hasPrecipitation = dis.readBoolean(); + float temperature = dis.readFloat(); + builder.precipitation(hasPrecipitation ? (temperature < 0.15f ? Biome.Precipitation.SNOW : Biome.Precipitation.RAIN) : Biome.Precipitation.NONE); + builder.biomeCategory(Biome.BiomeCategory.NONE); + builder.temperature(temperature); + decodeEnum(Biome.TemperatureModifier.class, dis.readUTF()).ifPresent(builder::temperatureAdjustment); + builder.downfall(dis.readFloat()); + + BiomeSpecialEffects.Builder effectsBuilder = new BiomeSpecialEffects.Builder(); + effectsBuilder.fogColor(dis.readInt()); + effectsBuilder.waterColor(dis.readInt()); + effectsBuilder.waterFogColor(dis.readInt()); + effectsBuilder.skyColor(dis.readInt()); + + if (dis.readBoolean()) + effectsBuilder.foliageColorOverride(dis.readInt()); + + if (dis.readBoolean()) + effectsBuilder.grassColorOverride(dis.readInt()); + + decodeEnum(BiomeSpecialEffects.GrassColorModifier.class, dis.readUTF()).ifPresent(effectsBuilder::grassColorModifier); + + if (dis.readBoolean()) { + ParticleType particleType = Registry.PARTICLE_TYPE.get(new ResourceLocation(dis.readUTF())); + float probability = dis.readFloat(); + if (particleType instanceof ParticleOptions) + effectsBuilder.ambientParticle(new AmbientParticleSettings((ParticleOptions)particleType, probability)); + } + + Biome biome = builder.specialEffects(effectsBuilder.build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build(); + this.paletteMap.add(biome); + } + } + + void writePalette(DataOutputStream dos, RegistryAccess registryAccess) throws IOException { + dos.writeInt(this.paletteMap.size()); + + for (int i = 0; i < this.paletteMap.size(); i++) { + Biome biome = this.paletteMap.byId(i); + + dos.writeUTF(registryAccess.registryOrThrow(Registry.BIOME_REGISTRY).getKey(biome).toString()); + + Biome.ClimateSettings climateSettings = Xplat.getBiomeClimateSettings(biome); + + dos.writeBoolean(biome.getPrecipitation() != Biome.Precipitation.NONE); + dos.writeFloat(biome.getBaseTemperature()); + dos.writeUTF(climateSettings.temperatureModifier.getSerializedName()); + dos.writeFloat(biome.getDownfall()); + + BiomeSpecialEffects specialEffects = Xplat.getBiomeEffects(biome); + + dos.writeInt(specialEffects.getFogColor()); + dos.writeInt(specialEffects.getWaterColor()); + dos.writeInt(specialEffects.getWaterFogColor()); + dos.writeInt(specialEffects.getSkyColor()); + + dos.writeBoolean(specialEffects.getFoliageColorOverride().isPresent()); + if (specialEffects.getFoliageColorOverride().isPresent()) + dos.writeInt(specialEffects.getFoliageColorOverride().get()); + + dos.writeBoolean(specialEffects.getGrassColorOverride().isPresent()); + if (specialEffects.getGrassColorOverride().isPresent()) + dos.writeInt(specialEffects.getGrassColorOverride().get()); + + dos.writeUTF(specialEffects.getGrassColorModifier().getSerializedName()); + + dos.writeBoolean(specialEffects.getAmbientParticleSettings().isPresent()); + if (specialEffects.getAmbientParticleSettings().isPresent()) { + AmbientParticleSettings ambientParticleSettings = specialEffects.getAmbientParticleSettings().get(); + dos.writeUTF(Registry.PARTICLE_TYPE.getKey(ambientParticleSettings.getOptions().getType()).toString()); + dos.writeFloat(ambientParticleSettings.probability); + } + } + } + } + + private static class LegacyBiomeMapper implements BiomeMapper { + private static final Map map = new HashMap<>(); + static { + // big hard-coded map of biomes from 1.16 + // the commented line here is just a builder reference + //map.put(0, new Biome.BiomeBuilder().hasPrecipitation(true).temperature(1).temperatureAdjustment(Biome.TemperatureModifier.NONE).downfall(1).specialEffects(new BiomeSpecialEffects.Builder().fogColor(1).waterColor(1).waterFogColor(1).skyColor(1).foliageColorOverride(1).grassColorOverride(1).grassColorModifier(BiomeSpecialEffects.GrassColorModifier.NONE).ambientParticle(new AmbientParticleSettings((ParticleOptions)BuiltInRegistries.PARTICLE_TYPE.get(new ResourceLocation("")), 0)).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + + // plains + map.put(1, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.800000f).downfall(0.400000f).biomeCategory(Biome.BiomeCategory.PLAINS).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7907327).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // the_void + map.put(127, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(0.500000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.NONE).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8103167).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // ocean + map.put(0, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.500000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.OCEAN).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8103167).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // desert + map.put(2, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(2.000000f).downfall(0.000000f).biomeCategory(Biome.BiomeCategory.DESERT).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7254527).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // mountains + map.put(3, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.200000f).downfall(0.300000f).biomeCategory(Biome.BiomeCategory.EXTREME_HILLS).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8233727).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // forest + map.put(4, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.700000f).downfall(0.800000f).biomeCategory(Biome.BiomeCategory.FOREST).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7972607).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // taiga + map.put(5, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.250000f).downfall(0.800000f).biomeCategory(Biome.BiomeCategory.TAIGA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8233983).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // swamp + map.put(6, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.800000f).downfall(0.900000f).biomeCategory(Biome.BiomeCategory.SWAMP).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(6388580).waterFogColor(2302743).skyColor(7907327).foliageColorOverride(6975545).grassColorModifier(BiomeSpecialEffects.GrassColorModifier.SWAMP).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // river + map.put(7, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.500000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.RIVER).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8103167).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // nether_wastes + map.put(8, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(2.000000f).downfall(0.000000f).biomeCategory(Biome.BiomeCategory.NETHER).specialEffects(new BiomeSpecialEffects.Builder().fogColor(3344392).waterColor(4159204).waterFogColor(329011).skyColor(7254527).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // the_end + map.put(9, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(0.500000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.THEEND).specialEffects(new BiomeSpecialEffects.Builder().fogColor(10518688).waterColor(4159204).waterFogColor(329011).skyColor(0).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // frozen_ocean + map.put(10, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.SNOW).temperature(0.000000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.OCEAN).temperatureAdjustment(Biome.TemperatureModifier.FROZEN).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(3750089).waterFogColor(329011).skyColor(8364543).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // frozen_river + map.put(11, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.SNOW).temperature(0.000000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.RIVER).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(3750089).waterFogColor(329011).skyColor(8364543).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // snowy_tundra + map.put(12, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.SNOW).temperature(0.000000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.ICY).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8364543).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // snowy_mountains + map.put(13, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.SNOW).temperature(0.000000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.ICY).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8364543).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // mushroom_fields + map.put(14, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.900000f).downfall(1.000000f).biomeCategory(Biome.BiomeCategory.MUSHROOM).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7842047).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // mushroom_field_shore + map.put(15, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.900000f).downfall(1.000000f).biomeCategory(Biome.BiomeCategory.MUSHROOM).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7842047).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // beach + map.put(16, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.800000f).downfall(0.400000f).biomeCategory(Biome.BiomeCategory.BEACH).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7907327).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // desert_hills + map.put(17, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(2.000000f).downfall(0.000000f).biomeCategory(Biome.BiomeCategory.DESERT).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7254527).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // wooded_hills + map.put(18, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.700000f).downfall(0.800000f).biomeCategory(Biome.BiomeCategory.FOREST).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7972607).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // taiga_hills + map.put(19, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.250000f).downfall(0.800000f).biomeCategory(Biome.BiomeCategory.TAIGA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8233983).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // mountain_edge + map.put(20, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.200000f).downfall(0.300000f).biomeCategory(Biome.BiomeCategory.EXTREME_HILLS).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8233727).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // jungle + map.put(21, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.950000f).downfall(0.900000f).biomeCategory(Biome.BiomeCategory.JUNGLE).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7842047).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // jungle_hills + map.put(22, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.950000f).downfall(0.900000f).biomeCategory(Biome.BiomeCategory.JUNGLE).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7842047).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // jungle_edge + map.put(23, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.950000f).downfall(0.800000f).biomeCategory(Biome.BiomeCategory.JUNGLE).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7842047).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // deep_ocean + map.put(24, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.500000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.OCEAN).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8103167).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // stone_shore + map.put(25, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.200000f).downfall(0.300000f).biomeCategory(Biome.BiomeCategory.NONE).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8233727).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // snowy_beach + map.put(26, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.SNOW).temperature(0.050000f).downfall(0.300000f).biomeCategory(Biome.BiomeCategory.BEACH).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4020182).waterFogColor(329011).skyColor(8364543).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // birch_forest + map.put(27, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.600000f).downfall(0.600000f).biomeCategory(Biome.BiomeCategory.FOREST).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8037887).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // birch_forest_hills + map.put(28, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.600000f).downfall(0.600000f).biomeCategory(Biome.BiomeCategory.FOREST).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8037887).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // dark_forest + map.put(29, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.700000f).downfall(0.800000f).biomeCategory(Biome.BiomeCategory.FOREST).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7972607).grassColorModifier(BiomeSpecialEffects.GrassColorModifier.DARK_FOREST).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // snowy_taiga + map.put(30, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.SNOW).temperature(-0.500000f).downfall(0.400000f).biomeCategory(Biome.BiomeCategory.TAIGA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4020182).waterFogColor(329011).skyColor(8625919).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // snowy_taiga_hills + map.put(31, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.SNOW).temperature(-0.500000f).downfall(0.400000f).biomeCategory(Biome.BiomeCategory.TAIGA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4020182).waterFogColor(329011).skyColor(8625919).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // giant_tree_taiga + map.put(32, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.300000f).downfall(0.800000f).biomeCategory(Biome.BiomeCategory.TAIGA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8168447).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // giant_tree_taiga_hills + map.put(33, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.300000f).downfall(0.800000f).biomeCategory(Biome.BiomeCategory.TAIGA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8168447).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // wooded_mountains + map.put(34, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.200000f).downfall(0.300000f).biomeCategory(Biome.BiomeCategory.EXTREME_HILLS).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8233727).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // savanna + map.put(35, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(1.200000f).downfall(0.000000f).biomeCategory(Biome.BiomeCategory.SAVANNA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7711487).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // savanna_plateau + map.put(36, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(1.000000f).downfall(0.000000f).biomeCategory(Biome.BiomeCategory.SAVANNA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7776511).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // badlands + map.put(37, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(2.000000f).downfall(0.000000f).biomeCategory(Biome.BiomeCategory.MESA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7254527).foliageColorOverride(10387789).grassColorOverride(9470285).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // wooded_badlands_plateau + map.put(38, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(2.000000f).downfall(0.000000f).biomeCategory(Biome.BiomeCategory.MESA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7254527).foliageColorOverride(10387789).grassColorOverride(9470285).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // badlands_plateau + map.put(39, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(2.000000f).downfall(0.000000f).biomeCategory(Biome.BiomeCategory.MESA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7254527).foliageColorOverride(10387789).grassColorOverride(9470285).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // small_end_islands + map.put(40, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(0.500000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.THEEND).specialEffects(new BiomeSpecialEffects.Builder().fogColor(10518688).waterColor(4159204).waterFogColor(329011).skyColor(0).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // end_midlands + map.put(41, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(0.500000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.THEEND).specialEffects(new BiomeSpecialEffects.Builder().fogColor(10518688).waterColor(4159204).waterFogColor(329011).skyColor(0).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // end_highlands + map.put(42, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(0.500000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.THEEND).specialEffects(new BiomeSpecialEffects.Builder().fogColor(10518688).waterColor(4159204).waterFogColor(329011).skyColor(0).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // end_barrens + map.put(43, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(0.500000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.THEEND).specialEffects(new BiomeSpecialEffects.Builder().fogColor(10518688).waterColor(4159204).waterFogColor(329011).skyColor(0).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // warm_ocean + map.put(44, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.500000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.OCEAN).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4445678).waterFogColor(270131).skyColor(8103167).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // lukewarm_ocean + map.put(45, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.500000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.OCEAN).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4566514).waterFogColor(267827).skyColor(8103167).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // cold_ocean + map.put(46, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.500000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.OCEAN).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4020182).waterFogColor(329011).skyColor(8103167).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // deep_warm_ocean + map.put(47, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.500000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.OCEAN).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4445678).waterFogColor(270131).skyColor(8103167).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // deep_lukewarm_ocean + map.put(48, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.500000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.OCEAN).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4566514).waterFogColor(267827).skyColor(8103167).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // deep_cold_ocean + map.put(49, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.500000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.OCEAN).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4020182).waterFogColor(329011).skyColor(8103167).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // deep_frozen_ocean + map.put(50, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.500000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.OCEAN).temperatureAdjustment(Biome.TemperatureModifier.FROZEN).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(3750089).waterFogColor(329011).skyColor(8103167).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // sunflower_plains + map.put(129, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.800000f).downfall(0.400000f).biomeCategory(Biome.BiomeCategory.PLAINS).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7907327).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // desert_lakes + map.put(130, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(2.000000f).downfall(0.000000f).biomeCategory(Biome.BiomeCategory.DESERT).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7254527).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // gravelly_mountains + map.put(131, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.200000f).downfall(0.300000f).biomeCategory(Biome.BiomeCategory.EXTREME_HILLS).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8233727).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // flower_forest + map.put(132, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.700000f).downfall(0.800000f).biomeCategory(Biome.BiomeCategory.FOREST).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7972607).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // taiga_mountains + map.put(133, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.250000f).downfall(0.800000f).biomeCategory(Biome.BiomeCategory.TAIGA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8233983).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // swamp_hills + map.put(134, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.800000f).downfall(0.900000f).biomeCategory(Biome.BiomeCategory.SWAMP).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(6388580).waterFogColor(2302743).skyColor(7907327).foliageColorOverride(6975545).grassColorModifier(BiomeSpecialEffects.GrassColorModifier.SWAMP).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // ice_spikes + map.put(140, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.SNOW).temperature(0.000000f).downfall(0.500000f).biomeCategory(Biome.BiomeCategory.ICY).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8364543).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // modified_jungle + map.put(149, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.950000f).downfall(0.900000f).biomeCategory(Biome.BiomeCategory.JUNGLE).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7842047).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // modified_jungle_edge + map.put(151, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.950000f).downfall(0.800000f).biomeCategory(Biome.BiomeCategory.JUNGLE).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7842047).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // tall_birch_forest + map.put(155, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.600000f).downfall(0.600000f).biomeCategory(Biome.BiomeCategory.FOREST).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8037887).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // tall_birch_hills + map.put(156, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.600000f).downfall(0.600000f).biomeCategory(Biome.BiomeCategory.FOREST).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8037887).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // dark_forest_hills + map.put(157, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.700000f).downfall(0.800000f).biomeCategory(Biome.BiomeCategory.FOREST).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7972607).grassColorModifier(BiomeSpecialEffects.GrassColorModifier.DARK_FOREST).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // snowy_taiga_mountains + map.put(158, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.SNOW).temperature(-0.500000f).downfall(0.400000f).biomeCategory(Biome.BiomeCategory.TAIGA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4020182).waterFogColor(329011).skyColor(8625919).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // giant_spruce_taiga + map.put(160, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.250000f).downfall(0.800000f).biomeCategory(Biome.BiomeCategory.TAIGA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8233983).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // giant_spruce_taiga_hills + map.put(161, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.250000f).downfall(0.800000f).biomeCategory(Biome.BiomeCategory.TAIGA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8233983).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // modified_gravelly_mountains + map.put(162, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.200000f).downfall(0.300000f).biomeCategory(Biome.BiomeCategory.EXTREME_HILLS).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(8233727).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // shattered_savanna + map.put(163, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(1.100000f).downfall(0.000000f).biomeCategory(Biome.BiomeCategory.SAVANNA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7776767).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // shattered_savanna_plateau + map.put(164, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(1.000000f).downfall(0.000000f).biomeCategory(Biome.BiomeCategory.SAVANNA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7776511).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // eroded_badlands + map.put(165, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(2.000000f).downfall(0.000000f).biomeCategory(Biome.BiomeCategory.MESA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7254527).foliageColorOverride(10387789).grassColorOverride(9470285).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // modified_wooded_badlands_plateau + map.put(166, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(2.000000f).downfall(0.000000f).biomeCategory(Biome.BiomeCategory.MESA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7254527).foliageColorOverride(10387789).grassColorOverride(9470285).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // modified_badlands_plateau + map.put(167, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(2.000000f).downfall(0.000000f).biomeCategory(Biome.BiomeCategory.MESA).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7254527).foliageColorOverride(10387789).grassColorOverride(9470285).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // bamboo_jungle + map.put(168, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.950000f).downfall(0.900000f).biomeCategory(Biome.BiomeCategory.JUNGLE).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7842047).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // bamboo_jungle_hills + map.put(169, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.RAIN).temperature(0.950000f).downfall(0.900000f).biomeCategory(Biome.BiomeCategory.JUNGLE).specialEffects(new BiomeSpecialEffects.Builder().fogColor(12638463).waterColor(4159204).waterFogColor(329011).skyColor(7842047).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // soul_sand_valley + map.put(170, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(2.000000f).downfall(0.000000f).biomeCategory(Biome.BiomeCategory.NETHER).specialEffects(new BiomeSpecialEffects.Builder().fogColor(1787717).waterColor(4159204).waterFogColor(329011).skyColor(7254527).ambientParticle(new AmbientParticleSettings((ParticleOptions)Registry.PARTICLE_TYPE.get(new ResourceLocation("minecraft:ash")), 0.006250f)).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // crimson_forest + map.put(171, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(2.000000f).downfall(0.000000f).biomeCategory(Biome.BiomeCategory.NETHER).specialEffects(new BiomeSpecialEffects.Builder().fogColor(3343107).waterColor(4159204).waterFogColor(329011).skyColor(7254527).ambientParticle(new AmbientParticleSettings((ParticleOptions)Registry.PARTICLE_TYPE.get(new ResourceLocation("minecraft:crimson_spore")), 0.025000f)).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // warped_forest + map.put(172, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(2.000000f).downfall(0.000000f).biomeCategory(Biome.BiomeCategory.NETHER).specialEffects(new BiomeSpecialEffects.Builder().fogColor(1705242).waterColor(4159204).waterFogColor(329011).skyColor(7254527).ambientParticle(new AmbientParticleSettings((ParticleOptions)Registry.PARTICLE_TYPE.get(new ResourceLocation("minecraft:warped_spore")), 0.014280f)).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + // basalt_deltas + map.put(173, new Biome.BiomeBuilder().precipitation(Biome.Precipitation.NONE).temperature(2.000000f).downfall(0.000000f).biomeCategory(Biome.BiomeCategory.NETHER).specialEffects(new BiomeSpecialEffects.Builder().fogColor(6840176).waterColor(4159204).waterFogColor(4341314).skyColor(7254527).ambientParticle(new AmbientParticleSettings((ParticleOptions)Registry.PARTICLE_TYPE.get(new ResourceLocation("minecraft:white_ash")), 0.118093f)).build()).generationSettings(dummyGenerationSettings).mobSpawnSettings(dummyMobSpawnSettings).build()); + + } + + private LegacyBiomeMapper() { + } + + @Override + public int getId(Biome biome) { + throw new UnsupportedOperationException("this mapper does not support reversing biomes to IDs"); + } + + @Override + public Biome getBiome(int id) { + Biome biome = map.get(id); + return biome != null ? biome : map.get(1); + } + } +} diff --git a/common/src/main/java/org/vivecraft/client_vr/menuworlds/MenuWorldRenderer.java b/common/src/main/java/org/vivecraft/client_vr/menuworlds/MenuWorldRenderer.java new file mode 100644 index 000000000..381fa4696 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_vr/menuworlds/MenuWorldRenderer.java @@ -0,0 +1,1673 @@ +package org.vivecraft.client_vr.menuworlds; + +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.platform.NativeImage; +import com.mojang.blaze3d.shaders.FogShape; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.*; +import com.mojang.math.Matrix4f; +import com.mojang.math.Vector3f; +import net.minecraft.Util; +import net.minecraft.client.AmbientOcclusionStatus; +import net.minecraft.client.CloudStatus; +import net.minecraft.client.GraphicsStatus; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.block.BlockRenderDispatcher; +import net.minecraft.client.renderer.texture.*; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.FluidTags; +import net.minecraft.tags.TagKey; +import net.minecraft.util.CubicSampler; +import net.minecraft.util.Mth; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.LightLayer; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.dimension.DimensionType; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.material.FogType; +import net.minecraft.world.phys.Vec3; +import org.apache.commons.lang3.tuple.Pair; +import org.lwjgl.opengl.GL11; +import org.vivecraft.client.Xplat; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.mod_compat_vr.optifine.OptifineHelper; +import org.vivecraft.mod_compat_vr.sodium.SodiumHelper; + +import java.io.InputStream; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; + +public class MenuWorldRenderer { + private static final ResourceLocation MOON_LOCATION = new ResourceLocation("textures/environment/moon_phases.png"); + private static final ResourceLocation SUN_LOCATION = new ResourceLocation("textures/environment/sun.png"); + private static final ResourceLocation CLOUDS_LOCATION = new ResourceLocation("textures/environment/clouds.png"); + private static final ResourceLocation END_SKY_LOCATION = new ResourceLocation("textures/environment/end_sky.png"); + + private static final ResourceLocation FORCEFIELD_LOCATION = new ResourceLocation("textures/misc/forcefield.png"); + + private static final ResourceLocation RAIN_LOCATION = new ResourceLocation("textures/environment/rain.png"); + + private static final ResourceLocation SNOW_LOCATION = new ResourceLocation("textures/environment/snow.png"); + + private Minecraft mc; + private DimensionSpecialEffects dimensionInfo; + private FakeBlockAccess blockAccess; + private final DynamicTexture lightTexture; + private final NativeImage lightPixels; + private final ResourceLocation lightTextureLocation; + private boolean lightmapUpdateNeeded; + private float blockLightRedFlicker; + private int waterVisionTime; + + public int ticks = 0; + public long time = 1000; + public boolean fastTime; + private HashMap vertexBuffers; + private VertexBuffer starVBO; + private VertexBuffer skyVBO; + private VertexBuffer sky2VBO; + private VertexBuffer cloudVBO; + private int renderDistance; + private int renderDistanceChunks; + public MenuFogRenderer fogRenderer; + public Set visibleTextures = new HashSet<>(); + private Random rand; + private boolean ready; + private CloudStatus prevCloudsType; + private int prevCloudX; + private int prevCloudY; + private int prevCloudZ; + private Vec3 prevCloudColor; + private boolean generateClouds = true; + private int skyFlashTime; + private float rainLevel; + private float thunderLevel; + + private float worldRotation; + + private final float[] rainSizeX = new float[1024]; + private final float[] rainSizeZ = new float[1024]; + + private Set animatedSprites = null; + + public MenuWorldRenderer() { + this.mc = Minecraft.getInstance(); + this.lightTexture = new DynamicTexture(16, 16, false); + this.lightTextureLocation = mc.getTextureManager().register("vivecraft_light_map", this.lightTexture); + this.lightPixels = this.lightTexture.getPixels(); + this.fogRenderer = new MenuFogRenderer(this); + this.rand = new Random(); + this.rand.nextInt(); // toss some bits in the bin + } + + public void init() { + if (ClientDataHolderVR.getInstance().vrSettings.menuWorldSelection == VRSettings.MenuWorld.NONE) { + //VRSettings.logger.info("Main menu worlds disabled."); + return; + } + + try { + InputStream inputStream = MenuWorldDownloader.getRandomWorld(); + if (inputStream != null) { + VRSettings.logger.info("MenuWorlds: Initializing main menu world renderer..."); + loadRenderers(); + VRSettings.logger.info("MenuWorlds: Loading world data..."); + setWorld(MenuWorldExporter.loadWorld(inputStream)); + prepare(); + fastTime = new Random().nextInt(10) == 0; + } else { + VRSettings.logger.warn("Failed to load any main menu world, falling back to old menu room"); + } + } catch (Throwable e) { // Only effective way of preventing crash on poop computers with low heap size + if (e instanceof OutOfMemoryError || e.getCause() instanceof OutOfMemoryError) { + VRSettings.logger.error("OutOfMemoryError while loading main menu world. Low heap size or 32-bit Java?"); + } else { + VRSettings.logger.error("Exception thrown when loading main menu world, falling back to old menu room. \n {}", e.getMessage()); + } + e.printStackTrace(); + destroy(); + setWorld(null); + } + } + + + public void render(PoseStack poseStack) { + + // temporarily disable fabulous to render the menu world + GraphicsStatus current = mc.options.graphicsMode; + if (current == GraphicsStatus.FABULOUS) { + mc.options.graphicsMode = GraphicsStatus.FANCY; + } + + turnOnLightLayer(); + + poseStack.pushPose(); + + //rotate World + poseStack.mulPose(Vector3f.YP.rotationDegrees(worldRotation)); + + // small offset to center on source block, and add the partial block offset, this shouldn't be too noticable on the fog + poseStack.translate(-0.5,-blockAccess.getGround()+(int)blockAccess.getGround(),-0.5); + + // not sure why this needs to be rotated twice, but it works + Vec3 offset = new Vec3(0.5,-blockAccess.getGround()+(int)blockAccess.getGround(),0.5).yRot(worldRotation*0.0174533f); + Vec3 eyePosition = getEyePos().add(offset).yRot(-worldRotation*0.0174533f); + + fogRenderer.levelFogColor(); + + renderSky(poseStack, eyePosition); + + fogRenderer.setupFog(FogRenderer.FogMode.FOG_TERRAIN); + + RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + RenderSystem.enableBlend(); + + Matrix4f modelView = poseStack.last().pose(); + Matrix4f projection = RenderSystem.getProjectionMatrix(); + + RenderSystem.disableBlend(); + + renderChunkLayer(RenderType.solid(), modelView, projection); + renderChunkLayer(RenderType.cutoutMipped(), modelView, projection); + renderChunkLayer(RenderType.cutout(), modelView, projection); + + RenderSystem.enableBlend(); + + float cloudHeight = this.dimensionInfo.getCloudHeight(); + if (OptifineHelper.isOptifineLoaded()) { + cloudHeight += OptifineHelper.getCloudHeight() * 128.0; + } + + if (eyePosition.y+blockAccess.getGround()+blockAccess.getMinBuildHeight() < cloudHeight) { + renderClouds(poseStack, eyePosition.x, eyePosition.y+blockAccess.getGround()+blockAccess.getMinBuildHeight(), eyePosition.z); + } + + renderChunkLayer(RenderType.translucent(), modelView, projection); + renderChunkLayer(RenderType.tripwire(), modelView, projection); + + if (eyePosition.y+blockAccess.getGround()+blockAccess.getMinBuildHeight() >= cloudHeight) { + renderClouds(poseStack, eyePosition.x, eyePosition.y+blockAccess.getGround()+blockAccess.getMinBuildHeight(), eyePosition.z); + } + + RenderSystem.depthMask(false); + renderSnowAndRain(poseStack, eyePosition.x, 0, eyePosition.z); + RenderSystem.depthMask(true); + + poseStack.popPose(); + turnOffLightLayer(); + mc.options.graphicsMode = current; + } + + private void renderChunkLayer(RenderType layer, Matrix4f modelView, Matrix4f Projection) { + layer.setupRenderState(); + VertexBuffer vertexBuffer = vertexBuffers.get(layer); + vertexBuffer.bind(); + ShaderInstance shaderInstance = RenderSystem.getShader(); + shaderInstance.apply(); + turnOnLightLayer(); + vertexBuffer.drawWithShader(modelView, Projection, shaderInstance); + turnOffLightLayer(); + } + + public void prepare() { + if (vertexBuffers == null) { + VRSettings.logger.info("MenuWorlds: Building geometry..."); + AmbientOcclusionStatus ao = mc.options.ambientOcclusion; + mc.options.ambientOcclusion = AmbientOcclusionStatus.MAX; + + // disable redner regions during building, they mess with liquids + boolean optifineRenderRegions = false; + if (OptifineHelper.isOptifineLoaded()) { + optifineRenderRegions = OptifineHelper.isRenderRegions(); + OptifineHelper.setRenderRegions(false); + } + + ItemBlockRenderTypes.setFancy(true); + visibleTextures.clear(); + + // random offset to make the player fly + if (rand.nextInt(1000) == 0) { + blockAccess.setGroundOffset(100); + } + + try { + List layers = RenderType.chunkBufferLayers(); + vertexBuffers = new HashMap<>(); + animatedSprites = new HashSet<>(); + + // disable liquid chunk wrapping + ClientDataHolderVR.getInstance().skipStupidGoddamnChunkBoundaryClipping = true; + + if (!SodiumHelper.isLoaded() || !SodiumHelper.hasIssuesWithParallelBlockBuilding()) { + // generate the data in parallel + List>> futures = new ArrayList<>(); + for (RenderType layer : layers) { + futures.add(CompletableFuture.supplyAsync(() -> buildGeometryLayer(layer), Util.backgroundExecutor())); + } + for (Future> future : futures) { + try { + Pair pair = future.get(); + uploadGeometry(pair.getLeft(), pair.getRight()); + } catch (ExecutionException | InterruptedException e) { + throw new RuntimeException(e); + } + } + } else { + // generate the data in series + for (RenderType layer : layers) { + Pair pair = buildGeometryLayer(layer); + uploadGeometry(pair.getLeft(), pair.getRight()); + } + } + + copyVisibleTextures(); + ready = true; + } finally { + mc.options.ambientOcclusion = ao; + if (OptifineHelper.isOptifineLoaded()) { + OptifineHelper.setRenderRegions(optifineRenderRegions); + } + ClientDataHolderVR.getInstance().skipStupidGoddamnChunkBoundaryClipping = false; + } + } + } + + private Pair buildGeometryLayer(RenderType layer) { + PoseStack thisPose = new PoseStack(); + int renderDistSquare = (renderDistance + 1) * (renderDistance + 1); + BlockRenderDispatcher blockRenderer = mc.getBlockRenderer(); + + BufferBuilder vertBuffer = new BufferBuilder(20 * 2097152); + vertBuffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); + Random randomSource = new Random(); + int c = 0; + for (int x = -blockAccess.getXSize() / 2; x < blockAccess.getXSize() / 2; x++) { + for (int y = (int) -blockAccess.getGround(); y < blockAccess.getYSize() - (int) blockAccess.getGround(); y++) { + // don't build unnecessary blocks in tall worlds + if (Mth.abs(y) > renderDistance + 1) + continue; + for (int z = -blockAccess.getZSize() / 2; z < blockAccess.getZSize() / 2; z++) { + // don't build unnecessary blocks in fog + if (Mth.lengthSquared(x, z) > renderDistSquare) + continue; + + BlockPos pos = new BlockPos(x, y, z); + BlockState state = blockAccess.getBlockState(pos); + if (state != null) { + FluidState fluidState = state.getFluidState(); + if (!fluidState.isEmpty() && ItemBlockRenderTypes.getRenderLayer(fluidState) == layer) { + for (var sprite : Xplat.getFluidTextures(blockAccess, pos, fluidState)) { + if (sprite != null && sprite.getUniqueFrames().sum() > 1) { + animatedSprites.add(sprite); + } + } + blockRenderer.renderLiquid(pos, blockAccess, vertBuffer, state, new FluidStateWrapper(fluidState)); + c++; + } + if (state.getRenderShape() != RenderShape.INVISIBLE && ItemBlockRenderTypes.getChunkRenderType(state) == layer) { + for (var quad : mc.getModelManager().getBlockModelShaper().getBlockModel(state).getQuads(state, null, randomSource)) { + if (quad.getSprite().getUniqueFrames().sum() > 1) { + animatedSprites.add(quad.getSprite()); + } + } + thisPose.pushPose(); + thisPose.translate(pos.getX(), pos.getY(), pos.getZ()); + blockRenderer.renderBatched(state, pos, blockAccess, thisPose, vertBuffer, true, randomSource); + c++; + thisPose.popPose(); + } + } + } + } + } + VRSettings.logger.info("Built " + c + " blocks."); + if (layer == RenderType.translucent()) { + vertBuffer.setQuadSortOrigin(0, Mth.frac(blockAccess.getGround()), 0); + } + vertBuffer.end(); + return Pair.of(layer, vertBuffer); + } + + private void uploadGeometry(RenderType layer, BufferBuilder renderedBuffer) { + VertexBuffer buffer = new VertexBuffer(); + buffer.bind(); + buffer.upload(renderedBuffer); + VertexBuffer.unbind(); + vertexBuffers.put(layer, buffer); + } + + + public void destroy() { + if (vertexBuffers != null) { + for (VertexBuffer vertexBuffer : vertexBuffers.values()) { + if (vertexBuffer != null) vertexBuffer.close(); + } + vertexBuffers = null; + } + animatedSprites = null; + ready = false; + } + + public void completeDestroy() { + destroy(); + if (starVBO != null) starVBO.close(); + if (skyVBO != null) skyVBO.close(); + if (sky2VBO != null) sky2VBO.close(); + if (cloudVBO != null) cloudVBO.close(); + ready = false; + } + + public void tick() { + ticks++; + this.updateTorchFlicker(); + + if (this.areEyesInFluid(FluidTags.WATER)) + { + int i = 1; //this.isSpectator() ? 10 : 1; + this.waterVisionTime = Mth.clamp(this.waterVisionTime + i, 0, 600); + } + else if (this.waterVisionTime > 0) + { + this.areEyesInFluid(FluidTags.WATER); + this.waterVisionTime = Mth.clamp(this.waterVisionTime - 10, 0, 600); + } + if (SodiumHelper.isLoaded() && animatedSprites != null) { + for (TextureAtlasSprite sprite : animatedSprites) { + SodiumHelper.markTextureAsActive(sprite); + } + } + if (OptifineHelper.isOptifineLoaded()) { + for (TextureAtlasSprite sprite : animatedSprites) { + OptifineHelper.markTextureAsActive(sprite); + } + } + } + + public FakeBlockAccess getLevel() { + return blockAccess; + } + + public void setWorld(FakeBlockAccess blockAccess) { + this.blockAccess = blockAccess; + if (blockAccess != null) { + this.dimensionInfo = blockAccess.getDimensionReaderInfo(); + this.lightmapUpdateNeeded = true; + this.renderDistance = blockAccess.getXSize() / 2; + this.renderDistanceChunks = this.renderDistance / 16; + rainLevel = blockAccess.getRain() ? 1.0F : 0.0F; + thunderLevel = blockAccess.getThunder() ? 1.0F : 0.0F; + + worldRotation = blockAccess.getRotation(); + } + } + + public void loadRenderers() { + for (int i = 0; i < 32; ++i) { + for (int j = 0; j < 32; ++j) { + float f = j - 16; + float g = i - 16; + float h = Mth.sqrt(f * f + g * g); + this.rainSizeX[i << 5 | j] = -g / h; + this.rainSizeZ[i << 5 | j] = f / h; + } + } + + this.generateSky(); + this.generateSky2(); + this.generateStars(); + } + + public boolean isReady() { + return ready; + } + + // VanillaFix support + @SuppressWarnings("unchecked") + private void copyVisibleTextures() { + /*if (Reflector.VFTemporaryStorage.exists()) { + if (Reflector.VFTemporaryStorage_texturesUsed.exists()) { + visibleTextures.addAll((Collection)Reflector.getFieldValue(Reflector.VFTemporaryStorage_texturesUsed)); + } else if (Reflector.VFTextureAtlasSprite_needsAnimationUpdate.exists()) { + for (TextureAtlasSprite texture : (Collection)MCReflection.TextureMap_listAnimatedSprites.get(mc.getTextureMapBlocks())) { + if (Reflector.callBoolean(texture, Reflector.VFTextureAtlasSprite_needsAnimationUpdate)) + visibleTextures.add(texture); + } + } + }*/ + } + + @SuppressWarnings("unchecked") + public void pushVisibleTextures() { + /*if (Reflector.VFTemporaryStorage.exists()) { + if (Reflector.VFTemporaryStorage_texturesUsed.exists()) { + Collection coll = (Collection)Reflector.getFieldValue(Reflector.VFTemporaryStorage_texturesUsed); + coll.addAll(visibleTextures); + } else if (Reflector.VFTextureAtlasSprite_markNeedsAnimationUpdate.exists()) { + for (TextureAtlasSprite texture : visibleTextures) + Reflector.call(texture, Reflector.VFTextureAtlasSprite_markNeedsAnimationUpdate); + } + }*/ + } + // End VanillaFix support + + public void renderSky(PoseStack poseStack, Vec3 position) + { + if (this.dimensionInfo.skyType() == DimensionSpecialEffects.SkyType.END) + { + this.renderEndSky(poseStack); + } + else if (this.dimensionInfo.skyType() == DimensionSpecialEffects.SkyType.NORMAL) + { + RenderSystem.setShader(GameRenderer::getPositionShader); + fogRenderer.setupFog(FogRenderer.FogMode.FOG_SKY); + ShaderInstance skyShader = RenderSystem.getShader(); + RenderSystem.disableTexture(); + + Vec3 skyColor = this.getSkyColor(position); + + if (OptifineHelper.isOptifineLoaded()) { + skyColor = OptifineHelper.getCustomSkyColor(skyColor, blockAccess, position.x, position.y, position.z); + } + + fogRenderer.levelFogColor(); + + BufferBuilder bufferBuilder = Tesselator.getInstance().getBuilder(); + RenderSystem.depthMask(false); + RenderSystem.setShaderColor((float)skyColor.x, (float)skyColor.y, (float)skyColor.z, 1.0f); + + + if (!OptifineHelper.isOptifineLoaded() || OptifineHelper.isSkyEnabled()) + { + this.skyVBO.bind(); + this.skyVBO.drawWithShader(poseStack.last().pose(), RenderSystem.getProjectionMatrix(), skyShader); + VertexBuffer.unbind(); + } + + RenderSystem.enableBlend(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + + float[] sunriseColor = this.dimensionInfo.getSunriseColor(this.getTimeOfDay(), 0); // calcSunriseSunsetColors + + if (sunriseColor != null && (!OptifineHelper.isOptifineLoaded() || OptifineHelper.isSunMoonEnabled())) + { + RenderSystem.disableTexture(); + RenderSystem.setShader(GameRenderer::getPositionColorShader); + RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); + poseStack.pushPose(); + + poseStack.mulPose(Vector3f.XP.rotationDegrees(90.0f)); + poseStack.mulPose(Vector3f.ZP.rotationDegrees(Mth.sin(this.getSunAngle()) < 0.0f ? 180.0f : 0.0f)); + poseStack.mulPose(Vector3f.ZP.rotationDegrees(90.0f)); + + Matrix4f modelView = poseStack.last().pose(); + bufferBuilder.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION_COLOR); + bufferBuilder + .vertex(modelView, 0.0f, 100.0f, 0.0f) + .color(sunriseColor[0], sunriseColor[1], sunriseColor[2], sunriseColor[3]) + .endVertex(); + + for (int j = 0; j <= 16; ++j) + { + float f6 = (float)j * ((float)Math.PI * 2F) / 16.0F; + float f7 = Mth.sin(f6); + float f8 = Mth.cos(f6); + bufferBuilder + .vertex(modelView, f7 * 120.0F, f8 * 120.0F, -f8 * 40.0F * sunriseColor[3]) + .color(sunriseColor[0], sunriseColor[1], sunriseColor[2], 0.0F) + .endVertex(); + } + + bufferBuilder.end(); + BufferUploader.end(bufferBuilder); + poseStack.popPose(); + } + + RenderSystem.enableTexture(); + + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + poseStack.pushPose(); + + float f10 = 1.0F - getRainLevel(); + RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, f10); + poseStack.mulPose(Vector3f.YP.rotationDegrees(-90.0f)); + Matrix4f modelView = poseStack.last().pose(); + + //if (OptifineHelper.isOptifineLoaded()) { + // needs a full Level + //CustomSky.renderSky(this.world, poseStack, Minecraft.getInstance().getFrameTime()); + //} + + poseStack.mulPose(Vector3f.XP.rotationDegrees(this.getTimeOfDay() * 360.0f)); + + float size = 30.0F; + if (!OptifineHelper.isOptifineLoaded() || OptifineHelper.isSunMoonEnabled()) + { + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderTexture(0, SUN_LOCATION); + bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + bufferBuilder.vertex(modelView, -size, 100.0F, -size).uv(0.0F, 0.0F).endVertex(); + bufferBuilder.vertex(modelView, size, 100.0F, -size).uv(1.0F, 0.0F).endVertex(); + bufferBuilder.vertex(modelView, size, 100.0F, size).uv(1.0F, 1.0F).endVertex(); + bufferBuilder.vertex(modelView, -size, 100.0F, size).uv(0.0F, 1.0F).endVertex(); + bufferBuilder.end(); + BufferUploader.end(bufferBuilder); + } + + size = 20.0F; + if (!OptifineHelper.isOptifineLoaded() || OptifineHelper.isSunMoonEnabled()) + { + RenderSystem.setShaderTexture(0, MOON_LOCATION); + int moonPhase = this.getMoonPhase(); + int l = moonPhase % 4; + int i1 = moonPhase / 4 % 2; + float u0 = (float)(l + 0) / 4.0F; + float v0 = (float)(i1 + 0) / 2.0F; + float u1 = (float)(l + 1) / 4.0F; + float v1 = (float)(i1 + 1) / 2.0F; + bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + bufferBuilder.vertex(modelView, -size, -100.0f, size).uv(u0, v1).endVertex(); + bufferBuilder.vertex(modelView, size, -100.0f, size).uv(u1, v1).endVertex(); + bufferBuilder.vertex(modelView, size, -100.0f, -size).uv(u1, v0).endVertex(); + bufferBuilder.vertex(modelView, -size, -100.0f, -size).uv(u0, v0).endVertex(); + bufferBuilder.end(); + BufferUploader.end(bufferBuilder); + } + + RenderSystem.disableTexture(); + + float starBrightness = this.getStarBrightness() * f10; + + if (starBrightness > 0.0F && (!OptifineHelper.isOptifineLoaded() || OptifineHelper.isStarsEnabled()) /*&& !CustomSky.hasSkyLayers(this.world)*/) + { + RenderSystem.setShaderColor(starBrightness, starBrightness, starBrightness, starBrightness); + fogRenderer.setupNoFog(); + this.starVBO.bind(); + this.starVBO.drawWithShader(poseStack.last().pose(), RenderSystem.getProjectionMatrix(), GameRenderer.getPositionShader()); + VertexBuffer.unbind(); + fogRenderer.setupFog(FogRenderer.FogMode.FOG_SKY); + } + + RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); + RenderSystem.disableBlend(); + RenderSystem.defaultBlendFunc(); + + poseStack.popPose(); + RenderSystem.disableTexture(); + + double horizonDistance = position.y - this.blockAccess.getHorizon(); + + if (horizonDistance < 0.0D) + { + RenderSystem.setShaderColor(0.0f, 0.0f, 0.0f, 1.0f); + poseStack.pushPose(); + poseStack.translate(0.0f, 12.0f, 0.0f); + this.sky2VBO.bind(); + this.sky2VBO.drawWithShader(poseStack.last().pose(), RenderSystem.getProjectionMatrix(), skyShader); + VertexBuffer.unbind(); + poseStack.popPose(); + } + + RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); + RenderSystem.depthMask(true); + } + } + + private void renderEndSky(PoseStack poseStack) + { + if (!OptifineHelper.isOptifineLoaded() || OptifineHelper.isSkyEnabled()) + { + RenderSystem.enableBlend(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + RenderSystem.depthMask(false); + RenderSystem.setShader(GameRenderer::getPositionTexColorShader); + RenderSystem.setShaderTexture(0, END_SKY_LOCATION); + Tesselator tesselator = Tesselator.getInstance(); + BufferBuilder bufferBuilder = tesselator.getBuilder(); + + for (int i = 0; i < 6; ++i) + { + poseStack.pushPose(); + switch (i) { + case 1 -> poseStack.mulPose(Vector3f.XP.rotationDegrees(90.0f)); + case 2 -> poseStack.mulPose(Vector3f.XP.rotationDegrees(-90.0f)); + case 3 -> poseStack.mulPose(Vector3f.XP.rotationDegrees(180.0f)); + case 4 -> poseStack.mulPose(Vector3f.ZP.rotationDegrees(90.0f)); + case 5 -> poseStack.mulPose(Vector3f.ZP.rotationDegrees(-90.0f)); + } + + Matrix4f modelView = poseStack.last().pose(); + bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); + + int r = 40; + int g = 40; + int b = 40; + + if (OptifineHelper.isOptifineLoaded() && OptifineHelper.isCustomColors()) + { + Vec3 newSkyColor = new Vec3((double)r / 255.0D, (double)g / 255.0D, (double)b / 255.0D); + newSkyColor = OptifineHelper.getCustomSkyColorEnd(newSkyColor); + r = (int)(newSkyColor.x * 255.0D); + g = (int)(newSkyColor.y * 255.0D); + b = (int)(newSkyColor.z * 255.0D); + } + bufferBuilder.vertex(modelView, -100.0f, -100.0f, -100.0f).uv( 0.0f, 0.0f).color(r, g, b, 255).endVertex(); + bufferBuilder.vertex(modelView, -100.0f, -100.0f, 100.0f).uv( 0.0f, 16.0f).color(r, g, b, 255).endVertex(); + bufferBuilder.vertex(modelView, 100.0f, -100.0f, 100.0f).uv(16.0f, 16.0f).color(r, g, b, 255).endVertex(); + bufferBuilder.vertex(modelView, 100.0f, -100.0f, -100.0f).uv(16.0f, 0.0f).color(r, g, b, 255).endVertex(); + tesselator.end(); + poseStack.popPose(); + } + + RenderSystem.depthMask(true); + RenderSystem.disableBlend(); + } + } + + public void renderClouds(PoseStack poseStack, double x, double y, double z) + { + float cloudHeight = this.dimensionInfo.getCloudHeight(); + + if (!Float.isNaN(cloudHeight) && this.mc.options.getCloudsType() != CloudStatus.OFF) { + // setup clouds + + RenderSystem.disableCull(); + RenderSystem.enableBlend(); + RenderSystem.enableDepthTest(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + RenderSystem.depthMask(true); + + float cloudSizeXZ = 12.0f; + float cloudSizeY = 4.0f; + double cloudOffset = ((float) ticks + mc.getFrameTime()) * 0.03f; + double cloudX = (x + cloudOffset) / 12.0; + double cloudY = cloudHeight - y + 0.33; + if (OptifineHelper.isOptifineLoaded()) { + cloudY = cloudY + OptifineHelper.getCloudHeight() * 128.0; + } + + double cloudZ = z / 12.0 + 0.33; + cloudX -= Mth.floor(cloudX / 2048.0) * 2048; + cloudZ -= Mth.floor(cloudZ / 2048.0) * 2048; + float cloudXfract = (float) (cloudX - (double) Mth.floor(cloudX)); + float cloudYfract = (float) (cloudY / 4.0 - (double) Mth.floor(cloudY / 4.0)) * 4.0f; + float cloudZfract = (float) (cloudZ - (double) Mth.floor(cloudZ)); + + Vec3 cloudColor = this.getCloudColour(); + int cloudXfloor = (int) Math.floor(cloudX); + int cloudYfloor = (int) Math.floor(cloudY / 4.0); + int cloudZfloor = (int) Math.floor(cloudZ); + if (cloudXfloor != this.prevCloudX || + cloudYfloor != this.prevCloudY || + cloudZfloor != this.prevCloudZ || + this.mc.options.getCloudsType() != this.prevCloudsType || + this.prevCloudColor.distanceToSqr(cloudColor) > 2.0E-4) + { + this.prevCloudX = cloudXfloor; + this.prevCloudY = cloudYfloor; + this.prevCloudZ = cloudZfloor; + this.prevCloudColor = cloudColor; + this.prevCloudsType = this.mc.options.getCloudsType(); + this.generateClouds = true; + } + if (this.generateClouds) { + this.generateClouds = false; + BufferBuilder bufferBuilder = Tesselator.getInstance().getBuilder(); + if (this.cloudVBO != null) { + this.cloudVBO.close(); + } + this.cloudVBO = new VertexBuffer(); + this.buildClouds(bufferBuilder, cloudX, cloudY, cloudZ, cloudColor); + this.cloudVBO.bind(); + this.cloudVBO.upload(bufferBuilder); + VertexBuffer.unbind(); + } + + // render + RenderSystem.setShader(GameRenderer::getPositionTexColorNormalShader); + RenderSystem.setShaderTexture(0, CLOUDS_LOCATION); + fogRenderer.levelFogColor(); + poseStack.pushPose(); + poseStack.scale(12.0f, 1.0f, 12.0f); + poseStack.translate(-cloudXfract, cloudYfract, -cloudZfract); + if (this.cloudVBO != null) { + this.cloudVBO.bind(); + // probably rendered twice, so only the front faces are there? + for (int w = this.prevCloudsType == CloudStatus.FANCY ? 0 : 1; w < 2; ++w) { + if (w == 0) { + RenderSystem.colorMask(false, false, false, false); + } else { + RenderSystem.colorMask(true, true, true, true); + } + this.cloudVBO.drawWithShader(poseStack.last().pose(), RenderSystem.getProjectionMatrix(), RenderSystem.getShader()); + } + VertexBuffer.unbind(); + } + poseStack.popPose(); + RenderSystem.enableCull(); + RenderSystem.disableBlend(); + RenderSystem.defaultBlendFunc(); + } + } + + private void buildClouds(BufferBuilder bufferBuilder, double cloudX, double cloudY, double cloudZ, Vec3 cloudColor) { + float l = (float)Mth.floor(cloudX) * 0.00390625f; + float m = (float)Mth.floor(cloudZ) * 0.00390625f; + float redTop = (float)cloudColor.x; + float greenTop = (float)cloudColor.y; + float blueTop = (float)cloudColor.z; + float redX = redTop * 0.9f; + float greenX = greenTop * 0.9f; + float blueX = blueTop * 0.9f; + float redBottom = redTop * 0.7f; + float greenBottom = greenTop * 0.7f; + float blueBottom = blueTop * 0.7f; + float redZ = redTop * 0.8f; + float greenZ = greenTop * 0.8f; + float blueZ = blueTop * 0.8f; + RenderSystem.setShader(GameRenderer::getPositionTexColorNormalShader); + bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR_NORMAL); + float z = (float)Math.floor(cloudY / 4.0) * 4.0f; + if (this.prevCloudsType == CloudStatus.FANCY) { + for (int aa = -3; aa <= 4; ++aa) { + for (int ab = -3; ab <= 4; ++ab) { + int ae; + float ac = aa * 8; + float ad = ab * 8; + if (z > -5.0f) { + bufferBuilder.vertex(ac + 0.0f, z + 0.0f, ad + 8.0f).uv((ac + 0.0f) * 0.00390625f + l, (ad + 8.0f) * 0.00390625f + m).color(redBottom, greenBottom, blueBottom, 0.8f).normal(0.0f, -1.0f, 0.0f).endVertex(); + bufferBuilder.vertex(ac + 8.0f, z + 0.0f, ad + 8.0f).uv((ac + 8.0f) * 0.00390625f + l, (ad + 8.0f) * 0.00390625f + m).color(redBottom, greenBottom, blueBottom, 0.8f).normal(0.0f, -1.0f, 0.0f).endVertex(); + bufferBuilder.vertex(ac + 8.0f, z + 0.0f, ad + 0.0f).uv((ac + 8.0f) * 0.00390625f + l, (ad + 0.0f) * 0.00390625f + m).color(redBottom, greenBottom, blueBottom, 0.8f).normal(0.0f, -1.0f, 0.0f).endVertex(); + bufferBuilder.vertex(ac + 0.0f, z + 0.0f, ad + 0.0f).uv((ac + 0.0f) * 0.00390625f + l, (ad + 0.0f) * 0.00390625f + m).color(redBottom, greenBottom, blueBottom, 0.8f).normal(0.0f, -1.0f, 0.0f).endVertex(); + } + if (z <= 5.0f) { + bufferBuilder.vertex(ac + 0.0f, z + 4.0f - 9.765625E-4f, ad + 8.0f).uv((ac + 0.0f) * 0.00390625f + l, (ad + 8.0f) * 0.00390625f + m).color(redTop, greenTop, blueTop, 0.8f).normal(0.0f, 1.0f, 0.0f).endVertex(); + bufferBuilder.vertex(ac + 8.0f, z + 4.0f - 9.765625E-4f, ad + 8.0f).uv((ac + 8.0f) * 0.00390625f + l, (ad + 8.0f) * 0.00390625f + m).color(redTop, greenTop, blueTop, 0.8f).normal(0.0f, 1.0f, 0.0f).endVertex(); + bufferBuilder.vertex(ac + 8.0f, z + 4.0f - 9.765625E-4f, ad + 0.0f).uv((ac + 8.0f) * 0.00390625f + l, (ad + 0.0f) * 0.00390625f + m).color(redTop, greenTop, blueTop, 0.8f).normal(0.0f, 1.0f, 0.0f).endVertex(); + bufferBuilder.vertex(ac + 0.0f, z + 4.0f - 9.765625E-4f, ad + 0.0f).uv((ac + 0.0f) * 0.00390625f + l, (ad + 0.0f) * 0.00390625f + m).color(redTop, greenTop, blueTop, 0.8f).normal(0.0f, 1.0f, 0.0f).endVertex(); + } + if (aa > -1) { + for (ae = 0; ae < 8; ++ae) { + bufferBuilder.vertex(ac + (float)ae + 0.0f, z + 0.0f, ad + 8.0f).uv((ac + (float)ae + 0.5f) * 0.00390625f + l, (ad + 8.0f) * 0.00390625f + m).color(redX, greenX, blueX, 0.8f).normal(-1.0f, 0.0f, 0.0f).endVertex(); + bufferBuilder.vertex(ac + (float)ae + 0.0f, z + 4.0f, ad + 8.0f).uv((ac + (float)ae + 0.5f) * 0.00390625f + l, (ad + 8.0f) * 0.00390625f + m).color(redX, greenX, blueX, 0.8f).normal(-1.0f, 0.0f, 0.0f).endVertex(); + bufferBuilder.vertex(ac + (float)ae + 0.0f, z + 4.0f, ad + 0.0f).uv((ac + (float)ae + 0.5f) * 0.00390625f + l, (ad + 0.0f) * 0.00390625f + m).color(redX, greenX, blueX, 0.8f).normal(-1.0f, 0.0f, 0.0f).endVertex(); + bufferBuilder.vertex(ac + (float)ae + 0.0f, z + 0.0f, ad + 0.0f).uv((ac + (float)ae + 0.5f) * 0.00390625f + l, (ad + 0.0f) * 0.00390625f + m).color(redX, greenX, blueX, 0.8f).normal(-1.0f, 0.0f, 0.0f).endVertex(); + } + } + if (aa <= 1) { + for (ae = 0; ae < 8; ++ae) { + bufferBuilder.vertex(ac + (float)ae + 1.0f - 9.765625E-4f, z + 0.0f, ad + 8.0f).uv((ac + (float)ae + 0.5f) * 0.00390625f + l, (ad + 8.0f) * 0.00390625f + m).color(redX, greenX, blueX, 0.8f).normal(1.0f, 0.0f, 0.0f).endVertex(); + bufferBuilder.vertex(ac + (float)ae + 1.0f - 9.765625E-4f, z + 4.0f, ad + 8.0f).uv((ac + (float)ae + 0.5f) * 0.00390625f + l, (ad + 8.0f) * 0.00390625f + m).color(redX, greenX, blueX, 0.8f).normal(1.0f, 0.0f, 0.0f).endVertex(); + bufferBuilder.vertex(ac + (float)ae + 1.0f - 9.765625E-4f, z + 4.0f, ad + 0.0f).uv((ac + (float)ae + 0.5f) * 0.00390625f + l, (ad + 0.0f) * 0.00390625f + m).color(redX, greenX, blueX, 0.8f).normal(1.0f, 0.0f, 0.0f).endVertex(); + bufferBuilder.vertex(ac + (float)ae + 1.0f - 9.765625E-4f, z + 0.0f, ad + 0.0f).uv((ac + (float)ae + 0.5f) * 0.00390625f + l, (ad + 0.0f) * 0.00390625f + m).color(redX, greenX, blueX, 0.8f).normal(1.0f, 0.0f, 0.0f).endVertex(); + } + } + if (ab > -1) { + for (ae = 0; ae < 8; ++ae) { + bufferBuilder.vertex(ac + 0.0f, z + 4.0f, ad + (float)ae + 0.0f).uv((ac + 0.0f) * 0.00390625f + l, (ad + (float)ae + 0.5f) * 0.00390625f + m).color(redZ, greenZ, blueZ, 0.8f).normal(0.0f, 0.0f, -1.0f).endVertex(); + bufferBuilder.vertex(ac + 8.0f, z + 4.0f, ad + (float)ae + 0.0f).uv((ac + 8.0f) * 0.00390625f + l, (ad + (float)ae + 0.5f) * 0.00390625f + m).color(redZ, greenZ, blueZ, 0.8f).normal(0.0f, 0.0f, -1.0f).endVertex(); + bufferBuilder.vertex(ac + 8.0f, z + 0.0f, ad + (float)ae + 0.0f).uv((ac + 8.0f) * 0.00390625f + l, (ad + (float)ae + 0.5f) * 0.00390625f + m).color(redZ, greenZ, blueZ, 0.8f).normal(0.0f, 0.0f, -1.0f).endVertex(); + bufferBuilder.vertex(ac + 0.0f, z + 0.0f, ad + (float)ae + 0.0f).uv((ac + 0.0f) * 0.00390625f + l, (ad + (float)ae + 0.5f) * 0.00390625f + m).color(redZ, greenZ, blueZ, 0.8f).normal(0.0f, 0.0f, -1.0f).endVertex(); + } + } + if (ab > 1) continue; + for (ae = 0; ae < 8; ++ae) { + bufferBuilder.vertex(ac + 0.0f, z + 4.0f, ad + (float)ae + 1.0f - 9.765625E-4f).uv((ac + 0.0f) * 0.00390625f + l, (ad + (float)ae + 0.5f) * 0.00390625f + m).color(redZ, greenZ, blueZ, 0.8f).normal(0.0f, 0.0f, 1.0f).endVertex(); + bufferBuilder.vertex(ac + 8.0f, z + 4.0f, ad + (float)ae + 1.0f - 9.765625E-4f).uv((ac + 8.0f) * 0.00390625f + l, (ad + (float)ae + 0.5f) * 0.00390625f + m).color(redZ, greenZ, blueZ, 0.8f).normal(0.0f, 0.0f, 1.0f).endVertex(); + bufferBuilder.vertex(ac + 8.0f, z + 0.0f, ad + (float)ae + 1.0f - 9.765625E-4f).uv((ac + 8.0f) * 0.00390625f + l, (ad + (float)ae + 0.5f) * 0.00390625f + m).color(redZ, greenZ, blueZ, 0.8f).normal(0.0f, 0.0f, 1.0f).endVertex(); + bufferBuilder.vertex(ac + 0.0f, z + 0.0f, ad + (float)ae + 1.0f - 9.765625E-4f).uv((ac + 0.0f) * 0.00390625f + l, (ad + (float)ae + 0.5f) * 0.00390625f + m).color(redZ, greenZ, blueZ, 0.8f).normal(0.0f, 0.0f, 1.0f).endVertex(); + } + } + } + } else { + boolean aa = true; + int ab = 32; + for (int af = -32; af < 32; af += 32) { + for (int ag = -32; ag < 32; ag += 32) { + bufferBuilder.vertex(af + 0, z, ag + 32).uv((float)(af + 0) * 0.00390625f + l, (float)(ag + 32) * 0.00390625f + m).color(redTop, greenTop, blueTop, 0.8f).normal(0.0f, -1.0f, 0.0f).endVertex(); + bufferBuilder.vertex(af + 32, z, ag + 32).uv((float)(af + 32) * 0.00390625f + l, (float)(ag + 32) * 0.00390625f + m).color(redTop, greenTop, blueTop, 0.8f).normal(0.0f, -1.0f, 0.0f).endVertex(); + bufferBuilder.vertex(af + 32, z, ag + 0).uv((float)(af + 32) * 0.00390625f + l, (float)(ag + 0) * 0.00390625f + m).color(redTop, greenTop, blueTop, 0.8f).normal(0.0f, -1.0f, 0.0f).endVertex(); + bufferBuilder.vertex(af + 0, z, ag + 0).uv((float)(af + 0) * 0.00390625f + l, (float)(ag + 0) * 0.00390625f + m).color(redTop, greenTop, blueTop, 0.8f).normal(0.0f, -1.0f, 0.0f).endVertex(); + } + } + } + bufferBuilder.end(); + } + + private void renderSnowAndRain(PoseStack poseStack, double inX, double inY, double inZ) { + if (getRainLevel() <= 0.0f) { + return; + } + + RenderSystem.getModelViewStack().pushPose(); + RenderSystem.getModelViewStack().mulPoseMatrix(poseStack.last().pose()); + RenderSystem.applyModelViewMatrix(); + + int xFloor = Mth.floor(inX); + int yFloor = Mth.floor(inY); + int zFloor = Mth.floor(inZ); + Tesselator tesselator = Tesselator.getInstance(); + BufferBuilder bufferBuilder = tesselator.getBuilder(); + RenderSystem.disableCull(); + RenderSystem.enableBlend(); + RenderSystem.enableDepthTest(); + int rainDistance = 5; + if (Minecraft.useFancyGraphics()) { + rainDistance = 10; + } + RenderSystem.depthMask(true); + int count = -1; + float rainAnimationTime = this.ticks + mc.getFrameTime(); + RenderSystem.setShader(GameRenderer::getParticleShader); + turnOnLightLayer(); + BlockPos.MutableBlockPos mutableBlockPos = new BlockPos.MutableBlockPos(); + for (int rainZ = zFloor - rainDistance; rainZ <= zFloor + rainDistance; ++rainZ) { + for (int rainX = xFloor - rainDistance; rainX <= xFloor + rainDistance; ++rainX) { + int q = (rainZ - zFloor + 16) * 32 + rainX - xFloor + 16; + double r = (double)this.rainSizeX[q] * 0.5; + double s = (double)this.rainSizeZ[q] * 0.5; + mutableBlockPos.set(rainX, inY, rainZ); + Biome biome = blockAccess.getBiome(mutableBlockPos).value(); + if (biome.getPrecipitation() == Biome.Precipitation.NONE) continue; + + int blockingHeight = blockAccess.getHeightBlocking(rainX, rainZ); + int lower = Math.max(yFloor - rainDistance, blockingHeight); + int upper = Math.max(yFloor + rainDistance, blockingHeight); + + if (lower == upper) { + // no rain + continue; + } + int rainY = Math.max(blockingHeight, yFloor); + + Random randomSource = new Random(rainX * rainX * 3121L + rainX * 45238971L ^ rainZ * rainZ * 418711L + rainZ * 13761L); + mutableBlockPos.setY(lower); + + mutableBlockPos.setY(rainY); + + double localX = rainX + 0.5; + double localZ = rainZ + 0.5; + float distance = (float)Math.sqrt(localX * localX + localZ * localZ) / (float)rainDistance; + float blend; + float xOffset = 0; + float yOffset = 0; + + int skyLight = blockAccess.getBrightness(LightLayer.SKY, mutableBlockPos) << 4; + int blockLight = blockAccess.getBrightness(LightLayer.BLOCK, mutableBlockPos) << 4; + + if (biome.warmEnoughToRain(mutableBlockPos)) { + if (count != 0) { + if (count >= 0) { + tesselator.end(); + } + count = 0; + RenderSystem.setShaderTexture(0, RAIN_LOCATION); + bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.PARTICLE); + } + + blend = ((1.0f - distance * distance) * 0.5f + 0.5f); + int x = this.ticks + rainX * rainX * 3121 + rainX * 45238971 + rainZ * rainZ * 418711 + rainZ * 13761 & 0x1F; + yOffset = -((float)x + mc.getFrameTime()) / 32.0f * (3.0f + randomSource.nextFloat()); + } else { + if (count != 1) { + if (count >= 0) { + tesselator.end(); + } + count = 1; + RenderSystem.setShaderTexture(0, SNOW_LOCATION); + bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.PARTICLE); + } + + blend = ((1.0f - distance * distance) * 0.3f + 0.5f); + xOffset = (float)(randomSource.nextDouble() + (double)rainAnimationTime * 0.01 * (double)((float)randomSource.nextGaussian())); + float ae = -((float)(this.ticks & 0x1FF) + mc.getFrameTime()) / 512.0f; + float af = (float)(randomSource.nextDouble() + (double)(rainAnimationTime * (float)randomSource.nextGaussian()) * 0.001); + yOffset = ae + af; + + //snow is brighter + skyLight = (skyLight * 3 + 240) / 4; + blockLight = (blockLight * 3 + 240) / 4; + } + bufferBuilder + .vertex(localX - r, (double)upper - inY, localZ - s) + .uv(0.0f + xOffset, (float)lower * 0.25f + yOffset) + .color(1.0f, 1.0f, 1.0f, blend).uv2(blockLight, skyLight).endVertex(); + bufferBuilder + .vertex(localX + r, (double)upper - inY, localZ + s) + .uv(1.0f + xOffset, (float)lower * 0.25f + yOffset) + .color(1.0f, 1.0f, 1.0f, blend).uv2(blockLight, skyLight).endVertex(); + bufferBuilder + .vertex(localX + r, (double)lower - inY, localZ + s) + .uv(1.0f + xOffset, (float)upper * 0.25f + yOffset) + .color(1.0f, 1.0f, 1.0f, blend).uv2(blockLight, skyLight).endVertex(); + bufferBuilder + .vertex(localX - r, (double)lower - inY, localZ - s) + .uv(0.0f + xOffset, (float)upper * 0.25f + yOffset) + .color(1.0f, 1.0f, 1.0f, blend).uv2(blockLight, skyLight).endVertex(); + } + } + if (count >= 0) { + tesselator.end(); + } + RenderSystem.getModelViewStack().popPose(); + RenderSystem.applyModelViewMatrix(); + RenderSystem.enableCull(); + RenderSystem.disableBlend(); + turnOffLightLayer(); + } + + public static int getLightColor(BlockAndTintGetter blockAndTintGetter, BlockPos blockPos) { + int i = blockAndTintGetter.getBrightness(LightLayer.SKY, blockPos); + int j = blockAndTintGetter.getBrightness(LightLayer.BLOCK, blockPos); + return i << 20 | j << 4; + } + + public float getTimeOfDay() + { + return this.blockAccess.dimensionType().timeOfDay(time); + } + + public float getSunAngle() + { + float dayTime = this.getTimeOfDay(); + return dayTime * ((float)Math.PI * 2F); + } + + public int getMoonPhase() + { + return this.blockAccess.dimensionType().moonPhase(time); + } + + public float getSkyDarken() { + float dayTime = this.getTimeOfDay(); + float h = 1.0f - (Mth.cos(dayTime * ((float)Math.PI * 2)) * 2.0f + 0.2f); + h = Mth.clamp(h, 0.0f, 1.0f); + h = 1.0f - h; + h *= 1.0f - this.getRainLevel() * 5.0f / 16.0f; + h *= 1.0f - this.getThunderLevel() * 5.0f / 16.0f; + return h * 0.8f + 0.2f; + } + + public float getRainLevel() { + return this.rainLevel; + } + + public float getThunderLevel() { + return this.thunderLevel * this.getRainLevel(); + } + + public float getStarBrightness() + { + float f = this.getTimeOfDay(); + float f1 = 1.0F - (Mth.cos(f * ((float)Math.PI * 2F)) * 2.0F + 0.25F); + f1 = Mth.clamp(f1, 0.0F, 1.0F); + return f1 * f1 * 0.5F; + } + + public Vec3 getSkyColor(Vec3 position) + { + float dayTime = this.getTimeOfDay(); + + Vec3 samplePosition = position.subtract(2.0, 2.0, 2.0).scale(0.25); + + Vec3 skyColor = CubicSampler.gaussianSampleVec3(samplePosition, (i, j, k) -> Vec3.fromRGB24(blockAccess.getBiomeManager().getNoiseBiomeAtQuart(i, j, k).value().getSkyColor())); + + float h = Mth.cos(dayTime * ((float)Math.PI * 2)) * 2.0f + 0.5f; + h = Mth.clamp(h, 0.0f, 1.0f); + float skyColorR = (float)skyColor.x * h; + float skyColorG = (float)skyColor.y * h; + float skyColorB = (float)skyColor.z * h; + + float rain = this.getRainLevel(); + float thunder; + if (rain > 0.0f) { + float luminance = (skyColorR * 0.3f + skyColorG * 0.59f + skyColorB * 0.11f) * 0.6f; + float darkening = 1.0f - rain * 0.75f; + skyColorR = skyColorR * darkening + luminance * (1.0f - darkening); + skyColorG = skyColorG * darkening + luminance * (1.0f - darkening); + skyColorB = skyColorB * darkening + luminance * (1.0f - darkening); + } + if ((thunder = this.getThunderLevel()) > 0.0f) { + float luminance = (skyColorR * 0.3f + skyColorG * 0.59f + skyColorB * 0.11f) * 0.2f; + float darkening = 1.0f - thunder * 0.75f; + skyColorR = skyColorR * darkening + luminance * (1.0f - darkening); + skyColorG = skyColorG * darkening + luminance * (1.0f - darkening); + skyColorB = skyColorB * darkening + luminance * (1.0f - darkening); + } + if (!mc.options.hideLightningFlashes && this.skyFlashTime > 0) { + float flash = (float)this.skyFlashTime - mc.getFrameTime(); + if (flash > 1.0f) { + flash = 1.0f; + } + skyColorR = skyColorR * (1.0f - (flash *= 0.45f)) + 0.8f * flash; + skyColorG = skyColorG * (1.0f - flash) + 0.8f * flash; + skyColorB = skyColorB * (1.0f - flash) + flash; + } + return new Vec3(skyColorR, skyColorG, skyColorB); + } + + public Vec3 getFogColor(Vec3 pos) + { + float f = Mth.clamp(Mth.cos(this.getTimeOfDay() * ((float)Math.PI * 2F)) * 2.0F + 0.5F, 0.0F, 1.0F); + Vec3 scaledPos = pos.subtract(2.0D, 2.0D, 2.0D).scale(0.25D); + return CubicSampler.gaussianSampleVec3(scaledPos, (x, y, z) -> this.dimensionInfo.getBrightnessDependentFogColor(Vec3.fromRGB24(this.blockAccess.getBiomeManager().getNoiseBiomeAtQuart(x, y, z).value().getFogColor()), f)); + } + + public Vec3 getCloudColour() + { + float dayTime = this.getTimeOfDay(); + float f1 = Mth.cos(dayTime * ((float)Math.PI * 2F)) * 2.0F + 0.5F; + f1 = Mth.clamp(f1, 0.0F, 1.0F); + float r = 1.0F; + float g = 1.0F; + float b = 1.0F; + float rain = this.getRainLevel(); + + if (rain > 0.0F) + { + float luma = (r * 0.3F + g * 0.59F + b * 0.11F) * 0.6F; + float dark = 1.0F - rain * 0.95F; + r = r * dark + luma * (1.0F - dark); + g = g * dark + luma * (1.0F - dark); + b = b * dark + luma * (1.0F - dark); + } + + r = r * (f1 * 0.9F + 0.1F); + g = g * (f1 * 0.9F + 0.1F); + b = b * (f1 * 0.85F + 0.15F); + float thunder = this.getThunderLevel(); + + if (thunder > 0.0F) + { + float luma = (r * 0.3F + g * 0.59F + b * 0.11F) * 0.2F; + float dark = 1.0F - thunder * 0.95F; + r = r * dark + luma * (1.0F - dark); + g = g * dark + luma * (1.0F - dark); + b = b * dark + luma * (1.0F - dark); + } + + return new Vec3(r, g, b); + } + + private void generateSky() + { + Tesselator tesselator = Tesselator.getInstance(); + BufferBuilder bufferBuilder = tesselator.getBuilder(); + if (this.skyVBO != null) { + this.skyVBO.close(); + } + this.skyVBO = new VertexBuffer(); + buildSkyDisc(bufferBuilder, 16.0f); + this.skyVBO.bind(); + this.skyVBO.upload(bufferBuilder); + VertexBuffer.unbind(); + } + + private void generateSky2() + { + Tesselator tesselator = Tesselator.getInstance(); + BufferBuilder bufferBuilder = tesselator.getBuilder(); + if (this.sky2VBO != null) { + this.sky2VBO.close(); + } + this.sky2VBO = new VertexBuffer(); + buildSkyDisc(bufferBuilder, -16.0f); + this.sky2VBO.bind(); + this.sky2VBO.upload(bufferBuilder); + VertexBuffer.unbind(); + } + + private static void buildSkyDisc(BufferBuilder bufferBuilder, float posY) { + float g = Math.signum(posY) * 512.0f; + float h = 512.0f; + RenderSystem.setShader(GameRenderer::getPositionShader); + bufferBuilder.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION); + bufferBuilder.vertex(0.0, posY, 0.0).endVertex(); + for (int i = -180; i <= 180; i += 45) { + bufferBuilder.vertex(g * Mth.cos((float)i * ((float)Math.PI / 180)), posY, 512.0f * Mth.sin((float)i * ((float)Math.PI / 180))).endVertex(); + } + bufferBuilder.end(); + } + + private void generateStars() + { + Tesselator tesselator = Tesselator.getInstance(); + BufferBuilder bufferBuilder = tesselator.getBuilder(); + RenderSystem.setShader(GameRenderer::getPositionShader); + if (this.starVBO != null) { + this.starVBO.close(); + } + this.starVBO = new VertexBuffer(); + this.buildStars(bufferBuilder); + this.starVBO.bind(); + this.starVBO.upload(bufferBuilder); + VertexBuffer.unbind(); + } + + private void buildStars(BufferBuilder bufferBuilderIn) + { + Random random = new Random(10842L); + bufferBuilderIn.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION); + + for (int i = 0; i < 1500; ++i) + { + double d0 = random.nextFloat() * 2.0F - 1.0F; + double d1 = random.nextFloat() * 2.0F - 1.0F; + double d2 = random.nextFloat() * 2.0F - 1.0F; + double d3 = 0.15F + random.nextFloat() * 0.1F; + double d4 = d0 * d0 + d1 * d1 + d2 * d2; + + if (d4 < 1.0D && d4 > 0.01D) + { + d4 = 1.0D / Math.sqrt(d4); + d0 = d0 * d4; + d1 = d1 * d4; + d2 = d2 * d4; + double d5 = d0 * 100.0D; + double d6 = d1 * 100.0D; + double d7 = d2 * 100.0D; + double d8 = Math.atan2(d0, d2); + double d9 = Math.sin(d8); + double d10 = Math.cos(d8); + double d11 = Math.atan2(Math.sqrt(d0 * d0 + d2 * d2), d1); + double d12 = Math.sin(d11); + double d13 = Math.cos(d11); + double d14 = random.nextDouble() * Math.PI * 2.0D; + double d15 = Math.sin(d14); + double d16 = Math.cos(d14); + + for (int j = 0; j < 4; ++j) + { + double d17 = 0.0D; + double d18 = (double)((j & 2) - 1) * d3; + double d19 = (double)((j + 1 & 2) - 1) * d3; + double d20 = 0.0D; + double d21 = d18 * d16 - d19 * d15; + double d22 = d19 * d16 + d18 * d15; + double d23 = d21 * d12 + 0.0D * d13; + double d24 = 0.0D * d12 - d21 * d13; + double d25 = d24 * d9 - d22 * d10; + double d26 = d22 * d9 + d24 * d10; + bufferBuilderIn.vertex(d5 + d25, d6 + d23, d7 + d26).endVertex(); + } + } + } + bufferBuilderIn.end(); + } + + public void turnOffLightLayer() { + RenderSystem.setShaderTexture(2, 0); + } + + public void turnOnLightLayer() { + RenderSystem.setShaderTexture(2, this.lightTextureLocation); + mc.getTextureManager().bindForSetup(this.lightTextureLocation); + RenderSystem.texParameter(GL11.GL_TEXTURE_2D , GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); + RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + } + + public void updateTorchFlicker() + { + this.blockLightRedFlicker += (float)((Math.random() - Math.random()) * Math.random() * Math.random() * 0.1); + this.blockLightRedFlicker *= 0.9f; + this.lightmapUpdateNeeded = true; + } + + public void updateLightmap() + { + if (this.lightmapUpdateNeeded) + { + // not possible, needs a full world + /*if (Config.isCustomColors()) + { + boolean flag = this.client.player.isPotionActive(MobEffects.NIGHT_VISION) || this.client.player.isPotionActive(MobEffects.CONDUIT_POWER); + + if (CustomColors.updateLightmap(world, this.torchFlickerX, this.nativeImage, flag, partialTicks)) + { + this.dynamicTexture.updateDynamicTexture(); + this.needsUpdate = false; + this.client.profiler.endSection(); + return; + } + }*/ + + float skyLight = getSkyDarken(); + float effectiveSkyLight = skyFlashTime > 0 ? 1.0f : skyLight * 0.95F + 0.05F; + + /* no darkness effect, we don't have an actual player + float darknessScale = this.mc.options.darknessEffectScale().get().floatValue(); + float darknessGamma = this.getDarknessGamma(0) * darknessScale; + float effectiveDarknessScale = this.calculateDarknessScale(this.mc.player, darknessGamma, 0) * darknessScale; + */ + + float waterVision = getWaterVision(); + /* no night vision, we don't have a player + float nightVision = this.mc.player.hasEffect(MobEffects.NIGHT_VISION) + ? GameRenderer.getNightVisionScale(this.mc.player, 0) + : (waterVision > 0.0f && this.mc.player.hasEffect(MobEffects.CONDUIT_POWER) ? waterVision : 0.0f); + */ + float nightVision = 0.0f; + + Vector3f skylightColor = new Vector3f(skyLight, skyLight, 1.0f); + skylightColor.lerp(new Vector3f(1.0f, 1.0f, 1.0f), 0.35f); + + Vector3f finalColor = new Vector3f(); + for (int i = 0; i < 16; ++i) + { + for (int j = 0; j < 16; ++j) + { + float skyBrightness = this.blockAccess.dimensionType().brightness(i) * effectiveSkyLight; + float blockBrightnessRed = this.blockAccess.dimensionType().brightness(j) * (blockLightRedFlicker + 1.5f); + float blockBrightnessGreen = blockBrightnessRed * ((blockBrightnessRed * 0.6f + 0.4f) * 0.6f + 0.4f); + float blockBrightnessBlue = blockBrightnessRed * (blockBrightnessRed * blockBrightnessRed * 0.6f + 0.4f); + + finalColor.set(blockBrightnessRed, blockBrightnessGreen, blockBrightnessBlue); + + if (dimensionInfo.forceBrightLightmap()) { + finalColor.lerp(new Vector3f(0.99f, 1.12f, 1.0f), 0.25f); + finalColor.clamp(0.0f, 1.0f); + } else { + Vector3f skylightColorCopy = skylightColor.copy(); + skylightColorCopy.mul(skyBrightness); + finalColor.add(skylightColorCopy); + finalColor.lerp(new Vector3f(0.75f, 0.75f, 0.75f), 0.04f); + // no darkening from bosses +// if (getDarkenWorldAmount() > 0.0f) { +// finalColor.lerp(new Vector3f(finalColor).mul(0.7f, 0.6f, 0.6f), getDarkenWorldAmount()); +// } + } + + /* no night vision, no player + if (nightVision > 0.0f && (w = Math.max(finalColor.x(), Math.max(finalColor.y(), finalColor.z()))) < 1.0f) { + v = 1.0f / w; + vector3f4 = new Vector3f(finalColor).mul(v); + finalColor.lerp(vector3f4, nightVision); + } + */ + + if (!dimensionInfo.forceBrightLightmap()) { + /* no darkness, no player + if (effectiveDarknessScale > 0.0f) { + finalColor.add(-effectiveDarknessScale, -effectiveDarknessScale, -effectiveDarknessScale); + } + */ + finalColor.clamp(0.0f, 1.0f); + } + + float gamma = (float)this.mc.options.gamma; + + Vector3f vector3f5 = finalColor.copy(); + vector3f5.map(this::notGamma); + finalColor.lerp(vector3f5, Math.max(0.0f, gamma /*- darknessGamma*/)); + finalColor.lerp(new Vector3f(0.75f, 0.75f, 0.75f), 0.04f); + finalColor.clamp(0.0f, 1.0f); + finalColor.mul(255.0f); + + int r = (int)finalColor.x(); + int g = (int)finalColor.y(); + int b = (int)finalColor.z(); + this.lightPixels.setPixelRGBA(j, i, 0xFF000000 | b << 16 | g << 8 | r); + } + } + + this.lightTexture.upload(); + this.lightmapUpdateNeeded = false; + } + } + + private float notGamma(float f) { + float g = 1.0f - f; + return 1.0f - g * g * g * g; + } + + public float getWaterVision() + { + if (!this.areEyesInFluid(FluidTags.WATER)) + { + return 0.0F; + } + else + { + if ((float)this.waterVisionTime >= 600.0F) + { + return 1.0F; + } + else + { + float f2 = Mth.clamp((float)this.waterVisionTime / 100.0F, 0.0F, 1.0F); + float f3 = (float)this.waterVisionTime < 100.0F ? 0.0F : Mth.clamp(((float)this.waterVisionTime - 100.0F) / 500.0F, 0.0F, 1.0F); + return f2 * 0.6F + f3 * 0.39999998F; + } + } + } + + public boolean areEyesInFluid(TagKey tagIn) + { + if (blockAccess == null) + return false; + + Vec3 pos = getEyePos(); + BlockPos blockpos = new BlockPos(pos); + FluidState fluidstate = this.blockAccess.getFluidState(blockpos); + return isFluidTagged(fluidstate, tagIn) && pos.y < (double)((float)blockpos.getY() + fluidstate.getAmount() + 0.11111111F); + } + + public Vec3 getEyePos() { + return ClientDataHolderVR.getInstance().vrPlayer.vrdata_room_post.hmd.getPosition(); + } + + private boolean isFluidTagged(Fluid fluid, TagKey tag) { + // Apparently fluid tags are server side, so we have to hard-code this shit. + // Thanks Mojang. + if (tag == FluidTags.WATER) { + return fluid == Fluids.WATER || fluid == Fluids.FLOWING_WATER; + } else if (tag == FluidTags.LAVA) { + return fluid == Fluids.LAVA || fluid == Fluids.FLOWING_LAVA; + } + return false; + } + + private boolean isFluidTagged(FluidState fluidState, TagKey tag) { + return isFluidTagged(fluidState.getType(), tag); + } + + public static class MenuFogRenderer { + public float fogRed; + public float fogGreen; + public float fogBlue; + private int targetBiomeFog; + private int previousBiomeFog; + private long biomeChangedTime; + private final MenuWorldRenderer menuWorldRenderer; + + public MenuFogRenderer(MenuWorldRenderer menuWorldRenderer) { + this.menuWorldRenderer = menuWorldRenderer; + } + + public void setupFogColor() { + Vec3 eyePos = this.menuWorldRenderer.getEyePos(); + + FogType fogType = getEyeFogType(); + + if (fogType == FogType.WATER) { + this.updateWaterFog(this.menuWorldRenderer.getLevel()); + } else if (fogType == FogType.LAVA) { + fogRed = 0.6F; + fogGreen = 0.1F; + fogBlue = 0.0F; + this.biomeChangedTime = -1L; + } else if (fogType == FogType.POWDER_SNOW) { + fogRed = 0.623f; + fogGreen = 0.734f; + fogBlue = 0.785f; + biomeChangedTime = -1L; + // why is this here? + RenderSystem.clearColor(fogRed, fogGreen, fogBlue, 0.0f); + } else { + this.updateSurfaceFog(); + this.biomeChangedTime = -1L; + } + + float d0 = (float)((eyePos.y + this.menuWorldRenderer.getLevel().getGround()) * this.menuWorldRenderer.getLevel().getVoidFogYFactor()); + + /* no entity available + MobEffectFogFunction mobEffectFogFunction = FogRenderer.getPriorityFogFunction(entity, f); + if (mobEffectFogFunction != null) { + LivingEntity livingEntity = (LivingEntity)entity; + d0 = mobEffectFogFunction.getModifiedVoidDarkness(livingEntity, livingEntity.getEffect(mobEffectFogFunction.getMobEffect()), d0, f); + }*/ + + if (d0 < 1.0D && fogType != FogType.LAVA && fogType != FogType.POWDER_SNOW) { + if (d0 < 0.0F) { + d0 = 0.0F; + } + + d0 = d0 * d0; + fogRed = fogRed * d0; + fogGreen = fogGreen * d0; + fogBlue = fogBlue * d0; + } + + // no boss available + /*if (this.gameRenderer.getDarkenWorldAmount(partialTicks) > 0.0F) + { + float f = this.gameRenderer.getDarkenWorldAmount(partialTicks); + fogRed = fogRed * (1.0F - f) + fogRed * 0.7F * f; + fogGreen = fogGreen * (1.0F - f) + fogGreen * 0.6F * f; + fogBlue = fogBlue * (1.0F - f) + fogBlue * 0.6F * f; + }*/ + + if (fogType == FogType.WATER && fogRed != 0.0f && fogGreen != 0.0f && fogBlue != 0.0f) { + float f1 = this.menuWorldRenderer.getWaterVision(); + float f3 = Math.min(1.0f / fogRed, Math.min(1.0f / fogGreen, 1.0f / fogBlue)); + + fogRed = fogRed * (1.0F - f1) + fogRed * f3 * f1; + fogGreen = fogGreen * (1.0F - f1) + fogGreen * f3 * f1; + fogBlue = fogBlue * (1.0F - f1) + fogBlue * f3 * f1; + } + + if (OptifineHelper.isOptifineLoaded()) { + // custom fog colors + if (fogType == FogType.WATER) { + Vec3 colUnderwater = OptifineHelper.getCustomUnderwaterColor(menuWorldRenderer.blockAccess, eyePos.x, eyePos.y, eyePos.z); + if (colUnderwater != null) { + fogRed = (float)colUnderwater.x; + fogGreen = (float)colUnderwater.y; + fogBlue = (float)colUnderwater.z; + } + } else if (fogType == FogType.LAVA) { + Vec3 colUnderlava = OptifineHelper.getCustomUnderlavaColor(menuWorldRenderer.blockAccess, eyePos.x, eyePos.y, eyePos.z); + if (colUnderlava != null) { + fogRed = (float) colUnderlava.x; + fogGreen = (float) colUnderlava.y; + fogBlue = (float) colUnderlava.z; + } + } + } + + RenderSystem.clearColor(fogRed, fogGreen, fogBlue, 0.0f); + } + + private void updateSurfaceFog() { + float f = 0.25F + 0.75F * (float) this.menuWorldRenderer.renderDistanceChunks / 32.0F; + f = 1.0F - (float) Math.pow(f, 0.25); + Vec3 eyePos = this.menuWorldRenderer.getEyePos(); + Vec3 skyColor = this.menuWorldRenderer.getSkyColor(eyePos); + if (OptifineHelper.isOptifineLoaded()) { + if (menuWorldRenderer.blockAccess.dimensionType().effectsLocation().equals(DimensionType.OVERWORLD_EFFECTS)) { + skyColor = OptifineHelper.getCustomSkyColor(skyColor, menuWorldRenderer.blockAccess, eyePos.x, eyePos.y, eyePos.z); + } else if (menuWorldRenderer.blockAccess.dimensionType().effectsLocation().equals(DimensionType.END_EFFECTS)) { + skyColor = OptifineHelper.getCustomSkyColorEnd(skyColor); + } + } + float f1 = (float) skyColor.x; + float f2 = (float) skyColor.y; + float f3 = (float) skyColor.z; + Vec3 fogColor = this.menuWorldRenderer.getFogColor(eyePos); + if (OptifineHelper.isOptifineLoaded()) { + if (menuWorldRenderer.blockAccess.dimensionType().effectsLocation().equals(DimensionType.OVERWORLD_EFFECTS)) { + fogColor = OptifineHelper.getCustomFogColor(fogColor, menuWorldRenderer.blockAccess, eyePos.x, eyePos.y, eyePos.z); + } else if (menuWorldRenderer.blockAccess.dimensionType().effectsLocation().equals(DimensionType.END_EFFECTS)) { + fogColor = OptifineHelper.getCustomFogColorEnd(fogColor); + } else if (menuWorldRenderer.blockAccess.dimensionType().effectsLocation().equals(DimensionType.NETHER_EFFECTS)) { + fogColor = OptifineHelper.getCustomFogColorNether(fogColor); + } + } + fogRed = (float) fogColor.x; + fogGreen = (float) fogColor.y; + fogBlue = (float) fogColor.z; + + if (this.menuWorldRenderer.renderDistanceChunks >= 4) { + float d0 = Mth.sin(this.menuWorldRenderer.getSunAngle()) > 0.0F ? -1.0F : 1.0F; + Vec3 vec3d2 = new Vec3(d0, 0.0F, 0.0F).yRot(0); + float f5 = (float) ClientDataHolderVR.getInstance().vrPlayer.vrdata_room_post.hmd.getDirection().yRot(menuWorldRenderer.worldRotation).dot(vec3d2); + + if (f5 < 0.0F) { + f5 = 0.0F; + } + + if (f5 > 0.0F) { + float[] afloat = this.menuWorldRenderer.dimensionInfo.getSunriseColor(this.menuWorldRenderer.getTimeOfDay(), 0); + + if (afloat != null) { + f5 = f5 * afloat[3]; + fogRed = fogRed * (1.0F - f5) + afloat[0] * f5; + fogGreen = fogGreen * (1.0F - f5) + afloat[1] * f5; + fogBlue = fogBlue * (1.0F - f5) + afloat[2] * f5; + } + } + } + + fogRed += (f1 - fogRed) * f; + fogGreen += (f2 - fogGreen) * f; + fogBlue += (f3 - fogBlue) * f; + + float f6 = menuWorldRenderer.getRainLevel(); + if (f6 > 0.0F) + { + float f4 = 1.0F - f6 * 0.5F; + float f8 = 1.0F - f6 * 0.4F; + fogRed *= f4; + fogGreen *= f4; + fogBlue *= f8; + } + + float f7 = menuWorldRenderer.getThunderLevel(); + if (f7 > 0.0F) + { + float f9 = 1.0F - f7 * 0.5F; + fogRed *= f9; + fogGreen *= f9; + fogBlue *= f9; + } + biomeChangedTime = -1L; + } + + private void updateWaterFog(LevelReader levelIn) { + long currentTime = Util.getMillis(); + int waterFogColor = levelIn.getBiome(new BlockPos(this.menuWorldRenderer.getEyePos())).value().getWaterFogColor(); + + if (this.biomeChangedTime < 0L) { + targetBiomeFog = waterFogColor; + previousBiomeFog = waterFogColor; + biomeChangedTime = currentTime; + } + + int k = targetBiomeFog >> 16 & 255; + int l = targetBiomeFog >> 8 & 255; + int i1 = targetBiomeFog & 255; + int j1 = previousBiomeFog >> 16 & 255; + int k1 = previousBiomeFog >> 8 & 255; + int l1 = previousBiomeFog & 255; + float f = Mth.clamp((float) (currentTime - this.biomeChangedTime) / 5000.0F, 0.0F, 1.0F); + + float f1 = Mth.lerp(f, j1, k); + float f2 = Mth.lerp(f, k1, l); + float f3 = Mth.lerp(f, l1, i1); + fogRed = f1 / 255.0F; + fogGreen = f2 / 255.0F; + fogBlue = f3 / 255.0F; + + if (targetBiomeFog != waterFogColor) { + targetBiomeFog = waterFogColor; + previousBiomeFog = Mth.floor(f1) << 16 | Mth.floor(f2) << 8 | Mth.floor(f3); + this.biomeChangedTime = currentTime; + } + } + + public void setupFog(FogRenderer.FogMode fogMode) { + FogType fogType = getEyeFogType(); + + float fogStart, fogEnd; + FogShape fogShape = FogShape.SPHERE; + + if (fogType == FogType.LAVA) { + fogStart = 0.25f; + fogEnd = 1.0f; + } else if (fogType == FogType.POWDER_SNOW) { + fogStart = 0.0f; + fogEnd = 2.0f; + } else if (fogType == FogType.WATER) { + fogStart = -8.0f; + fogEnd = 96.0f; + + Holder holder = menuWorldRenderer.blockAccess.getBiome(new BlockPos(menuWorldRenderer.getEyePos())); + if ((Biome.getBiomeCategory(holder) == Biome.BiomeCategory.SWAMP)) { + fogEnd *= 0.85f; + } + if (fogEnd > menuWorldRenderer.renderDistance) { + fogEnd = menuWorldRenderer.renderDistance; + fogShape = FogShape.CYLINDER; + } + } else if (menuWorldRenderer.blockAccess.getDimensionReaderInfo().isFoggyAt(0,0)) { + fogStart = menuWorldRenderer.renderDistance * 0.05f; + fogEnd = Math.min(menuWorldRenderer.renderDistance, 192.0f) * 0.5f; + } else if (fogMode == FogRenderer.FogMode.FOG_SKY) { + fogStart = 0.0f; + fogEnd = menuWorldRenderer.renderDistance; + fogShape = FogShape.CYLINDER; + } else { + float h = Mth.clamp(menuWorldRenderer.renderDistance / 10.0f, 4.0f, 64.0f); + fogStart = menuWorldRenderer.renderDistance - h; + fogEnd = menuWorldRenderer.renderDistance; + fogShape = FogShape.CYLINDER; + } + RenderSystem.setShaderFogStart(fogStart); + RenderSystem.setShaderFogEnd(fogEnd); + RenderSystem.setShaderFogShape(fogShape); + } + + private FogType getEyeFogType() { + FogType fogType = FogType.NONE; + if(menuWorldRenderer.areEyesInFluid(FluidTags.WATER)) { + fogType = FogType.WATER; + } else if(menuWorldRenderer.areEyesInFluid(FluidTags.LAVA)){ + fogType = FogType.LAVA; + } else if(menuWorldRenderer.blockAccess.getBlockState(new BlockPos(menuWorldRenderer.getEyePos())).is(Blocks.POWDER_SNOW)){ + fogType = FogType.POWDER_SNOW; + } + return fogType; + } + + public void setupNoFog() { + RenderSystem.setShaderFogStart(Float.MAX_VALUE); + } + + public void levelFogColor() { + RenderSystem.setShaderFogColor(fogRed, fogGreen, fogBlue); + } + } + + private static class FluidStateWrapper extends FluidState { + private final FluidState fluidState; + + @SuppressWarnings("unchecked") + public FluidStateWrapper(FluidState fluidState) { + super(fluidState.getType(), fluidState.getValues(), fluidState.propertiesCodec); + + this.fluidState = fluidState; + } + + @Override + public boolean is(TagKey tagIn) { + // Yeah I know this is super dirty, blame Mojang for making FluidTags server-side + if (tagIn == FluidTags.WATER) { + return this.getType() == Fluids.WATER || this.getType() == Fluids.FLOWING_WATER; + } else if (tagIn == FluidTags.LAVA) { + return this.getType() == Fluids.LAVA || this.getType() == Fluids.FLOWING_LAVA; + } + return fluidState.is(tagIn); + } + } +} diff --git a/common/src/main/java/org/vivecraft/provider/ActionParams.java b/common/src/main/java/org/vivecraft/client_vr/provider/ActionParams.java similarity index 75% rename from common/src/main/java/org/vivecraft/provider/ActionParams.java rename to common/src/main/java/org/vivecraft/client_vr/provider/ActionParams.java index 054cbf557..3902de44d 100644 --- a/common/src/main/java/org/vivecraft/provider/ActionParams.java +++ b/common/src/main/java/org/vivecraft/client_vr/provider/ActionParams.java @@ -1,6 +1,6 @@ -package org.vivecraft.provider; +package org.vivecraft.client_vr.provider; -import org.vivecraft.provider.openvr_jna.control.VRInputActionSet; +import org.vivecraft.client_vr.provider.openvr_lwjgl.control.VRInputActionSet; public class ActionParams { diff --git a/common/src/main/java/org/vivecraft/provider/ControllerType.java b/common/src/main/java/org/vivecraft/client_vr/provider/ControllerType.java similarity index 55% rename from common/src/main/java/org/vivecraft/provider/ControllerType.java rename to common/src/main/java/org/vivecraft/client_vr/provider/ControllerType.java index 370ec1093..6d38107a7 100644 --- a/common/src/main/java/org/vivecraft/provider/ControllerType.java +++ b/common/src/main/java/org/vivecraft/client_vr/provider/ControllerType.java @@ -1,4 +1,4 @@ -package org.vivecraft.provider; +package org.vivecraft.client_vr.provider; public enum ControllerType { diff --git a/common/src/main/java/org/vivecraft/provider/HandedKeyBinding.java b/common/src/main/java/org/vivecraft/client_vr/provider/HandedKeyBinding.java similarity index 97% rename from common/src/main/java/org/vivecraft/provider/HandedKeyBinding.java rename to common/src/main/java/org/vivecraft/client_vr/provider/HandedKeyBinding.java index 0ffc5a63b..7d5b5ff80 100644 --- a/common/src/main/java/org/vivecraft/provider/HandedKeyBinding.java +++ b/common/src/main/java/org/vivecraft/client_vr/provider/HandedKeyBinding.java @@ -1,4 +1,4 @@ -package org.vivecraft.provider; +package org.vivecraft.client_vr.provider; import java.util.Arrays; import net.minecraft.client.KeyMapping; diff --git a/common/src/main/java/org/vivecraft/provider/HapticScheduler.java b/common/src/main/java/org/vivecraft/client_vr/provider/HapticScheduler.java similarity index 89% rename from common/src/main/java/org/vivecraft/provider/HapticScheduler.java rename to common/src/main/java/org/vivecraft/client_vr/provider/HapticScheduler.java index 3e6f1c3af..424bb7e68 100644 --- a/common/src/main/java/org/vivecraft/provider/HapticScheduler.java +++ b/common/src/main/java/org/vivecraft/client_vr/provider/HapticScheduler.java @@ -1,4 +1,4 @@ -package org.vivecraft.provider; +package org.vivecraft.client_vr.provider; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; diff --git a/common/src/main/java/org/vivecraft/provider/HardwareType.java b/common/src/main/java/org/vivecraft/client_vr/provider/HardwareType.java similarity index 96% rename from common/src/main/java/org/vivecraft/provider/HardwareType.java rename to common/src/main/java/org/vivecraft/client_vr/provider/HardwareType.java index 20bd7c1b2..650bd754a 100644 --- a/common/src/main/java/org/vivecraft/provider/HardwareType.java +++ b/common/src/main/java/org/vivecraft/client_vr/provider/HardwareType.java @@ -1,4 +1,4 @@ -package org.vivecraft.provider; +package org.vivecraft.client_vr.provider; import com.google.common.collect.ImmutableList; import java.util.HashMap; diff --git a/common/src/main/java/org/vivecraft/provider/InputSimulator.java b/common/src/main/java/org/vivecraft/client_vr/provider/InputSimulator.java similarity index 98% rename from common/src/main/java/org/vivecraft/provider/InputSimulator.java rename to common/src/main/java/org/vivecraft/client_vr/provider/InputSimulator.java index 7ba003b0e..70296132c 100644 --- a/common/src/main/java/org/vivecraft/provider/InputSimulator.java +++ b/common/src/main/java/org/vivecraft/client_vr/provider/InputSimulator.java @@ -1,4 +1,4 @@ -package org.vivecraft.provider; +package org.vivecraft.client_vr.provider; import java.util.HashSet; import java.util.Set; diff --git a/common/src/main/java/org/vivecraft/provider/MCVR.java b/common/src/main/java/org/vivecraft/client_vr/provider/MCVR.java similarity index 69% rename from common/src/main/java/org/vivecraft/provider/MCVR.java rename to common/src/main/java/org/vivecraft/client_vr/provider/MCVR.java index dd60cb78f..b3080b37d 100644 --- a/common/src/main/java/org/vivecraft/provider/MCVR.java +++ b/common/src/main/java/org/vivecraft/client_vr/provider/MCVR.java @@ -1,4 +1,4 @@ -package org.vivecraft.provider; +package org.vivecraft.client_vr.provider; import java.io.BufferedReader; import java.io.File; @@ -8,34 +8,34 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.Stream; -import org.apache.commons.lang3.ArrayUtils; import org.lwjgl.glfw.GLFW; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.extensions.GuiExtension; -import org.vivecraft.api.VRData; -import org.vivecraft.api.Vec3History; -import org.vivecraft.gameplay.screenhandlers.GuiHandler; -import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; -import org.vivecraft.gameplay.screenhandlers.RadialHandler; -import org.vivecraft.provider.openvr_jna.VRInputAction; -import org.vivecraft.provider.openvr_jna.control.VRInputActionSet; -import org.vivecraft.provider.openvr_jna.control.VivecraftMovementInput; -import org.vivecraft.settings.VRHotkeys; -import org.vivecraft.settings.VRSettings; -import org.vivecraft.utils.lwjgl.Matrix4f; -import org.vivecraft.render.RenderPass; -import org.vivecraft.utils.Utils; -import org.vivecraft.utils.lwjgl.Vector3f; -import org.vivecraft.utils.math.Quaternion; -import org.vivecraft.utils.math.Vector3; +import org.vivecraft.client.VivecraftVRMod; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.extensions.GuiExtension; +import org.vivecraft.client_vr.VRData; +import org.vivecraft.client_vr.Vec3History; +import org.vivecraft.client_vr.gameplay.screenhandlers.GuiHandler; +import org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler; +import org.vivecraft.client_vr.gameplay.screenhandlers.RadialHandler; +import org.vivecraft.client_vr.provider.openvr_lwjgl.VRInputAction; +import org.vivecraft.client_vr.provider.openvr_lwjgl.control.VRInputActionSet; +import org.vivecraft.client_vr.provider.openvr_lwjgl.control.VivecraftMovementInput; +import org.vivecraft.client_vr.render.RenderConfigException; +import org.vivecraft.client_vr.settings.VRHotkeys; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.client_xr.render_pass.RenderPassManager; +import org.vivecraft.common.utils.lwjgl.Matrix4f; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client.utils.Utils; +import org.vivecraft.common.utils.lwjgl.Vector3f; +import org.vivecraft.common.utils.math.Quaternion; +import org.vivecraft.common.utils.math.Vector3; import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; @@ -53,20 +53,21 @@ public abstract class MCVR { protected Minecraft mc; - protected ClientDataHolder dh; + protected ClientDataHolderVR dh; protected static MCVR me; - protected org.vivecraft.utils.math.Matrix4f hmdPose = new org.vivecraft.utils.math.Matrix4f(); - public org.vivecraft.utils.math.Matrix4f hmdRotation = new org.vivecraft.utils.math.Matrix4f(); + protected static VivecraftVRMod mod; + protected org.vivecraft.common.utils.math.Matrix4f hmdPose = new org.vivecraft.common.utils.math.Matrix4f(); + public org.vivecraft.common.utils.math.Matrix4f hmdRotation = new org.vivecraft.common.utils.math.Matrix4f(); public HardwareType detectedHardware = HardwareType.VIVE; - protected org.vivecraft.utils.math.Matrix4f hmdPoseLeftEye = new org.vivecraft.utils.math.Matrix4f(); - protected org.vivecraft.utils.math.Matrix4f hmdPoseRightEye = new org.vivecraft.utils.math.Matrix4f(); + protected org.vivecraft.common.utils.math.Matrix4f hmdPoseLeftEye = new org.vivecraft.common.utils.math.Matrix4f(); + protected org.vivecraft.common.utils.math.Matrix4f hmdPoseRightEye = new org.vivecraft.common.utils.math.Matrix4f(); public Vec3History hmdHistory = new Vec3History(); public Vec3History hmdPivotHistory = new Vec3History(); protected boolean headIsTracking; - protected org.vivecraft.utils.math.Matrix4f[] controllerPose = new org.vivecraft.utils.math.Matrix4f[3]; - protected org.vivecraft.utils.math.Matrix4f[] controllerRotation = new org.vivecraft.utils.math.Matrix4f[3]; + protected org.vivecraft.common.utils.math.Matrix4f[] controllerPose = new org.vivecraft.common.utils.math.Matrix4f[3]; + protected org.vivecraft.common.utils.math.Matrix4f[] controllerRotation = new org.vivecraft.common.utils.math.Matrix4f[3]; protected boolean[] controllerTracking = new boolean[3]; - protected org.vivecraft.utils.math.Matrix4f[] handRotation = new org.vivecraft.utils.math.Matrix4f[3]; + protected org.vivecraft.common.utils.math.Matrix4f[] handRotation = new org.vivecraft.common.utils.math.Matrix4f[3]; public Vec3History[] controllerHistory = new Vec3History[] {new Vec3History(), new Vec3History()}; public Vec3History[] controllerForwardHistory = new Vec3History[] {new Vec3History(), new Vec3History()}; public Vec3History[] controllerUpHistory = new Vec3History[] {new Vec3History(), new Vec3History()}; @@ -75,7 +76,7 @@ public abstract class MCVR public boolean initialized; public String initStatus; public boolean initSuccess; - protected org.vivecraft.utils.math.Matrix4f[] poseMatrices; + protected org.vivecraft.common.utils.math.Matrix4f[] poseMatrices; protected Vec3[] deviceVelocity; protected Vec3[] aimSource = new Vec3[3]; public Vector3 forward = new Vector3(0.0F, 0.0F, -1.0F); @@ -94,9 +95,9 @@ public abstract class MCVR protected HapticScheduler hapticScheduler; public float seatedRot; public float aimPitch = 0.0F; - protected final org.vivecraft.utils.math.Matrix4f Neutral_HMD = new org.vivecraft.utils.math.Matrix4f(1.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1.0F, 0.0F, 1.62F, 0.0F, 0.0F, 1.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1.0F); - protected final org.vivecraft.utils.math.Matrix4f TPose_Left = new org.vivecraft.utils.math.Matrix4f(1.0F, 0.0F, 0.0F, 0.25F, 0.0F, 1.0F, 0.0F, 1.62F, 0.0F, 0.0F, 1.0F, 0.25F, 0.0F, 0.0F, 0.0F, 1.0F); - protected final org.vivecraft.utils.math.Matrix4f TPose_Right = new org.vivecraft.utils.math.Matrix4f(1.0F, 0.0F, 0.0F, 0.75F, 0.0F, 1.0F, 0.0F, 1.62F, 0.0F, 0.0F, 1.0F, 0.75F, 0.0F, 0.0F, 0.0F, 1.0F); + protected final org.vivecraft.common.utils.math.Matrix4f Neutral_HMD = new org.vivecraft.common.utils.math.Matrix4f(1.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1.0F, 0.0F, 1.62F, 0.0F, 0.0F, 1.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1.0F); + protected final org.vivecraft.common.utils.math.Matrix4f TPose_Left = new org.vivecraft.common.utils.math.Matrix4f(1.0F, 0.0F, 0.0F, 0.25F, 0.0F, 1.0F, 0.0F, 1.62F, 0.0F, 0.0F, 1.0F, 0.25F, 0.0F, 0.0F, 0.0F, 1.0F); + protected final org.vivecraft.common.utils.math.Matrix4f TPose_Right = new org.vivecraft.common.utils.math.Matrix4f(1.0F, 0.0F, 0.0F, 0.75F, 0.0F, 1.0F, 0.0F, 1.62F, 0.0F, 0.0F, 1.0F, 0.75F, 0.0F, 0.0F, 0.0F, 1.0F); protected boolean TPose = false; public boolean hudPopup = true; protected int moveModeSwitchCount = 0; @@ -105,55 +106,25 @@ public abstract class MCVR protected ControllerType walkaboutController; protected ControllerType freeRotateController; protected float walkaboutYawStart; - protected float hmdForwardYaw; + protected float hmdForwardYaw = 180; public boolean ignorePressesNextFrame = false; protected int quickTorchPreviousSlot; protected Map inputActions = new HashMap<>(); protected Map inputActionsByKeyBinding = new HashMap<>(); - protected Set vanillaBindingSet; - Set keyBindingSet; - public final HandedKeyBinding keyClimbeyGrab = new HandedKeyBinding("vivecraft.key.climbeyGrab", -1, "vivecraft.key.category.climbey"); - public final HandedKeyBinding keyClimbeyJump = new HandedKeyBinding("vivecraft.key.climbeyJump", -1, "vivecraft.key.category.climbey"); - public final KeyMapping keyExportWorld = new KeyMapping("vivecraft.key.exportWorld", -1, "key.categories.misc"); - public final KeyMapping keyFreeMoveRotate = new KeyMapping("vivecraft.key.freeMoveRotate", -1, "key.categories.movement"); - public final KeyMapping keyFreeMoveStrafe = new KeyMapping("vivecraft.key.freeMoveStrafe", -1, "key.categories.movement"); - public final KeyMapping keyHotbarNext = new KeyMapping("vivecraft.key.hotbarNext", 266, "key.categories.inventory"); - public final KeyMapping keyHotbarPrev = new KeyMapping("vivecraft.key.hotbarPrev", 267, "key.categories.inventory"); - public final KeyMapping keyHotbarScroll = new KeyMapping("vivecraft.key.hotbarScroll", -1, "key.categories.inventory"); - public final KeyMapping keyHotbarSwipeX = new KeyMapping("vivecraft.key.hotbarSwipeX", -1, "key.categories.inventory"); - public final KeyMapping keyHotbarSwipeY = new KeyMapping("vivecraft.key.hotbarSwipeY", -1, "key.categories.inventory"); - public final KeyMapping keyMenuButton = new KeyMapping("vivecraft.key.ingameMenuButton", -1, "key.categories.ui"); - public final KeyMapping keyMoveThirdPersonCam = new KeyMapping("vivecraft.key.moveThirdPersonCam", -1, "key.categories.misc"); - public final KeyMapping keyQuickHandheldCam = new KeyMapping("vivecraft.key.quickHandheldCam", -1, "key.categories.misc"); - public final KeyMapping keyQuickTorch = new KeyMapping("vivecraft.key.quickTorch", 260, "key.categories.gameplay"); - public final KeyMapping keyRadialMenu = new KeyMapping("vivecraft.key.radialMenu", -1, "key.categories.ui"); - public final KeyMapping keyRotateAxis = new KeyMapping("vivecraft.key.rotateAxis", -1, "key.categories.movement"); - public final KeyMapping keyRotateFree = new KeyMapping("vivecraft.key.rotateFree", 268, "key.categories.movement"); - public final KeyMapping keyRotateLeft = new KeyMapping("vivecraft.key.rotateLeft", 263, "key.categories.movement"); - public final KeyMapping keyRotateRight = new KeyMapping("vivecraft.key.rotateRight", 262, "key.categories.movement"); - public final KeyMapping keySwapMirrorView = new KeyMapping("vivecraft.key.swapMirrorView", -1, "key.categories.misc"); - public final KeyMapping keyTeleport = new KeyMapping("vivecraft.key.teleport", -1, "key.categories.movement"); - public final KeyMapping keyTeleportFallback = new KeyMapping("vivecraft.key.teleportFallback", -1, "key.categories.movement"); - public final KeyMapping keyToggleHandheldCam = new KeyMapping("vivecraft.key.toggleHandheldCam", -1, "key.categories.misc"); - public final KeyMapping keyToggleKeyboard = new KeyMapping("vivecraft.key.toggleKeyboard", -1, "key.categories.ui"); - public final KeyMapping keyToggleMovement = new KeyMapping("vivecraft.key.toggleMovement", -1, "key.categories.movement"); - public final KeyMapping keyTogglePlayerList = new KeyMapping("vivecraft.key.togglePlayerList", -1, "key.categories.multiplayer"); - public final HandedKeyBinding keyTrackpadTouch = new HandedKeyBinding("vivecraft.key.trackpadTouch", -1, "key.categories.misc"); - public final HandedKeyBinding keyVRInteract = new HandedKeyBinding("vivecraft.key.vrInteract", -1, "key.categories.gameplay"); - public final KeyMapping keyWalkabout = new KeyMapping("vivecraft.key.walkabout", 269, "key.categories.movement"); - - public MCVR(Minecraft mc, ClientDataHolder dh) + + public MCVR(Minecraft mc, ClientDataHolderVR dh, VivecraftVRMod vrMod) { this.mc = mc; this.dh = dh; + mod = vrMod; me = this; for (int i = 0; i < 3; ++i) { this.aimSource[i] = new Vec3(0.0D, 0.0D, 0.0D); - this.controllerPose[i] = new org.vivecraft.utils.math.Matrix4f(); - this.controllerRotation[i] = new org.vivecraft.utils.math.Matrix4f(); - this.handRotation[i] = new org.vivecraft.utils.math.Matrix4f(); + this.controllerPose[i] = new org.vivecraft.common.utils.math.Matrix4f(); + this.controllerRotation[i] = new org.vivecraft.common.utils.math.Matrix4f(); + this.handRotation[i] = new org.vivecraft.common.utils.math.Matrix4f(); } } @@ -175,57 +146,7 @@ public double getGunAngle() return this.gunAngle; } - public Set getKeyBindings() - { - if (this.keyBindingSet == null) - { - this.keyBindingSet = new LinkedHashSet<>(); - this.keyBindingSet.add(this.keyRotateLeft); - this.keyBindingSet.add(this.keyRotateRight); - this.keyBindingSet.add(this.keyRotateAxis); - this.keyBindingSet.add(this.keyRotateFree); - this.keyBindingSet.add(this.keyWalkabout); - this.keyBindingSet.add(this.keyTeleport); - this.keyBindingSet.add(this.keyTeleportFallback); - this.keyBindingSet.add(this.keyFreeMoveRotate); - this.keyBindingSet.add(this.keyFreeMoveStrafe); - this.keyBindingSet.add(this.keyToggleMovement); - this.keyBindingSet.add(this.keyQuickTorch); - this.keyBindingSet.add(this.keyHotbarNext); - this.keyBindingSet.add(this.keyHotbarPrev); - this.keyBindingSet.add(this.keyHotbarScroll); - this.keyBindingSet.add(this.keyHotbarSwipeX); - this.keyBindingSet.add(this.keyHotbarSwipeY); - this.keyBindingSet.add(this.keyMenuButton); - this.keyBindingSet.add(this.keyRadialMenu); - this.keyBindingSet.add(this.keyVRInteract); - this.keyBindingSet.add(this.keySwapMirrorView); - this.keyBindingSet.add(this.keyExportWorld); - this.keyBindingSet.add(this.keyToggleKeyboard); - this.keyBindingSet.add(this.keyMoveThirdPersonCam); - this.keyBindingSet.add(this.keyTogglePlayerList); - this.keyBindingSet.add(this.keyToggleHandheldCam); - this.keyBindingSet.add(this.keyQuickHandheldCam); - this.keyBindingSet.add(this.keyTrackpadTouch); - this.keyBindingSet.add(GuiHandler.keyLeftClick); - this.keyBindingSet.add(GuiHandler.keyRightClick); - this.keyBindingSet.add(GuiHandler.keyMiddleClick); - this.keyBindingSet.add(GuiHandler.keyShift); - this.keyBindingSet.add(GuiHandler.keyCtrl); - this.keyBindingSet.add(GuiHandler.keyAlt); - this.keyBindingSet.add(GuiHandler.keyScrollUp); - this.keyBindingSet.add(GuiHandler.keyScrollDown); - this.keyBindingSet.add(GuiHandler.keyScrollAxis); - this.keyBindingSet.add(GuiHandler.keyKeyboardClick); - this.keyBindingSet.add(GuiHandler.keyKeyboardShift); - this.keyBindingSet.add(this.keyClimbeyGrab); - this.keyBindingSet.add(this.keyClimbeyJump); - } - - return this.keyBindingSet; - } - - public org.vivecraft.utils.math.Matrix4f getAimRotation(int controller) + public org.vivecraft.common.utils.math.Matrix4f getAimRotation(int controller) { return this.controllerRotation[controller]; } @@ -292,7 +213,7 @@ public void triggerHapticPulse(int controller, int strength) } } - public org.vivecraft.utils.math.Matrix4f getHandRotation(int controller) + public org.vivecraft.common.utils.math.Matrix4f getHandRotation(int controller) { return this.handRotation[controller]; } @@ -300,7 +221,7 @@ public org.vivecraft.utils.math.Matrix4f getHandRotation(int controller) public Vec3 getHandVector(int controller) { Vector3 vector3 = new Vector3(0.0F, 0.0F, -1.0F); - org.vivecraft.utils.math.Matrix4f matrix4f = this.handRotation[controller]; + org.vivecraft.common.utils.math.Matrix4f matrix4f = this.handRotation[controller]; Vector3 vector31 = matrix4f.transform(vector3); return vector31.toVector3d(); } @@ -320,7 +241,7 @@ public Vec3 getCenterEyePosition() public Vec3 getEyePosition(RenderPass eye) { - org.vivecraft.utils.math.Matrix4f matrix4f = this.hmdPoseRightEye; + org.vivecraft.common.utils.math.Matrix4f matrix4f = this.hmdPoseRightEye; if (eye == RenderPass.LEFT) { @@ -337,7 +258,7 @@ else if (eye == RenderPass.RIGHT) if (matrix4f == null) { - org.vivecraft.utils.math.Matrix4f matrix4f2 = this.hmdPose; + org.vivecraft.common.utils.math.Matrix4f matrix4f2 = this.hmdPose; Vector3 vector31 = Utils.convertMatrix4ftoTranslationVector(matrix4f2); if (this.dh.vrSettings.seated || this.dh.vrSettings.allowStandingOriginOffset) @@ -350,7 +271,7 @@ else if (eye == RenderPass.RIGHT) } else { - org.vivecraft.utils.math.Matrix4f matrix4f1 = org.vivecraft.utils.math.Matrix4f.multiply(this.hmdPose, matrix4f); + org.vivecraft.common.utils.math.Matrix4f matrix4f1 = org.vivecraft.common.utils.math.Matrix4f.multiply(this.hmdPose, matrix4f); Vector3 vector3 = Utils.convertMatrix4ftoTranslationVector(matrix4f1); if (this.dh.vrSettings.seated || this.dh.vrSettings.allowStandingOriginOffset) @@ -374,9 +295,9 @@ public Vec3 getHmdVector() return vector3.toVector3d(); } - public org.vivecraft.utils.math.Matrix4f getEyeRotation(RenderPass eye) + public org.vivecraft.common.utils.math.Matrix4f getEyeRotation(RenderPass eye) { - org.vivecraft.utils.math.Matrix4f matrix4f; + org.vivecraft.common.utils.math.Matrix4f matrix4f; if (eye == RenderPass.LEFT) { @@ -393,7 +314,7 @@ else if (eye == RenderPass.RIGHT) if (matrix4f != null) { - org.vivecraft.utils.math.Matrix4f matrix4f1 = new org.vivecraft.utils.math.Matrix4f(); + org.vivecraft.common.utils.math.Matrix4f matrix4f1 = new org.vivecraft.common.utils.math.Matrix4f(); matrix4f1.M[0][0] = matrix4f.M[0][0]; matrix4f1.M[0][1] = matrix4f.M[0][1]; matrix4f1.M[0][2] = matrix4f.M[0][2]; @@ -410,7 +331,7 @@ else if (eye == RenderPass.RIGHT) matrix4f1.M[3][1] = 0.0F; matrix4f1.M[3][2] = 0.0F; matrix4f1.M[3][3] = 1.0F; - return org.vivecraft.utils.math.Matrix4f.multiply(this.hmdRotation, matrix4f1); + return org.vivecraft.common.utils.math.Matrix4f.multiply(this.hmdRotation, matrix4f1); } else { @@ -418,16 +339,6 @@ else if (eye == RenderPass.RIGHT) } } - public boolean isSafeBinding(KeyMapping kb) - { - return this.getKeyBindings().contains(kb) || kb == this.mc.options.keyChat || kb == this.mc.options.keyInventory; - } - - public boolean isModBinding(KeyMapping kb) - { - return !this.vanillaBindingSet.contains(kb); - } - public VRInputAction getInputAction(String keyBindingDesc) { return this.inputActionsByKeyBinding.get(keyBindingDesc); @@ -456,21 +367,6 @@ public Collection getInputActionsInSet(VRInputActionSet set) }).collect(Collectors.toList())); } - public KeyMapping[] initializeBindings(KeyMapping[] keyBindings) - { - for (KeyMapping keymapping : this.getKeyBindings()) - { - keyBindings = ArrayUtils.add(keyBindings, keymapping); - } - - this.setVanillaBindings(keyBindings); - Map map = KeyMapping.CATEGORY_SORT_ORDER; - map.put("vivecraft.key.category.gui", 8); - map.put("vivecraft.key.category.climbey", 9); - map.put("vivecraft.key.category.keyboard", 10); - return keyBindings; - } - public boolean isControllerTracking(ControllerType controller) { return this.isControllerTracking(controller.ordinal()); @@ -492,11 +388,6 @@ public void clearOffset() this.dh.vrSettings.originOffset = new Vector3(0.0F, 0.0F, 0.0F); } - public void setVanillaBindings(KeyMapping[] bindings) - { - this.vanillaBindingSet = new HashSet<>(Arrays.asList(bindings)); - } - public boolean isHMDTracking() { return this.headIsTracking; @@ -504,6 +395,7 @@ public boolean isHMDTracking() protected void processHotbar() { + int previousSlot = this.dh.interactTracker.hotbar; this.dh.interactTracker.hotbar = -1; if(mc.player == null) return; if(mc.player.getInventory() == null) return; @@ -563,14 +455,14 @@ protected void processHotbar() } //all that maths for this. dh.interactTracker.hotbar = box; - if(box != dh.interactTracker.hotbar){ + if(previousSlot != dh.interactTracker.hotbar){ triggerHapticPulse(0, 750); } } protected KeyMapping findKeyBinding(String name) { - return Arrays.stream(this.mc.options.keyMappings).filter((kb) -> + return Stream.concat(Arrays.stream(this.mc.options.keyMappings), mod.getHiddenKeyBindings().stream()).filter((kb) -> { return name.equals(kb.getName()); }).findFirst().orElse((KeyMapping)null); @@ -635,6 +527,9 @@ protected void hmdSampling() protected void updateAim() { + RenderPassManager.setGUIRenderPass(); + + if (this.mc != null) { this.hmdRotation.M[0][0] = this.hmdPose.M[0][0]; @@ -664,8 +559,8 @@ protected void updateAim() this.controllerPose[1] = this.hmdPose.inverted().inverted(); } - org.vivecraft.utils.math.Matrix4f[] amatrix4f = new org.vivecraft.utils.math.Matrix4f[] {new org.vivecraft.utils.math.Matrix4f(), new org.vivecraft.utils.math.Matrix4f()}; - org.vivecraft.utils.math.Matrix4f[] amatrix4f1 = new org.vivecraft.utils.math.Matrix4f[] {new org.vivecraft.utils.math.Matrix4f(), new org.vivecraft.utils.math.Matrix4f()}; + org.vivecraft.common.utils.math.Matrix4f[] amatrix4f = new org.vivecraft.common.utils.math.Matrix4f[] {new org.vivecraft.common.utils.math.Matrix4f(), new org.vivecraft.common.utils.math.Matrix4f()}; + org.vivecraft.common.utils.math.Matrix4f[] amatrix4f1 = new org.vivecraft.common.utils.math.Matrix4f[] {new org.vivecraft.common.utils.math.Matrix4f(), new org.vivecraft.common.utils.math.Matrix4f()}; if (this.dh.vrSettings.seated) { @@ -673,7 +568,7 @@ protected void updateAim() } else { - amatrix4f1[0] = org.vivecraft.utils.math.Matrix4f.multiply(this.controllerPose[0], this.getControllerComponentTransform(0, "handgrip")); + amatrix4f1[0] = org.vivecraft.common.utils.math.Matrix4f.multiply(this.controllerPose[0], this.getControllerComponentTransform(0, "handgrip")); } this.handRotation[0].M[0][0] = amatrix4f1[0].M[0][0]; @@ -699,7 +594,7 @@ protected void updateAim() } else { - amatrix4f[0] = org.vivecraft.utils.math.Matrix4f.multiply(this.controllerPose[0], this.getControllerComponentTransform(0, "tip")); + amatrix4f[0] = org.vivecraft.common.utils.math.Matrix4f.multiply(this.controllerPose[0], this.getControllerComponentTransform(0, "tip")); } Vector3 vector31 = Utils.convertMatrix4ftoTranslationVector(amatrix4f[0]); @@ -783,6 +678,16 @@ else if (d0 > (double)f2) this.controllerRotation[0].M[2][0] = matrix4f.m20; this.controllerRotation[0].M[2][1] = matrix4f.m21; this.controllerRotation[0].M[2][2] = matrix4f.m22; + + this.handRotation[0].M[0][0] = matrix4f.m00; + this.handRotation[0].M[0][1] = matrix4f.m01; + this.handRotation[0].M[0][2] = matrix4f.m02; + this.handRotation[0].M[1][0] = matrix4f.m10; + this.handRotation[0].M[1][1] = matrix4f.m11; + this.handRotation[0].M[1][2] = matrix4f.m12; + this.handRotation[0].M[2][0] = matrix4f.m20; + this.handRotation[0].M[2][1] = matrix4f.m21; + this.handRotation[0].M[2][2] = matrix4f.m22; } Vec3 vec32 = this.getAimVector(0); @@ -797,7 +702,7 @@ else if (d0 > (double)f2) } else { - amatrix4f1[1] = org.vivecraft.utils.math.Matrix4f.multiply(this.controllerPose[1], this.getControllerComponentTransform(1, "handgrip")); + amatrix4f1[1] = org.vivecraft.common.utils.math.Matrix4f.multiply(this.controllerPose[1], this.getControllerComponentTransform(1, "handgrip")); } this.handRotation[1].M[0][0] = amatrix4f1[1].M[0][0]; @@ -823,7 +728,7 @@ else if (d0 > (double)f2) } else { - amatrix4f[1] = org.vivecraft.utils.math.Matrix4f.multiply(this.controllerPose[1], this.getControllerComponentTransform(1, "tip")); + amatrix4f[1] = org.vivecraft.common.utils.math.Matrix4f.multiply(this.controllerPose[1], this.getControllerComponentTransform(1, "tip")); } vector31 = Utils.convertMatrix4ftoTranslationVector(amatrix4f[1]); @@ -900,7 +805,7 @@ public void processBindings() { boolean flag = this.mc.level != null && this.mc.player != null && this.mc.player.isSleeping(); boolean flag1 = this.mc.screen != null; - boolean flag2 = this.keyToggleMovement.consumeClick(); + boolean flag2 = mod.keyToggleMovement.consumeClick(); if (!this.mc.options.keyPickItem.isDown() && !flag2) { @@ -937,10 +842,10 @@ else if (this.dh.vrPlayer.isTeleportOverridden()) if (!flag1) { - if (this.keyWalkabout.isDown()) + if (mod.keyWalkabout.isDown()) { float f2 = f; - ControllerType controllertype = this.findActiveBindingControllerType(this.keyWalkabout); + ControllerType controllertype = this.findActiveBindingControllerType(mod.keyWalkabout); if (controllertype != null && controllertype == ControllerType.LEFT) { @@ -963,10 +868,10 @@ else if (this.dh.vrPlayer.isTeleportOverridden()) this.isWalkingAbout = false; } - if (this.keyRotateFree.isDown()) + if (mod.keyRotateFree.isDown()) { float f3 = f; - ControllerType controllertype5 = this.findActiveBindingControllerType(this.keyRotateFree); + ControllerType controllertype5 = this.findActiveBindingControllerType(mod.keyRotateFree); if (controllertype5 != null && controllertype5 == ControllerType.LEFT) { @@ -989,19 +894,19 @@ else if (this.dh.vrPlayer.isTeleportOverridden()) } } - if (this.keyHotbarNext.consumeClick()) + if (mod.keyHotbarNext.consumeClick()) { this.changeHotbar(-1); - this.triggerBindingHapticPulse(this.keyHotbarNext, 250); + this.triggerBindingHapticPulse(mod.keyHotbarNext, 250); } - if (this.keyHotbarPrev.consumeClick()) + if (mod.keyHotbarPrev.consumeClick()) { this.changeHotbar(1); - this.triggerBindingHapticPulse(this.keyHotbarPrev, 250); + this.triggerBindingHapticPulse(mod.keyHotbarPrev, 250); } - if (this.keyQuickTorch.consumeClick() && this.mc.player != null) + if (mod.keyQuickTorch.consumeClick() && this.mc.player != null) { for (int j = 0; j < 9; ++j) { @@ -1036,11 +941,11 @@ else if (this.dh.vrPlayer.isTeleportOverridden()) if (this.dh.vrSettings.worldRotationIncrement == 0.0F) { - float f4 = this.getInputAction(this.keyRotateAxis).getAxis2DUseTracked().getX(); + float f4 = this.getInputAction(mod.keyRotateAxis).getAxis2DUseTracked().getX(); if (f4 == 0.0F) { - f4 = this.getInputAction(this.keyFreeMoveRotate).getAxis2DUseTracked().getX(); + f4 = this.getInputAction(mod.keyFreeMoveRotate).getAxis2DUseTracked().getX(); } if (f4 != 0.0F) @@ -1050,13 +955,13 @@ else if (this.dh.vrPlayer.isTeleportOverridden()) this.dh.vrSettings.worldRotation %= 360.0F; } } - else if (this.keyRotateAxis.consumeClick() || this.keyFreeMoveRotate.consumeClick()) + else if (mod.keyRotateAxis.consumeClick() || mod.keyFreeMoveRotate.consumeClick()) { - float f5 = this.getInputAction(this.keyRotateAxis).getAxis2D(false).getX(); + float f5 = this.getInputAction(mod.keyRotateAxis).getAxis2D(false).getX(); if (f5 == 0.0F) { - f5 = this.getInputAction(this.keyFreeMoveRotate).getAxis2D(false).getX(); + f5 = this.getInputAction(mod.keyFreeMoveRotate).getAxis2D(false).getX(); } if (Math.abs(f5) > 0.5F) @@ -1068,7 +973,7 @@ else if (this.keyRotateAxis.consumeClick() || this.keyFreeMoveRotate.consumeClic if (this.dh.vrSettings.worldRotationIncrement == 0.0F) { - float f6 = VivecraftMovementInput.getMovementAxisValue(this.keyRotateLeft); + float f6 = VivecraftMovementInput.getMovementAxisValue(mod.keyRotateLeft); if (f6 > 0.0F) { @@ -1083,7 +988,7 @@ else if (this.keyRotateAxis.consumeClick() || this.keyFreeMoveRotate.consumeClic this.dh.vrSettings.worldRotation %= 360.0F; } } - else if (this.keyRotateLeft.consumeClick()) + else if (mod.keyRotateLeft.consumeClick()) { this.dh.vrSettings.worldRotation += this.dh.vrSettings.worldRotationIncrement; this.dh.vrSettings.worldRotation %= 360.0F; @@ -1091,7 +996,7 @@ else if (this.keyRotateLeft.consumeClick()) if (this.dh.vrSettings.worldRotationIncrement == 0.0F) { - float f7 = VivecraftMovementInput.getMovementAxisValue(this.keyRotateRight); + float f7 = VivecraftMovementInput.getMovementAxisValue(mod.keyRotateRight); if (f7 > 0.0F) { @@ -1106,7 +1011,7 @@ else if (this.keyRotateLeft.consumeClick()) this.dh.vrSettings.worldRotation %= 360.0F; } } - else if (this.keyRotateRight.consumeClick()) + else if (mod.keyRotateRight.consumeClick()) { this.dh.vrSettings.worldRotation -= this.dh.vrSettings.worldRotationIncrement; this.dh.vrSettings.worldRotation %= 360.0F; @@ -1114,9 +1019,9 @@ else if (this.keyRotateRight.consumeClick()) this.seatedRot = this.dh.vrSettings.worldRotation; - if (this.keyRadialMenu.consumeClick() && !flag1) + if (mod.keyRadialMenu.consumeClick() && !flag1) { - ControllerType controllertype1 = this.findActiveBindingControllerType(this.keyRadialMenu); + ControllerType controllertype1 = this.findActiveBindingControllerType(mod.keyRadialMenu); if (controllertype1 != null) { @@ -1124,7 +1029,7 @@ else if (this.keyRotateRight.consumeClick()) } } - if (this.keySwapMirrorView.consumeClick()) + if (mod.keySwapMirrorView.consumeClick()) { if (this.dh.vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON) { @@ -1138,14 +1043,14 @@ else if (this.dh.vrSettings.displayMirrorMode == VRSettings.MirrorMode.FIRST_PER this.dh.vrRenderer.reinitFrameBuffers("Mirror Setting Changed"); } - if (this.keyToggleKeyboard.consumeClick()) + if (mod.keyToggleKeyboard.consumeClick()) { KeyboardHandler.setOverlayShowing(!KeyboardHandler.Showing); } - if (this.keyMoveThirdPersonCam.consumeClick() && !ClientDataHolder.kiosk && !this.dh.vrSettings.seated && (this.dh.vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY || this.dh.vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON)) + if (mod.keyMoveThirdPersonCam.consumeClick() && !ClientDataHolderVR.kiosk && !this.dh.vrSettings.seated && (this.dh.vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY || this.dh.vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON)) { - ControllerType controllertype2 = this.findActiveBindingControllerType(this.keyMoveThirdPersonCam); + ControllerType controllertype2 = this.findActiveBindingControllerType(mod.keyMoveThirdPersonCam); if (controllertype2 != null) { @@ -1153,33 +1058,33 @@ else if (this.dh.vrSettings.displayMirrorMode == VRSettings.MirrorMode.FIRST_PER } } - if (!this.keyMoveThirdPersonCam.isDown() && VRHotkeys.isMovingThirdPersonCam() && VRHotkeys.getMovingThirdPersonCamTriggerer() == VRHotkeys.Triggerer.BINDING) + if (!mod.keyMoveThirdPersonCam.isDown() && VRHotkeys.isMovingThirdPersonCam() && VRHotkeys.getMovingThirdPersonCamTriggerer() == VRHotkeys.Triggerer.BINDING) { VRHotkeys.stopMovingThirdPersonCam(); this.dh.vrSettings.saveOptions(); } - if (VRHotkeys.isMovingThirdPersonCam() && VRHotkeys.getMovingThirdPersonCamTriggerer() == VRHotkeys.Triggerer.MENUBUTTON && this.keyMenuButton.consumeClick()) + if (VRHotkeys.isMovingThirdPersonCam() && VRHotkeys.getMovingThirdPersonCamTriggerer() == VRHotkeys.Triggerer.MENUBUTTON && mod.keyMenuButton.consumeClick()) { VRHotkeys.stopMovingThirdPersonCam(); this.dh.vrSettings.saveOptions(); } - if (KeyboardHandler.Showing && this.mc.screen == null && this.keyMenuButton.consumeClick()) + if (KeyboardHandler.Showing && this.mc.screen == null && mod.keyMenuButton.consumeClick()) { KeyboardHandler.setOverlayShowing(false); } - if (RadialHandler.isShowing() && this.keyMenuButton.consumeClick()) + if (RadialHandler.isShowing() && mod.keyMenuButton.consumeClick()) { RadialHandler.setOverlayShowing(false, (ControllerType)null); } - if (this.keyMenuButton.consumeClick()) + if (mod.keyMenuButton.consumeClick()) { if (!flag1) { - if (!ClientDataHolder.kiosk) + if (!ClientDataHolderVR.kiosk) { this.mc.pauseGame(false); } @@ -1193,80 +1098,18 @@ else if (this.dh.vrSettings.displayMirrorMode == VRSettings.MirrorMode.FIRST_PER KeyboardHandler.setOverlayShowing(false); } - if (this.keyExportWorld.consumeClick() && this.mc.level != null && this.mc.player != null) - { -// try -// { -// final BlockPos blockpos = this.mc.player.blockPosition(); -// int k = 320; -// File file1 = new File("menuworlds/custom_114"); -// file1.mkdirs(); -// int i = 0; -// -// while (true) -// { -// final File file2 = new File(file1, "world" + i + ".mmw"); -// -// if (!file2.exists()) -// { -// System.out.println("Exporting world... area size: 320"); -// System.out.println("Saving to " + file2.getAbsolutePath()); -// -// if (this.mc.isLocalServer()) -// { -// final Level level = this.mc.getSingleplayerServer().getLevel(this.mc.player.level.dimension()); -// CompletableFuture completablefuture = this.mc.getSingleplayerServer().submit(new Runnable() -// { -// public void run() -// { -// try -// { -// MenuWorldExporter.saveAreaToFile(level, blockpos.getX() - 160, blockpos.getZ() - 160, 320, 320, blockpos.getY(), file2); -// } -// catch (IOException ioexception) -// { -// ioexception.printStackTrace(); -// } -// } -// }); -// -// while (!completablefuture.isDone()) -// { -// Thread.sleep(10L); -// } -// } -// else -// { -// MenuWorldExporter.saveAreaToFile(this.mc.level, blockpos.getX() - 160, blockpos.getZ() - 160, 320, 320, blockpos.getY(), file2); -// this.mc.gui.getChat().addMessage(new TranslatableComponent("vivecraft.messages.menuworldexportclientwarning")); -// } -// -// this.mc.gui.getChat().addMessage(new TextComponent(LangHelper.get("vivecraft.messages.menuworldexportcomplete.1", 320))); -// this.mc.gui.getChat().addMessage(new TranslatableComponent("vivecraft.messages.menuworldexportcomplete.2", file2.getAbsolutePath())); -// break; -// } -// -// ++i; -// } -// } -// catch (Exception exception) -// { -// exception.printStackTrace(); -// } - } - - if (this.keyTogglePlayerList.consumeClick()) + if (mod.keyTogglePlayerList.consumeClick()) { ((GuiExtension) this.mc.gui).setShowPlayerList(!((GuiExtension) this.mc.gui).getShowPlayerList()); } - if (this.keyToggleHandheldCam.consumeClick() && this.mc.player != null) + if (mod.keyToggleHandheldCam.consumeClick() && this.mc.player != null) { this.dh.cameraTracker.toggleVisibility(); if (this.dh.cameraTracker.isVisible()) { - ControllerType controllertype3 = this.findActiveBindingControllerType(this.keyToggleHandheldCam); + ControllerType controllertype3 = this.findActiveBindingControllerType(mod.keyToggleHandheldCam); if (controllertype3 == null) { @@ -1279,14 +1122,14 @@ else if (this.dh.vrSettings.displayMirrorMode == VRSettings.MirrorMode.FIRST_PER } } - if (this.keyQuickHandheldCam.consumeClick() && this.mc.player != null) + if (mod.keyQuickHandheldCam.consumeClick() && this.mc.player != null) { if (!this.dh.cameraTracker.isVisible()) { this.dh.cameraTracker.toggleVisibility(); } - ControllerType controllertype4 = this.findActiveBindingControllerType(this.keyQuickHandheldCam); + ControllerType controllertype4 = this.findActiveBindingControllerType(mod.keyQuickHandheldCam); if (controllertype4 == null) { @@ -1299,7 +1142,7 @@ else if (this.dh.vrSettings.displayMirrorMode == VRSettings.MirrorMode.FIRST_PER this.dh.cameraTracker.startMoving(controllertype4.ordinal(), true); } - if (!this.keyQuickHandheldCam.isDown() && this.dh.cameraTracker.isMoving() && this.dh.cameraTracker.isQuickMode() && this.mc.player != null) + if (!mod.keyQuickHandheldCam.isDown() && this.dh.cameraTracker.isMoving() && this.dh.cameraTracker.isQuickMode() && this.mc.player != null) { this.dh.cameraTracker.stopMoving(); this.dh.grabScreenShot = true; @@ -1316,7 +1159,8 @@ public void populateInputActions() { Map map = this.getSpecialActionParams(); - for (KeyMapping keymapping : this.mc.options.keyMappings) + // iterate over all minecraft keys, and our hidden keys + for (KeyMapping keymapping : Stream.concat(Arrays.stream(this.mc.options.keyMappings), mod.getHiddenKeyBindings().stream()).toList()) { ActionParams actionparams = map.getOrDefault(keymapping.getName(), new ActionParams("optional", "boolean", (VRInputActionSet)null)); VRInputAction vrinputaction = new VRInputAction(keymapping, actionparams.requirement, actionparams.type, actionparams.actionSetOverride); @@ -1328,9 +1172,9 @@ public void populateInputActions() this.inputActionsByKeyBinding.put(vrinputaction1.keyBinding.getName(), vrinputaction1); } - this.getInputAction(this.keyVRInteract).setPriority(5).setEnabled(false); - this.getInputAction(this.keyClimbeyGrab).setPriority(10).setEnabled(false); - this.getInputAction(this.keyClimbeyJump).setEnabled(false); + this.getInputAction(mod.keyVRInteract).setPriority(5).setEnabled(false); + this.getInputAction(mod.keyClimbeyGrab).setPriority(10).setEnabled(false); + this.getInputAction(mod.keyClimbeyJump).setEnabled(false); this.getInputAction(GuiHandler.keyKeyboardClick).setPriority(50); this.getInputAction(GuiHandler.keyKeyboardShift).setPriority(50); } @@ -1346,26 +1190,26 @@ public Map getSpecialActionParams() this.addActionParams(map, this.mc.options.keyAttack, "suggested", "boolean", (VRInputActionSet)null); this.addActionParams(map, this.mc.options.keyUse, "suggested", "boolean", (VRInputActionSet)null); this.addActionParams(map, this.mc.options.keyChat, "optional", "boolean", VRInputActionSet.GLOBAL); - this.addActionParams(map, this.keyHotbarScroll, "optional", "vector2", (VRInputActionSet)null); - this.addActionParams(map, this.keyHotbarSwipeX, "optional", "vector2", (VRInputActionSet)null); - this.addActionParams(map, this.keyHotbarSwipeY, "optional", "vector2", (VRInputActionSet)null); - this.addActionParams(map, this.keyMenuButton, "suggested", "boolean", VRInputActionSet.GLOBAL); - this.addActionParams(map, this.keyTeleportFallback, "suggested", "vector1", (VRInputActionSet)null); - this.addActionParams(map, this.keyFreeMoveRotate, "optional", "vector2", (VRInputActionSet)null); - this.addActionParams(map, this.keyFreeMoveStrafe, "optional", "vector2", (VRInputActionSet)null); - this.addActionParams(map, this.keyRotateLeft, "optional", "vector1", (VRInputActionSet)null); - this.addActionParams(map, this.keyRotateRight, "optional", "vector1", (VRInputActionSet)null); - this.addActionParams(map, this.keyRotateAxis, "optional", "vector2", (VRInputActionSet)null); - this.addActionParams(map, this.keyRadialMenu, "suggested", "boolean", (VRInputActionSet)null); - this.addActionParams(map, this.keySwapMirrorView, "optional", "boolean", VRInputActionSet.GLOBAL); - this.addActionParams(map, this.keyToggleKeyboard, "optional", "boolean", VRInputActionSet.GLOBAL); - this.addActionParams(map, this.keyMoveThirdPersonCam, "optional", "boolean", VRInputActionSet.GLOBAL); - this.addActionParams(map, this.keyToggleHandheldCam, "optional", "boolean", VRInputActionSet.GLOBAL); - this.addActionParams(map, this.keyQuickHandheldCam, "optional", "boolean", VRInputActionSet.GLOBAL); - this.addActionParams(map, this.keyTrackpadTouch, "optional", "boolean", VRInputActionSet.TECHNICAL); - this.addActionParams(map, this.keyVRInteract, "suggested", "boolean", VRInputActionSet.CONTEXTUAL); - this.addActionParams(map, this.keyClimbeyGrab, "suggested", "boolean", (VRInputActionSet)null); - this.addActionParams(map, this.keyClimbeyJump, "suggested", "boolean", (VRInputActionSet)null); + this.addActionParams(map, mod.keyHotbarScroll, "optional", "vector2", (VRInputActionSet)null); + this.addActionParams(map, mod.keyHotbarSwipeX, "optional", "vector2", (VRInputActionSet)null); + this.addActionParams(map, mod.keyHotbarSwipeY, "optional", "vector2", (VRInputActionSet)null); + this.addActionParams(map, mod.keyMenuButton, "suggested", "boolean", VRInputActionSet.GLOBAL); + this.addActionParams(map, mod.keyTeleportFallback, "suggested", "vector1", (VRInputActionSet)null); + this.addActionParams(map, mod.keyFreeMoveRotate, "optional", "vector2", (VRInputActionSet)null); + this.addActionParams(map, mod.keyFreeMoveStrafe, "optional", "vector2", (VRInputActionSet)null); + this.addActionParams(map, mod.keyRotateLeft, "optional", "vector1", (VRInputActionSet)null); + this.addActionParams(map, mod.keyRotateRight, "optional", "vector1", (VRInputActionSet)null); + this.addActionParams(map, mod.keyRotateAxis, "optional", "vector2", (VRInputActionSet)null); + this.addActionParams(map, mod.keyRadialMenu, "suggested", "boolean", (VRInputActionSet)null); + this.addActionParams(map, mod.keySwapMirrorView, "optional", "boolean", VRInputActionSet.GLOBAL); + this.addActionParams(map, mod.keyToggleKeyboard, "optional", "boolean", VRInputActionSet.GLOBAL); + this.addActionParams(map, mod.keyMoveThirdPersonCam, "optional", "boolean", VRInputActionSet.GLOBAL); + this.addActionParams(map, mod.keyToggleHandheldCam, "optional", "boolean", VRInputActionSet.GLOBAL); + this.addActionParams(map, mod.keyQuickHandheldCam, "optional", "boolean", VRInputActionSet.GLOBAL); + this.addActionParams(map, mod.keyTrackpadTouch, "optional", "boolean", VRInputActionSet.TECHNICAL); + this.addActionParams(map, mod.keyVRInteract, "suggested", "boolean", VRInputActionSet.CONTEXTUAL); + this.addActionParams(map, mod.keyClimbeyGrab, "suggested", "boolean", (VRInputActionSet)null); + this.addActionParams(map, mod.keyClimbeyJump, "suggested", "boolean", (VRInputActionSet)null); this.addActionParams(map, GuiHandler.keyLeftClick, "suggested", "boolean", (VRInputActionSet)null); this.addActionParams(map, GuiHandler.keyScrollAxis, "optional", "vector2", (VRInputActionSet)null); this.addActionParams(map, GuiHandler.keyRightClick, "suggested", "boolean", (VRInputActionSet)null); @@ -1397,7 +1241,7 @@ public Map getSpecialActionParams() { System.out.println("Unknown key binding: " + astring[0]); } - else if (this.getKeyBindings().contains(keymapping)) + else if (mod.getAllKeyBindings().contains(keymapping)) { System.out.println("NO! Don't touch Vivecraft bindings!"); } @@ -1472,11 +1316,17 @@ private void addActionParams(Map map, KeyMapping keyBindin public abstract boolean init(); - public abstract boolean postinit(); + public abstract boolean postinit() throws RenderConfigException; - public abstract org.vivecraft.utils.math.Matrix4f getControllerComponentTransform(int var1, String var2); + public abstract org.vivecraft.common.utils.math.Matrix4f getControllerComponentTransform(int var1, String var2); public abstract boolean hasThirdController(); public abstract List getOrigins(VRInputAction var1); + + public abstract String getOriginName(long l); + + public abstract VRRenderer createVRRenderer(); + + public abstract boolean isActive(); } diff --git a/common/src/main/java/org/vivecraft/client_vr/provider/VRRenderer.java b/common/src/main/java/org/vivecraft/client_vr/provider/VRRenderer.java new file mode 100644 index 000000000..8b45a7cc2 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_vr/provider/VRRenderer.java @@ -0,0 +1,721 @@ +package org.vivecraft.client_vr.provider; + +import com.mojang.blaze3d.pipeline.RenderTarget; +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.platform.GlUtil; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.*; +import com.mojang.math.Matrix4f; +import net.minecraft.client.GraphicsStatus; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.resources.ResourceKey; +import net.minecraft.util.Tuple; +import net.minecraft.world.level.dimension.DimensionType; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL43; +import org.lwjgl.system.MemoryUtil; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.mod_compat_vr.ShadersHelper; +import org.vivecraft.client_vr.VRTextureTarget; +import org.vivecraft.client_vr.extensions.GameRendererExtension; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.client_vr.gameplay.screenhandlers.GuiHandler; +import org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler; +import org.vivecraft.client_vr.gameplay.screenhandlers.RadialHandler; +import org.vivecraft.client_vr.gameplay.trackers.TelescopeTracker; +import org.vivecraft.client_xr.render_pass.WorldRenderPass; +import org.vivecraft.client_vr.render.RenderConfigException; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client_vr.render.ShaderHelper; +import org.vivecraft.client_vr.render.VRShaders; + +import java.nio.FloatBuffer; +import java.util.ArrayList; +import java.util.List; + +public abstract class VRRenderer { + public static final String RENDER_SETUP_FAILURE_MESSAGE = "Failed to initialise stereo rendering plugin: "; + public RenderTarget cameraFramebuffer; + public RenderTarget cameraRenderFramebuffer; + protected int dispLastWidth; + protected int dispLastHeight; + public Matrix4f[] eyeproj = new Matrix4f[2]; + public RenderTarget framebufferEye0; + public RenderTarget framebufferEye1; + public RenderTarget framebufferMR; + public RenderTarget framebufferUndistorted; + public RenderTarget framebufferVrRender; + public RenderTarget fsaaFirstPassResultFBO; + public RenderTarget fsaaLastPassResultFBO; + protected float[][] hiddenMesheVertecies = new float[2][]; + public ResourceKey lastDimensionId = DimensionType.OVERWORLD_LOCATION; + public int lastDisplayFBHeight = 0; + public int lastDisplayFBWidth = 0; + public boolean lastEnableVsync = true; + public boolean lastFogFancy = true; + public boolean lastFogFast = false; + private GraphicsStatus previousGraphics = null; + public int lastGuiScale = 0; + protected VRSettings.MirrorMode lastMirror; + public int lastRenderDistanceChunks = -1; + public long lastWindow = 0L; + public float lastWorldScale = 0.0F; + protected int LeftEyeTextureId = -1; + protected int RightEyeTextureId = -1; + public int mirrorFBHeight; + public int mirrorFBWidth; + protected boolean reinitFramebuffers = true; + protected boolean acceptReinits = true; + public boolean reinitShadersFlag = false; + public float renderScale; + protected Tuple resolution; + public float ss = -1.0F; + public RenderTarget telescopeFramebufferL; + public RenderTarget telescopeFramebufferR; + protected MCVR vr; + + public VRRenderer(MCVR vr) { + this.vr = vr; + } + + protected void checkGLError(String message) { + //Config.checkGlError(message); TODO + if (GlStateManager._getError() != 0) { + System.err.println(message); + } + } + + public abstract void createRenderTexture(int var1, int var2); + + public abstract Matrix4f getProjectionMatrix(int var1, float var2, float var3); + + public abstract void endFrame() throws RenderConfigException; + + public abstract boolean providesStencilMask(); + + public void deleteRenderTextures() { + if (this.LeftEyeTextureId > 0) { + RenderSystem.deleteTexture(this.LeftEyeTextureId); + } + + if (this.RightEyeTextureId > 0) { + RenderSystem.deleteTexture(this.RightEyeTextureId); + } + + this.LeftEyeTextureId = this.RightEyeTextureId = -1; + } + + public void doStencil(boolean inverse) { + Minecraft minecraft = Minecraft.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); + + //setup stencil for writing + GL11.glEnable(GL11.GL_STENCIL_TEST); + RenderSystem.stencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_REPLACE); + RenderSystem.stencilMask(0xFF); // Write to stencil buffer + + if (inverse) { + //clear whole image for total mask in color, stencil, depth + RenderSystem.clearStencil(0xFF); + RenderSystem.clearDepth(0); + + RenderSystem.stencilFunc(GL11.GL_ALWAYS, 0, 0xFF); // Set any stencil to 0 + RenderSystem.colorMask(false, false, false, true); + + } else { + //clear whole image for total transparency + RenderSystem.clearStencil(0); + RenderSystem.clearDepth(1); + + RenderSystem.stencilFunc(GL11.GL_ALWAYS, 0xFF, 0xFF); // Set any stencil to 1 + RenderSystem.colorMask(true, true, true, true); + } + + RenderSystem.clear(GL11.GL_DEPTH_BUFFER_BIT | GL11.GL_STENCIL_BUFFER_BIT, false); + + RenderSystem.clearStencil(0); + RenderSystem.clearDepth(1); + + RenderSystem.depthMask(true); + RenderSystem.enableDepthTest(); + RenderSystem.depthFunc(GL11.GL_ALWAYS); + RenderSystem.disableTexture(); + RenderSystem.disableCull(); + + RenderSystem.setShaderColor(0F, 0F, 0F, 1.0F); + + + RenderTarget fb = minecraft.getMainRenderTarget(); + RenderSystem.viewport(0, 0, fb.viewWidth, fb.viewHeight); + RenderSystem.backupProjectionMatrix(); + RenderSystem.setProjectionMatrix(Matrix4f.orthographic(0.0F, fb.viewWidth, 0.0F, fb.viewHeight, 0.0F, 20.0F)); + RenderSystem.getModelViewStack().pushPose(); + RenderSystem.getModelViewStack().setIdentity(); + if (inverse) //draw on far clip + RenderSystem.getModelViewStack().translate(0, 0, -20); + RenderSystem.applyModelViewMatrix(); + int s = GlStateManager._getInteger(GL43.GL_CURRENT_PROGRAM); + + if (dataholder.currentPass == RenderPass.SCOPEL || dataholder.currentPass == RenderPass.SCOPER) { + drawCircle(fb.viewWidth, fb.viewHeight); + } else if (dataholder.currentPass == RenderPass.LEFT || dataholder.currentPass == RenderPass.RIGHT) { + drawMask(); + } + + RenderSystem.restoreProjectionMatrix(); + RenderSystem.getModelViewStack().popPose(); + + RenderSystem.depthMask(true); // Do write to depth buffer + RenderSystem.colorMask(true, true, true, true); + RenderSystem.enableDepthTest(); + + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.enableTexture(); + RenderSystem.enableCull(); + GlStateManager._glUseProgram(s); + RenderSystem.stencilFunc(GL11.GL_NOTEQUAL, 255, 1); + RenderSystem.stencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_KEEP); + RenderSystem.stencilMask(0); // Dont Write to stencil buffer + RenderSystem.depthFunc(GL11.GL_LEQUAL); + } + + FloatBuffer buffer = MemoryUtil.memAllocFloat(16); + FloatBuffer buffer2 = MemoryUtil.memAllocFloat(16); + + public void doFSAA(boolean hasShaders) { + if (this.fsaaFirstPassResultFBO == null) { + this.reinitFrameBuffers("FSAA Setting Changed"); + } else { + RenderSystem.disableBlend(); + // set to always, so that we can skip the clear + RenderSystem.depthFunc(GL43.GL_ALWAYS); + + // first pass + this.fsaaFirstPassResultFBO.bindWrite(true); + + RenderSystem.setShaderTexture(0, framebufferVrRender.getColorTextureId()); + RenderSystem.setShaderTexture(1, framebufferVrRender.getDepthTextureId()); + + RenderSystem.activeTexture(GL43.GL_TEXTURE1); + this.framebufferVrRender.bindRead(); + RenderSystem.activeTexture(GL43.GL_TEXTURE2); + RenderSystem.bindTexture(framebufferVrRender.getDepthTextureId()); + RenderSystem.activeTexture(GL43.GL_TEXTURE0); + + VRShaders.lanczosShader.setSampler("Sampler0", RenderSystem.getShaderTexture(0)); + VRShaders.lanczosShader.setSampler("Sampler1", RenderSystem.getShaderTexture(1)); + VRShaders._Lanczos_texelWidthOffsetUniform.set(1.0F / (3.0F * (float) this.fsaaFirstPassResultFBO.viewWidth)); + VRShaders._Lanczos_texelHeightOffsetUniform.set(0.0F); + VRShaders.lanczosShader.apply(); + + this.drawQuad(); + + // second pass + this.fsaaLastPassResultFBO.bindWrite(true); + RenderSystem.setShaderTexture(0, this.fsaaFirstPassResultFBO.getColorTextureId()); + RenderSystem.setShaderTexture(1, this.fsaaFirstPassResultFBO.getDepthTextureId()); + + RenderSystem.activeTexture(GL43.GL_TEXTURE1); + this.fsaaFirstPassResultFBO.bindRead(); + RenderSystem.activeTexture(GL43.GL_TEXTURE2); + RenderSystem.bindTexture(fsaaFirstPassResultFBO.getDepthTextureId()); + RenderSystem.activeTexture(GL43.GL_TEXTURE0); + + VRShaders.lanczosShader.setSampler("Sampler0", RenderSystem.getShaderTexture(0)); + VRShaders.lanczosShader.setSampler("Sampler1", RenderSystem.getShaderTexture(1)); + VRShaders._Lanczos_texelWidthOffsetUniform.set(0.0F); + VRShaders._Lanczos_texelHeightOffsetUniform.set(1.0F / (3.0F * (float) this.fsaaLastPassResultFBO.viewHeight)); + VRShaders.lanczosShader.apply(); + + this.drawQuad(); + + // Clean up time + VRShaders.lanczosShader.clear(); + Minecraft.getInstance().getMainRenderTarget().bindWrite(true); + RenderSystem.depthFunc(GL43.GL_LEQUAL); + } + } + + private void drawCircle(float width, float height) { + BufferBuilder builder = Tesselator.getInstance().getBuilder(); + builder.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION); + int i = 32; + float f = (float) (width / 2); + builder.vertex((float) (width / 2), (float) (width / 2), 0.0F).endVertex(); + for (int j = 0; j < i + 1; ++j) { + float f1 = (float) j / (float) i * (float) Math.PI * 2.0F; + float f2 = (float) ((double) (width / 2) + Math.cos((double) f1) * (double) f); + float f3 = (float) ((double) (width / 2) + Math.sin((double) f1) * (double) f); + builder.vertex(f2, f3, 0.0F).endVertex(); + } + builder.end(); + BufferUploader.end(builder); + } + + private void drawMask() { + Minecraft mc = Minecraft.getInstance(); + ClientDataHolderVR dh = ClientDataHolderVR.getInstance(); + float[] verts = getStencilMask(dh.currentPass); + if (verts == null) return; + + BufferBuilder builder = Tesselator.getInstance().getBuilder(); + builder.begin(VertexFormat.Mode.TRIANGLES, DefaultVertexFormat.POSITION); + + for (int i = 0; i < verts.length; i += 2) { + builder.vertex(verts[i] * dh.vrRenderer.renderScale, verts[i + 1] * dh.vrRenderer.renderScale, 0.0F).endVertex(); + } + + RenderSystem.setShader(GameRenderer::getPositionShader); + builder.end(); + BufferUploader.end(builder); + } + + private void drawQuad() { + //RenderSystem.setShader(GameRenderer::getPositionTexShader); + BufferBuilder builder = Tesselator.getInstance().getBuilder(); + builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + builder.vertex(-1.0F, -1.0F, 0.0F).uv(0.0F, 0.0F).endVertex(); + builder.vertex(1.0F, -1.0F, 0.0F).uv(1.0F, 0.0F).endVertex(); + builder.vertex(1.0F, 1.0F, 0.0F).uv(1.0F, 1.0F).endVertex(); + builder.vertex(-1.0F, 1.0F, 0.0F).uv(0.0F, 1.0F).endVertex(); + builder.end(); + BufferUploader._endInternal(builder); + } + + public double getCurrentTimeSecs() { + return (double) System.nanoTime() / 1.0E9D; + } + + public double getFrameTiming() { + return this.getCurrentTimeSecs(); + } + + public String getinitError() { + return this.vr.initStatus; + } + + public String getLastError() { + return ""; + } + + public String getName() { + return "OpenVR"; + } + + public List getRenderPasses() { + Minecraft minecraft = Minecraft.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); + List list = new ArrayList<>(); + list.add(RenderPass.LEFT); + list.add(RenderPass.RIGHT); + + // only do these, if the window is not minimized + if (minecraft.getWindow().getScreenWidth() > 0 && minecraft.getWindow().getScreenHeight() > 0) { + if (dataholder.vrSettings.displayMirrorMode == VRSettings.MirrorMode.FIRST_PERSON) { + list.add(RenderPass.CENTER); + } else if (dataholder.vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY) { + if (dataholder.vrSettings.mixedRealityUndistorted && dataholder.vrSettings.mixedRealityUnityLike) { + list.add(RenderPass.CENTER); + } + + list.add(RenderPass.THIRD); + } else if (dataholder.vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON) { + list.add(RenderPass.THIRD); + } + } + + if (minecraft.player != null) { + if (TelescopeTracker.isTelescope(minecraft.player.getMainHandItem()) && TelescopeTracker.isViewing(0)) { + list.add(RenderPass.SCOPER); + } + + if (TelescopeTracker.isTelescope(minecraft.player.getOffhandItem()) && TelescopeTracker.isViewing(1)) { + list.add(RenderPass.SCOPEL); + } + + if (dataholder.cameraTracker.isVisible()) { + list.add(RenderPass.CAMERA); + } + } + + return list; + } + + public abstract Tuple getRenderTextureSizes(); + + public float[] getStencilMask(RenderPass eye) { + if (this.hiddenMesheVertecies != null && (eye == RenderPass.LEFT || eye == RenderPass.RIGHT)) { + return eye == RenderPass.LEFT ? this.hiddenMesheVertecies[0] : this.hiddenMesheVertecies[1]; + } else { + return null; + } + } + + public boolean isInitialized() { + return this.vr.initSuccess; + } + + public void reinitFrameBuffers(String cause) { + if (acceptReinits) { + if (!reinitFramebuffers) { + // only print the first cause + System.out.println("Reinit Render: " + cause); + } + this.reinitFramebuffers = true; + } + } + + public void setupRenderConfiguration() throws Exception { + Minecraft minecraft = Minecraft.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); + + if (minecraft.getWindow().getWindow() != this.lastWindow) { + this.lastWindow = minecraft.getWindow().getWindow(); + this.reinitFrameBuffers("Window Handle Changed"); + } + + if (this.lastEnableVsync != minecraft.options.enableVsync) { + this.reinitFrameBuffers("VSync Changed"); + this.lastEnableVsync = minecraft.options.enableVsync; + } + + if (this.lastMirror != dataholder.vrSettings.displayMirrorMode) { + if (!ShadersHelper.isShaderActive()) { + // don't reinit with shaders, not needed + this.reinitFrameBuffers("Mirror Changed"); + } + this.lastMirror = dataholder.vrSettings.displayMirrorMode; + } + + if ((framebufferMR == null || framebufferUndistorted == null) && ShadersHelper.isShaderActive()) { + this.reinitFrameBuffers("Shaders on, but some buffers not initialized"); + } + if (Minecraft.getInstance().options.graphicsMode != previousGraphics) { + previousGraphics = Minecraft.getInstance().options.graphicsMode; + ClientDataHolderVR.getInstance().vrRenderer.reinitFrameBuffers("gfx setting change"); + } + + if (this.reinitFramebuffers) { + this.reinitShadersFlag = true; + this.checkGLError("Start Init"); + + if (GlUtil.getRenderer().toLowerCase().contains("intel")) //Optifine + { + throw new RenderConfigException("Incompatible", new TranslatableComponent("vivecraft.messages.intelgraphics", GlUtil.getRenderer())); + } + + if (!this.isInitialized()) { + throw new RenderConfigException("Failed to initialise stereo rendering plugin: " + this.getName(), new TextComponent(this.getinitError())); + } + + Tuple tuple = this.getRenderTextureSizes(); + int eyew = tuple.getA(); + int eyeh = tuple.getB(); + + destroy(); + + if (this.LeftEyeTextureId == -1) { + this.createRenderTexture(eyew, eyeh); + + if (this.LeftEyeTextureId == -1) { + throw new RenderConfigException("Failed to initialise stereo rendering plugin: " + this.getName(), new TextComponent(this.getLastError())); + } + + dataholder.print("Provider supplied render texture IDs: " + this.LeftEyeTextureId + " " + this.RightEyeTextureId); + dataholder.print("Provider supplied texture resolution: " + eyew + " x " + eyeh); + } + + this.checkGLError("Render Texture setup"); + + if (this.framebufferEye0 == null) { + this.framebufferEye0 = new VRTextureTarget("L Eye", eyew, eyeh, false, false, this.LeftEyeTextureId, false, true, false); + dataholder.print(this.framebufferEye0.toString()); + this.checkGLError("Left Eye framebuffer setup"); + } + + if (this.framebufferEye1 == null) { + this.framebufferEye1 = new VRTextureTarget("R Eye", eyew, eyeh, false, false, this.RightEyeTextureId, false, true, false); + dataholder.print(this.framebufferEye1.toString()); + this.checkGLError("Right Eye framebuffer setup"); + } + + this.renderScale = (float) Math.sqrt((double) dataholder.vrSettings.renderScaleFactor); + int eyeFBWidth = (int) Math.ceil((double) ((float) eyew * this.renderScale)); + int eyeFBHeight = (int) Math.ceil((double) ((float) eyeh * this.renderScale)); + this.framebufferVrRender = new VRTextureTarget("3D Render", eyeFBWidth, eyeFBHeight, true, false, -1, true, true, dataholder.vrSettings.vrUseStencil); + WorldRenderPass.stereoXR = new WorldRenderPass((VRTextureTarget) this.framebufferVrRender); + dataholder.print(this.framebufferVrRender.toString()); + this.checkGLError("3D framebuffer setup"); + this.mirrorFBWidth = minecraft.getWindow().getScreenWidth(); + this.mirrorFBHeight = minecraft.getWindow().getScreenHeight(); + + if (dataholder.vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY) { + this.mirrorFBWidth = minecraft.getWindow().getScreenWidth() / 2; + + if (dataholder.vrSettings.mixedRealityUnityLike) { + this.mirrorFBHeight = minecraft.getWindow().getScreenHeight() / 2; + } + } + + if (ShadersHelper.needsSameSizeBuffers()) + { + this.mirrorFBWidth = eyeFBWidth; + this.mirrorFBHeight = eyeFBHeight; + } + + List list = this.getRenderPasses(); + + for (RenderPass renderpass : list) { + System.out.println("Passes: " + renderpass.toString()); + } + + // only do these, if the window is not minimized + if (mirrorFBWidth > 0 && mirrorFBHeight > 0) { + if (list.contains(RenderPass.THIRD) || ShadersHelper.isShaderActive()) { + this.framebufferMR = new VRTextureTarget("Mixed Reality Render", this.mirrorFBWidth, this.mirrorFBHeight, true, false, -1, true, false, false); + WorldRenderPass.mixedReality = new WorldRenderPass((VRTextureTarget) this.framebufferMR); + dataholder.print(this.framebufferMR.toString()); + this.checkGLError("Mixed reality framebuffer setup"); + } + + if (list.contains(RenderPass.CENTER) || ShadersHelper.isShaderActive()) { + this.framebufferUndistorted = new VRTextureTarget("Undistorted View Render", this.mirrorFBWidth, this.mirrorFBHeight, true, false, -1, false, false, false); + WorldRenderPass.center = new WorldRenderPass((VRTextureTarget) this.framebufferUndistorted); + dataholder.print(this.framebufferUndistorted.toString()); + this.checkGLError("Undistorted view framebuffer setup"); + } + } + + GuiHandler.guiFramebuffer = new VRTextureTarget("GUI", GuiHandler.guiWidth, GuiHandler.guiHeight, true, false, -1, false, true, false); + dataholder.print(GuiHandler.guiFramebuffer.toString()); + this.checkGLError("GUI framebuffer setup"); + KeyboardHandler.Framebuffer = new VRTextureTarget("Keyboard", GuiHandler.guiWidth, GuiHandler.guiHeight, true, false, -1, false, true, false); + dataholder.print(KeyboardHandler.Framebuffer.toString()); + this.checkGLError("Keyboard framebuffer setup"); + RadialHandler.Framebuffer = new VRTextureTarget("Radial Menu", GuiHandler.guiWidth, GuiHandler.guiHeight, true, false, -1, false, true, false); + dataholder.print(RadialHandler.Framebuffer.toString()); + this.checkGLError("Radial framebuffer setup"); + int telescopeFBwidth = 720; + int telescopeFBheight = 720; + + if (ShadersHelper.needsSameSizeBuffers()) + { + telescopeFBwidth = eyeFBWidth; + telescopeFBheight = eyeFBHeight; + } + this.checkGLError("Mirror framebuffer setup"); + + this.telescopeFramebufferR = new VRTextureTarget("TelescopeR", telescopeFBwidth, telescopeFBheight, true, false, -1, true, false, false); + WorldRenderPass.rightTelescope = new WorldRenderPass((VRTextureTarget) this.telescopeFramebufferR); + dataholder.print(this.telescopeFramebufferR.toString()); + this.telescopeFramebufferR.setClearColor(0.0f, 0.0f, 0.0f, 1.0f); + this.telescopeFramebufferR.clear(Minecraft.ON_OSX); + this.checkGLError("TelescopeR framebuffer setup"); + + this.telescopeFramebufferL = new VRTextureTarget("TelescopeL", telescopeFBwidth, telescopeFBheight, true, false, -1, true, false, false); + WorldRenderPass.leftTelescope = new WorldRenderPass((VRTextureTarget) this.telescopeFramebufferL); + dataholder.print(this.telescopeFramebufferL.toString()); + this.telescopeFramebufferL.setClearColor(0.0f, 0.0f, 0.0f, 1.0f); + this.telescopeFramebufferL.clear(Minecraft.ON_OSX); + this.checkGLError("TelescopeL framebuffer setup"); + + int cameraFBwidth = Math.round(1920.0F * dataholder.vrSettings.handCameraResScale); + int cameraFBheight = Math.round(1080.0F * dataholder.vrSettings.handCameraResScale); + int cameraRenderFBwidth = cameraFBwidth; + int cameraRenderFBheight = cameraFBheight; + + if (ShadersHelper.needsSameSizeBuffers()) + { + // correct for camera aspect, since that is 16:9 + float aspect = (float)cameraFBwidth / (float)cameraFBheight; + if (aspect > (float)(eyeFBWidth / eyeFBHeight)) + { + cameraFBwidth = eyeFBWidth; + cameraFBheight = Math.round((float)eyeFBWidth / aspect); + } + else + { + cameraFBwidth = Math.round((float)eyeFBHeight * aspect); + cameraFBheight = eyeFBHeight; + } + + cameraRenderFBwidth = eyeFBWidth; + cameraRenderFBheight = eyeFBHeight; + } + + this.cameraFramebuffer = new VRTextureTarget("Handheld Camera", cameraFBwidth, cameraFBheight, true, false, -1, true, false, false); + dataholder.print(this.cameraFramebuffer.toString()); + + this.checkGLError("Camera framebuffer setup"); + this.cameraRenderFramebuffer = new VRTextureTarget("Handheld Camera Render", cameraRenderFBwidth, cameraRenderFBheight, true, false, -1, true, true, false); + WorldRenderPass.camera = new WorldRenderPass((VRTextureTarget) this.cameraRenderFramebuffer); + dataholder.print(this.cameraRenderFramebuffer.toString()); + + this.checkGLError("Camera render framebuffer setup"); + ((GameRendererExtension) minecraft.gameRenderer).setupClipPlanes(); + this.eyeproj[0] = this.getProjectionMatrix(0, ((GameRendererExtension) minecraft.gameRenderer).getMinClipDistance(), ((GameRendererExtension) minecraft.gameRenderer).getClipDistance()); + this.eyeproj[1] = this.getProjectionMatrix(1, ((GameRendererExtension) minecraft.gameRenderer).getMinClipDistance(), ((GameRendererExtension) minecraft.gameRenderer).getClipDistance()); + + if (dataholder.vrSettings.useFsaa) { + try { + this.checkGLError("pre FSAA FBO creation"); + this.fsaaFirstPassResultFBO = new VRTextureTarget("FSAA Pass1 FBO", eyew, eyeFBHeight, true, false, -1, false, false, false); + this.fsaaLastPassResultFBO = new VRTextureTarget("FSAA Pass2 FBO", eyew, eyeh, true, false, -1, false, false, false); + dataholder.print(this.fsaaFirstPassResultFBO.toString()); + dataholder.print(this.fsaaLastPassResultFBO.toString()); + this.checkGLError("FSAA FBO creation"); + VRShaders.setupFSAA(); + ShaderHelper.checkGLError("FBO init fsaa shader"); + } catch (Exception exception) { + dataholder.vrSettings.useFsaa = false; + dataholder.vrSettings.saveOptions(); + System.out.println(exception.getMessage()); + this.reinitFramebuffers = true; + return; + } + } + + try { + minecraft.mainRenderTarget = this.framebufferVrRender; + VRShaders.setupDepthMask(); + ShaderHelper.checkGLError("init depth shader"); + VRShaders.setupFOVReduction(); + ShaderHelper.checkGLError("init FOV shader"); + VRShaders.setupPortalShaders(); + ShaderHelper.checkGLError("init portal shader"); + minecraft.gameRenderer.checkEntityPostEffect(minecraft.getCameraEntity()); + } catch (Exception exception1) { + System.out.println(exception1.getMessage()); + System.exit(-1); + } + + if (minecraft.screen != null) { + int l2 = minecraft.getWindow().getGuiScaledWidth(); + int j3 = minecraft.getWindow().getGuiScaledHeight(); + minecraft.screen.init(minecraft, l2, j3); + } + + long windowPixels = (long)minecraft.getWindow().getScreenWidth() * minecraft.getWindow().getScreenHeight(); + long vrPixels = eyeFBWidth * eyeFBHeight * 2L; + + if (list.contains(RenderPass.CENTER)) { + vrPixels += windowPixels; + } + + if (list.contains(RenderPass.THIRD)) { + vrPixels += windowPixels; + } + + System.out.println("[Minecrift] New render config:" + + "\nOpenVR target width: " + eyew + ", height: " + eyeh + " [" + String.format("%.1f", (float) (eyew * eyeh) / 1000000.0F) + " MP]" + + "\nRender target width: " + eyeFBWidth + ", height: " + eyeFBHeight + " [Render scale: " + Math.round(dataholder.vrSettings.renderScaleFactor * 100.0F) + "%, " + String.format("%.1f", (float) (eyeFBWidth * eyeFBHeight) / 1000000.0F) + " MP]" + + "\nMain window width: " + minecraft.getWindow().getScreenWidth() + ", height: " + minecraft.getWindow().getScreenHeight() + " [" + String.format("%.1f", (float) windowPixels / 1000000.0F) + " MP]" + + "\nTotal shaded pixels per frame: " + String.format("%.1f", (float) vrPixels / 1000000.0F) + " MP (eye stencil not accounted for)"); + this.lastDisplayFBWidth = eyeFBWidth; + this.lastDisplayFBHeight = eyeFBHeight; + this.reinitFramebuffers = false; + + acceptReinits = false; + ShadersHelper.maybeReloadShaders(); + acceptReinits = true; + + } + } + + public boolean wasDisplayResized() { + Minecraft minecraft = Minecraft.getInstance(); + int i = minecraft.getWindow().getScreenHeight(); + int j = minecraft.getWindow().getScreenWidth(); + boolean flag = this.dispLastHeight != i || this.dispLastWidth != j; + this.dispLastHeight = i; + this.dispLastWidth = j; + return flag; + } + + public void destroy() { + if (this.framebufferVrRender != null) { + WorldRenderPass.stereoXR.close(); + WorldRenderPass.stereoXR = null; + this.framebufferVrRender.destroyBuffers(); + this.framebufferVrRender = null; + } + + if (this.framebufferMR != null) { + WorldRenderPass.mixedReality.close(); + WorldRenderPass.mixedReality = null; + this.framebufferMR.destroyBuffers(); + this.framebufferMR = null; + } + + if (this.framebufferUndistorted != null) { + WorldRenderPass.center.close(); + WorldRenderPass.center = null; + this.framebufferUndistorted.destroyBuffers(); + this.framebufferUndistorted = null; + } + + if (GuiHandler.guiFramebuffer != null) { + GuiHandler.guiFramebuffer.destroyBuffers(); + GuiHandler.guiFramebuffer = null; + } + + if (KeyboardHandler.Framebuffer != null) { + KeyboardHandler.Framebuffer.destroyBuffers(); + KeyboardHandler.Framebuffer = null; + } + + if (RadialHandler.Framebuffer != null) { + RadialHandler.Framebuffer.destroyBuffers(); + RadialHandler.Framebuffer = null; + } + + if (this.telescopeFramebufferL != null) { + WorldRenderPass.leftTelescope.close(); + WorldRenderPass.leftTelescope = null; + this.telescopeFramebufferL.destroyBuffers(); + this.telescopeFramebufferL = null; + } + + if (this.telescopeFramebufferR != null) { + WorldRenderPass.rightTelescope.close(); + WorldRenderPass.rightTelescope = null; + this.telescopeFramebufferR.destroyBuffers(); + this.telescopeFramebufferR = null; + } + + if (this.cameraFramebuffer != null) { + this.cameraFramebuffer.destroyBuffers(); + this.cameraFramebuffer = null; + } + + if (this.cameraRenderFramebuffer != null) { + WorldRenderPass.camera.close(); + WorldRenderPass.camera = null; + this.cameraRenderFramebuffer.destroyBuffers(); + this.cameraRenderFramebuffer = null; + } + + if (this.fsaaFirstPassResultFBO != null) { + this.fsaaFirstPassResultFBO.destroyBuffers(); + this.fsaaFirstPassResultFBO = null; + } + + if (this.fsaaLastPassResultFBO != null) { + this.fsaaLastPassResultFBO.destroyBuffers(); + this.fsaaLastPassResultFBO = null; + } + + if (this.framebufferEye0 != null) { + this.framebufferEye0.destroyBuffers(); + this.framebufferEye0 = null; + } + + if (this.framebufferEye1 != null) { + this.framebufferEye1.destroyBuffers(); + this.framebufferEye1 = null; + } + } +} diff --git a/common/src/main/java/org/vivecraft/client_vr/provider/nullvr/NullVR.java b/common/src/main/java/org/vivecraft/client_vr/provider/nullvr/NullVR.java new file mode 100644 index 000000000..9d7ce68c9 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_vr/provider/nullvr/NullVR.java @@ -0,0 +1,206 @@ +package org.vivecraft.client_vr.provider.nullvr; + +import net.minecraft.client.KeyMapping; +import net.minecraft.client.Minecraft; +import org.lwjgl.glfw.GLFW; +import org.vivecraft.client.VivecraftVRMod; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.MethodHolder; +import org.vivecraft.client_vr.gameplay.screenhandlers.GuiHandler; +import org.vivecraft.client_vr.provider.ControllerType; +import org.vivecraft.client_vr.provider.MCVR; +import org.vivecraft.client_vr.provider.VRRenderer; +import org.vivecraft.client_vr.provider.openvr_lwjgl.VRInputAction; +import org.vivecraft.client.utils.Utils; +import org.vivecraft.common.utils.math.Matrix4f; + +import java.util.*; + +public class NullVR extends MCVR +{ + protected static NullVR ome; + + private boolean vrActive = true; + private boolean vrActiveChangedLastFrame = false; + + public NullVR(Minecraft mc, ClientDataHolderVR dh) + { + super(mc, dh, VivecraftVRMod.INSTANCE); + ome = this; + this.hapticScheduler = new NullVRHapticScheduler(); + } + + public static NullVR get() + { + return ome; + } + + + @Override + public void destroy() + { + this.initialized = false; + } + + @Override + public String getID() + { + return "nullDriver"; + } + + @Override + public String getName() + { + return "nullDriver"; + } + + @Override + public float[] getPlayAreaSize() + { + return new float[]{2,2}; + } + + @Override + public boolean init() + { + if (!this.initialized) + { + this.mc = Minecraft.getInstance(); + + // only supports seated mode + System.out.println("NullDriver. Forcing seated mode."); + this.dh.vrSettings.seated = true; + + this.headIsTracking = false; + Utils.Matrix4fSetIdentity(this.hmdPose); + this.hmdPose.M[1][3] = 1.62F; + + // eye offset, 10cm total distance + this.hmdPoseLeftEye.M[0][3] = -0.05F; + this.hmdPoseRightEye.M[0][3] = 0.05F; + + this.initialized = true; + this.initSuccess = true; + } + + return true; + } + + @Override + public void poll(long frameIndex) + { + if (this.initialized) + { + + this.mc.getProfiler().push("updatePose"); + + if (mc.screen == null) { + + // don't permanently change the sensitivity + float xSens = this.dh.vrSettings.xSensitivity; + float xKey = this.dh.vrSettings.keyholeX; + + this.dh.vrSettings.xSensitivity = this.dh.vrSettings.ySensitivity * 1.636F * ((float)mc.getWindow().getScreenWidth() / (float)mc.getWindow().getScreenHeight()); + this.dh.vrSettings.keyholeX = 1; + + this.updateAim(); + + this.dh.vrSettings.xSensitivity = xSens; + this.dh.vrSettings.keyholeX = xKey; + + + // point head in cursor direction + hmdRotation.M[0][0] = handRotation[0].M[0][0]; + hmdRotation.M[0][1] = handRotation[0].M[0][1]; + hmdRotation.M[0][2] = handRotation[0].M[0][2]; + hmdRotation.M[1][0] = handRotation[0].M[1][0]; + hmdRotation.M[1][1] = handRotation[0].M[1][1]; + hmdRotation.M[1][2] = handRotation[0].M[1][2]; + hmdRotation.M[2][0] = handRotation[0].M[2][0]; + hmdRotation.M[2][1] = handRotation[0].M[2][1]; + hmdRotation.M[2][2] = handRotation[0].M[2][2]; + } else if(GuiHandler.guiRotation_room != null){ + // look at screen, so that it's centered + hmdRotation.M[0][0] = GuiHandler.guiRotation_room.M[0][0]; + hmdRotation.M[0][1] = GuiHandler.guiRotation_room.M[0][1]; + hmdRotation.M[0][2] = GuiHandler.guiRotation_room.M[0][2]; + hmdRotation.M[1][0] = GuiHandler.guiRotation_room.M[1][0]; + hmdRotation.M[1][1] = GuiHandler.guiRotation_room.M[1][1]; + hmdRotation.M[1][2] = GuiHandler.guiRotation_room.M[1][2]; + hmdRotation.M[2][0] = GuiHandler.guiRotation_room.M[2][0]; + hmdRotation.M[2][1] = GuiHandler.guiRotation_room.M[2][1]; + hmdRotation.M[2][2] = GuiHandler.guiRotation_room.M[2][2]; + + } + this.mc.getProfiler().popPush("hmdSampling"); + this.hmdSampling(); + + this.mc.getProfiler().pop(); + } + } + + @Override + public void processInputs() + { + } + + @Override + @Deprecated + protected void triggerBindingHapticPulse(KeyMapping binding, int duration) + { + } + + @Override + protected ControllerType findActiveBindingControllerType(KeyMapping binding) + { + return null; + } + + @Override + public Matrix4f getControllerComponentTransform(int controllerIndex, String componenetName) + { + return new Matrix4f(); + } + + @Override + public String getOriginName(long handle) + { + return "NullDriver"; + } + + @Override + public boolean postinit() + { + this.populateInputActions(); + return true; + } + + @Override + public boolean hasThirdController() + { + return false; + } + + @Override + public List getOrigins(VRInputAction var1) { + return null; + } + + @Override + public VRRenderer createVRRenderer() { + return new NullVRStereoRenderer(this); + } + + @Override + public boolean isActive() { + if (MethodHolder.isKeyDown(GLFW.GLFW_KEY_RIGHT_CONTROL) && MethodHolder.isKeyDown(GLFW.GLFW_KEY_F6)) { + if (!vrActiveChangedLastFrame) { + vrActive = !vrActive; + vrActiveChangedLastFrame = true; + } + } else { + vrActiveChangedLastFrame = false; + } + return vrActive; + } +} diff --git a/common/src/main/java/org/vivecraft/client_vr/provider/nullvr/NullVRHapticScheduler.java b/common/src/main/java/org/vivecraft/client_vr/provider/nullvr/NullVRHapticScheduler.java new file mode 100644 index 000000000..b5fa90b21 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_vr/provider/nullvr/NullVRHapticScheduler.java @@ -0,0 +1,12 @@ +package org.vivecraft.client_vr.provider.nullvr; + + +import org.vivecraft.client_vr.provider.ControllerType; +import org.vivecraft.client_vr.provider.HapticScheduler; + +public class NullVRHapticScheduler extends HapticScheduler +{ + public void queueHapticPulse(ControllerType controller, float durationSeconds, float frequency, float amplitude, float delaySeconds) + { + } +} diff --git a/common/src/main/java/org/vivecraft/client_vr/provider/nullvr/NullVRStereoRenderer.java b/common/src/main/java/org/vivecraft/client_vr/provider/nullvr/NullVRStereoRenderer.java new file mode 100644 index 000000000..946fbb1ec --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_vr/provider/nullvr/NullVRStereoRenderer.java @@ -0,0 +1,119 @@ +package org.vivecraft.client_vr.provider.nullvr; + +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.platform.TextureUtil; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.math.Matrix4f; +import net.minecraft.util.Tuple; +import org.lwjgl.opengl.GL11; +import org.vivecraft.client_vr.provider.MCVR; +import org.vivecraft.client_vr.provider.VRRenderer; +import org.vivecraft.client_vr.render.RenderPass; + +public class NullVRStereoRenderer extends VRRenderer +{ + public NullVRStereoRenderer(MCVR vr) + { + super(vr); + } + + @Override + public Tuple getRenderTextureSizes() + { + if (this.resolution != null) + { + return this.resolution; + } + else + { + this.resolution = new Tuple<>(2048, 2048); + System.out.println("NullVR Render Res " + this.resolution.getA() + " x " + this.resolution.getB()); + this.ss = -1.0F; + System.out.println("NullVR Supersampling: " + this.ss); + + return this.resolution; + } + } + + @Override + public Matrix4f getProjectionMatrix(int eyeType, float nearClip, float farClip) + { + return Matrix4f.perspective(90.0F, 1.0F, nearClip, farClip); + } + + @Override + public String getLastError() + { + return ""; + } + + @Override + public void createRenderTexture(int lwidth, int lheight) + { + this.LeftEyeTextureId = GlStateManager._genTexture(); + int i = GlStateManager._getInteger(GL11.GL_TEXTURE_BINDING_2D); + RenderSystem.bindTexture(this.LeftEyeTextureId); + RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); + RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + GlStateManager._texImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA8, lwidth, lheight, 0, GL11.GL_RGBA, GL11.GL_INT, null); + + RenderSystem.bindTexture(i); + this.RightEyeTextureId = GlStateManager._genTexture(); + i = GlStateManager._getInteger(GL11.GL_TEXTURE_BINDING_2D); + RenderSystem.bindTexture(this.RightEyeTextureId); + RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); + RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + GlStateManager._texImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA8, lwidth, lheight, 0, GL11.GL_RGBA, GL11.GL_INT, null); + RenderSystem.bindTexture(i); + } + + @Override + public void endFrame() + { + } + + @Override + public boolean providesStencilMask() + { + return false; + } + + + @Override + public float[] getStencilMask(RenderPass eye) + { + return null; + } + + @Override + public String getName() + { + return "NullVR"; + } + + @Override + public boolean isInitialized() + { + return this.vr.initSuccess; + } + + @Override + public String getinitError() + { + return this.vr.initStatus; + } + + @Override + public void destroy() { + super.destroy(); + if (this.LeftEyeTextureId > -1) { + TextureUtil.releaseTextureId(this.LeftEyeTextureId); + this.LeftEyeTextureId = -1; + } + + if (this.RightEyeTextureId > -1) { + TextureUtil.releaseTextureId(this.RightEyeTextureId); + this.RightEyeTextureId = -1; + } + } +} diff --git a/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/MCOpenVR.java b/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/MCOpenVR.java new file mode 100644 index 000000000..9eaf6ca92 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/MCOpenVR.java @@ -0,0 +1,1291 @@ +package org.vivecraft.client_vr.provider.openvr_lwjgl; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.mojang.blaze3d.platform.InputConstants; +import com.sun.jna.NativeLibrary; +import net.minecraft.client.KeyMapping; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.world.phys.Vec3; +import org.lwjgl.openvr.*; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; +import org.vivecraft.client.VivecraftVRMod; +import org.vivecraft.client.utils.Utils; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.gameplay.screenhandlers.GuiHandler; +import org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler; +import org.vivecraft.client_vr.gameplay.screenhandlers.RadialHandler; +import org.vivecraft.client_vr.provider.*; +import org.vivecraft.client_vr.provider.openvr_lwjgl.control.TrackpadSwipeSampler; +import org.vivecraft.client_vr.provider.openvr_lwjgl.control.VRInputActionSet; +import org.vivecraft.client_vr.render.RenderConfigException; +import org.vivecraft.client_vr.settings.VRHotkeys; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.client_vr.utils.external.jinfinadeck; +import org.vivecraft.client_vr.utils.external.jkatvr; +import org.vivecraft.common.utils.math.Matrix4f; +import org.vivecraft.common.utils.math.Vector3; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.OutputStreamWriter; +import java.lang.management.ManagementFactory; +import java.nio.ByteBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.nio.LongBuffer; +import java.nio.charset.StandardCharsets; +import java.util.*; + +import static org.lwjgl.openvr.VR.*; +import static org.lwjgl.openvr.VRApplications.*; +import static org.lwjgl.openvr.VRCompositor.*; +import static org.lwjgl.openvr.VRInput.*; +import static org.lwjgl.openvr.VRRenderModels.*; +import static org.lwjgl.openvr.VRSettings.VRSettings_GetFloat; +import static org.lwjgl.openvr.VRSystem.*; + +public class MCOpenVR extends MCVR { + public static final int LEFT_CONTROLLER = 1; + public static final int RIGHT_CONTROLLER = 0; + public static final int THIRD_CONTROLLER = 2; + protected static MCOpenVR ome; + private final String ACTION_EXTERNAL_CAMERA = "/actions/mixedreality/in/externalcamera"; + private final String ACTION_LEFT_HAND = "/actions/global/in/lefthand"; + private final String ACTION_LEFT_HAPTIC = "/actions/global/out/lefthaptic"; + private final String ACTION_RIGHT_HAND = "/actions/global/in/righthand"; + private final String ACTION_RIGHT_HAPTIC = "/actions/global/out/righthaptic"; + private Map actionSetHandles = new EnumMap<>(VRInputActionSet.class); + private VRActiveActionSet.Buffer activeActionSetsBuffer; + private Map controllerComponentNames; + private Map controllerComponentTransforms; + private boolean dbg = true; + private long externalCameraPoseHandle; + private int[] controllerDeviceIndex = new int[3]; + private boolean getXforms = true; + private final Gson GSON = (new GsonBuilder()).setPrettyPrinting().disableHtmlEscaping().create(); + private final IntBuffer hmdErrorStore = MemoryUtil.memCallocInt(1); + private IntBuffer hmdErrorStoreBuf; + private TrackedDevicePose.Buffer hmdTrackedDevicePoses; + private boolean inputInitialized; + private long leftControllerHandle; + private long leftHapticHandle; + private long leftPoseHandle; + private InputOriginInfo originInfo; + private boolean paused = false; + private InputPoseActionData poseData; + private long rightControllerHandle; + private long rightHapticHandle; + private long rightPoseHandle; + private final VRTextureBounds texBounds = VRTextureBounds.calloc(); + private Map trackpadSwipeSamplers = new HashMap<>(); + private boolean tried; + private Queue vrEvents = new LinkedList<>(); + final Texture texType0 = Texture.calloc(); + final Texture texType1 = Texture.calloc(); + InputDigitalActionData digital = InputDigitalActionData.calloc(); + InputAnalogActionData analog = InputAnalogActionData.calloc(); + + public MCOpenVR(Minecraft mc, ClientDataHolderVR dh) { + super(mc, dh, VivecraftVRMod.INSTANCE); + ome = this; + this.hapticScheduler = new OpenVRHapticScheduler(); + + for (int i = 0; i < 3; ++i) { + this.controllerDeviceIndex[i] = -1; + } + + this.poseData = InputPoseActionData.calloc(); + this.originInfo = InputOriginInfo.calloc(); + } + + public static MCOpenVR get() { + return ome; + } + + static String getInputErrorName(int code) { + switch (code) { + case 0: + return "wat"; + + case 1: + return "NameNotFound"; + + case 2: + return "WrongType"; + + case 3: + return "InvalidHandle"; + + case 4: + return "InvalidParam"; + + case 5: + return "NoSteam"; + + case 6: + return "MaxCapacityReached"; + + case 7: + return "IPCError"; + + case 8: + return "NoActiveActionSet"; + + case 9: + return "InvalidDevice"; + + case 10: + return "InvalidSkeleton"; + + case 11: + return "InvalidBoneCount"; + + case 12: + return "InvalidCompressedData"; + + case 13: + return "NoData"; + + case 14: + return "BufferTooSmall"; + + case 15: + return "MismatchedActionManifest"; + + case 16: + return "MissingSkeletonData"; + + case 17: + return "InvalidBoneIndex"; + + default: + return "Unknown"; + } + } + + public void destroy() { + if (this.initialized) { + try { + VR_ShutdownInternal(); + this.initialized = false; + + if (ClientDataHolderVR.katvr) { + jkatvr.Halt(); + } + + if (ClientDataHolderVR.infinadeck) { + jinfinadeck.Destroy(); + } + } catch (Throwable throwable) { + throwable.printStackTrace(); + } + } + } + + public String getID() { + return "openvr_lwjgl"; + } + + public String getName() { + return "OpenVR_LWJGL"; + } + + public float[] getPlayAreaSize() { + try (MemoryStack stack = MemoryStack.stackPush()) { + if (OpenVR.VRChaperone != null && OpenVR.VRChaperone.GetPlayAreaSize != 0) { + FloatBuffer pSizeZ = stack.callocFloat(1); + FloatBuffer pSizeX = stack.callocFloat(1); + boolean b0 = VRChaperone.VRChaperone_GetPlayAreaSize(pSizeX, pSizeZ); + return b0 ? new float[]{pSizeX.get(0) * this.dh.vrSettings.walkMultiplier, pSizeZ.get(0) * this.dh.vrSettings.walkMultiplier} : null; + } else { + return null; + } + } + } + + public boolean init() { + if (this.initialized) { + return true; + } else if (this.tried) { + return this.initialized; + } else { + this.tried = true; + this.mc = Minecraft.getInstance(); + try { + this.initializeOpenVR(); + this.initOpenVRCompositor(); +// this.initOpenVRSettings(); +// this.initOpenVRRenderModels(); +// this.initOpenVRChaperone(); +// this.initOpenVRApplications(); +// this.initOpenVRInput(); +// this.initOpenComposite(); + } catch (Exception exception2) { + exception2.printStackTrace(); + this.initSuccess = false; + this.initStatus = exception2.getLocalizedMessage(); + return false; + } + + if (OpenVR.VRInput == null) { + System.out.println("Controller input not available. Forcing seated mode."); + this.dh.vrSettings.seated = true; + } + + System.out.println("OpenVR initialized & VR connected."); + this.deviceVelocity = new Vec3[64]; + + for (int i = 0; i < this.poseMatrices.length; ++i) { + this.poseMatrices[i] = new Matrix4f(); + this.deviceVelocity[i] = new Vec3(0.0D, 0.0D, 0.0D); + } + + this.initialized = true; + + if (ClientDataHolderVR.katvr) { + try { + System.out.println("Waiting for KATVR...."); + Utils.unpackNatives("katvr"); + NativeLibrary.addSearchPath("WalkerBase.dll", (new File("openvr/katvr")).getAbsolutePath()); + jkatvr.Init(1); + jkatvr.Launch(); + + if (jkatvr.CheckForLaunch()) { + System.out.println("KATVR Loaded"); + } else { + System.out.println("KATVR Failed to load"); + } + } catch (Exception exception1) { + System.out.println("KATVR crashed: " + exception1.getMessage()); + } + } + + if (ClientDataHolderVR.infinadeck) { + try { + System.out.println("Waiting for Infinadeck...."); + Utils.unpackNatives("infinadeck"); + NativeLibrary.addSearchPath("InfinadeckAPI.dll", (new File("openvr/infinadeck")).getAbsolutePath()); + + if (jinfinadeck.InitConnection()) { + jinfinadeck.CheckConnection(); + System.out.println("Infinadeck Loaded"); + } else { + System.out.println("Infinadeck Failed to load"); + } + } catch (Exception exception) { + System.out.println("Infinadeck crashed: " + exception.getMessage()); + } + } + + return true; + } + } + + public void poll(long frameIndex) { + if (this.initialized) { + this.paused = VRSystem_ShouldApplicationPause(); + this.mc.getProfiler().push("events"); + this.pollVREvents(); + + if (!this.dh.vrSettings.seated) { + this.mc.getProfiler().popPush("controllers"); + this.mc.getProfiler().push("gui"); + + if (this.mc.screen == null && this.dh.vrSettings.vrTouchHotbar) { + VRSettings vrsettings = this.dh.vrSettings; + + if (this.dh.vrSettings.vrHudLockMode != VRSettings.HUDLock.HEAD && this.hudPopup) { + this.processHotbar(); + } + } + + this.mc.getProfiler().pop(); + } + + this.mc.getProfiler().popPush("processEvents"); + this.processVREvents(); + this.mc.getProfiler().popPush("updatePose/Vsync"); + this.updatePose(); + this.mc.getProfiler().popPush("processInputs"); + this.processInputs(); + this.mc.getProfiler().popPush("hmdSampling"); + this.hmdSampling(); + this.mc.getProfiler().pop(); + } + } + + public void processInputs() { + if (!this.dh.vrSettings.seated && !ClientDataHolderVR.viewonly && this.inputInitialized) { + for (VRInputAction vrinputaction : this.inputActions.values()) { + if (vrinputaction.isHanded()) { + for (ControllerType controllertype : ControllerType.values()) { + vrinputaction.setCurrentHand(controllertype); + this.processInputAction(vrinputaction); + } + } else { + this.processInputAction(vrinputaction); + } + } + + this.processScrollInput(GuiHandler.keyScrollAxis, () -> + { + InputSimulator.scrollMouse(0.0D, 1.0D); + }, () -> + { + InputSimulator.scrollMouse(0.0D, -1.0D); + }); + this.processScrollInput(VivecraftVRMod.INSTANCE.keyHotbarScroll, () -> + { + this.changeHotbar(-1); + }, () -> + { + this.changeHotbar(1); + }); + this.processSwipeInput(VivecraftVRMod.INSTANCE.keyHotbarSwipeX, () -> + { + this.changeHotbar(1); + }, () -> + { + this.changeHotbar(-1); + }, (Runnable) null, (Runnable) null); + this.processSwipeInput(VivecraftVRMod.INSTANCE.keyHotbarSwipeY, (Runnable) null, (Runnable) null, () -> + { + this.changeHotbar(-1); + }, () -> + { + this.changeHotbar(1); + }); + this.ignorePressesNextFrame = false; + } + } + + @Deprecated + protected void triggerBindingHapticPulse(KeyMapping binding, int duration) { + ControllerType controllertype = this.findActiveBindingControllerType(binding); + + if (controllertype != null) { + this.triggerHapticPulse(controllertype, duration); + } + } + + private boolean isError() { + return this.hmdErrorStore.get(0) != EVRInitError_VRInitError_None || this.hmdErrorStoreBuf.get(0) != EVRInitError_VRInitError_None; + } + + private void debugOut(int deviceindex) { +// System.out.println("******************* VR DEVICE: " + deviceindex + " *************************"); +// +// for (Field field : VR.ETrackedDeviceProperty.class.getDeclaredFields()) { +// try { +// String[] astring = field.getName().split("_"); +// String s = astring[astring.length - 1]; +// String s1 = ""; +// +// VRSystem_ShouldApplicationPause() +// +// if (s.equals("Float")) { +// s1 = s1 + field.getName() + " " + this.vrsystem.GetFloatTrackedDeviceProperty.apply(deviceindex, field.getInt((Object) null), this.hmdErrorStore); +// } else if (s.equals("String")) { +// Pointer pointer = new Memory(32768L); +// this.vrsystem.GetStringTrackedDeviceProperty.apply(deviceindex, field.getInt((Object) null), pointer, 32767, this.hmdErrorStore); +// s1 = s1 + field.getName() + " " + pointer.getString(0L); +// } else if (s.equals("Bool")) { +// s1 = s1 + field.getName() + " " + this.vrsystem.GetBoolTrackedDeviceProperty.apply(deviceindex, field.getInt((Object) null), this.hmdErrorStore); +// } else if (s.equals("Int32")) { +// s1 = s1 + field.getName() + " " + this.vrsystem.GetInt32TrackedDeviceProperty.apply(deviceindex, field.getInt((Object) null), this.hmdErrorStore); +// } else if (s.equals("Uint64")) { +// s1 = s1 + field.getName() + " " + this.vrsystem.GetUint64TrackedDeviceProperty.apply(deviceindex, field.getInt((Object) null), this.hmdErrorStore); +// } else { +// s1 = s1 + field.getName() + " (skipped)"; +// } +// +// System.out.println(s1.replace("ETrackedDeviceProperty_Prop_", "")); +// } catch (IllegalAccessException illegalaccessexception) { +// illegalaccessexception.printStackTrace(); +// } +// } +// +// System.out.println("******************* END VR DEVICE: " + deviceindex + " *************************"); + } + + protected ControllerType findActiveBindingControllerType(KeyMapping binding) { + if (!this.inputInitialized) { + return null; + } else { + long i = this.getInputAction(binding).getLastOrigin(); + return i != 0L ? this.getOriginControllerType(i) : null; + } + } + + private void generateActionManifest() { + Map map = new HashMap<>(); + List> list = new ArrayList<>(); + + for (VRInputActionSet vrinputactionset : VRInputActionSet.values()) { + String s = vrinputactionset.usage; + + if (vrinputactionset.advanced && !this.dh.vrSettings.allowAdvancedBindings) { + s = "hidden"; + } + + list.add(ImmutableMap.builder().put("name", vrinputactionset.name).put("usage", s).build()); + } + + map.put("action_sets", list); + List list1 = new ArrayList<>(this.inputActions.values()); + list1.sort(Comparator.comparing((action) -> + { + return action.keyBinding; + })); + List> list2 = new ArrayList<>(); + + for (VRInputAction vrinputaction : list1) { + list2.add(ImmutableMap.builder().put("name", vrinputaction.name).put("requirement", vrinputaction.requirement).put("type", vrinputaction.type).build()); + } + + list2.add(ImmutableMap.builder().put("name", ACTION_LEFT_HAND).put("requirement", "suggested").put("type", "pose").build()); + list2.add(ImmutableMap.builder().put("name", ACTION_RIGHT_HAND).put("requirement", "suggested").put("type", "pose").build()); + list2.add(ImmutableMap.builder().put("name", ACTION_EXTERNAL_CAMERA).put("requirement", "optional").put("type", "pose").build()); + list2.add(ImmutableMap.builder().put("name", ACTION_LEFT_HAPTIC).put("requirement", "suggested").put("type", "vibration").build()); + list2.add(ImmutableMap.builder().put("name", ACTION_RIGHT_HAPTIC).put("requirement", "suggested").put("type", "vibration").build()); + map.put("actions", list2); + Map map1 = new HashMap<>(); + + for (VRInputAction vrinputaction1 : list1) { + MutableComponent component = new TranslatableComponent(vrinputaction1.keyBinding.getCategory()).append(" - ").append(new TranslatableComponent(vrinputaction1.keyBinding.getName())); + map1.put(vrinputaction1.name, component.getString()); + } + + for (VRInputActionSet vrinputactionset1 : VRInputActionSet.values()) { + MutableComponent component = new TranslatableComponent(vrinputactionset1.localizedName); + map1.put(vrinputactionset1.name, component.getString()); + } + + map1.put(ACTION_LEFT_HAND, "Left Hand Pose"); + map1.put(ACTION_RIGHT_HAND, "Right Hand Pose"); + map1.put(ACTION_EXTERNAL_CAMERA, "External Camera"); + map1.put(ACTION_LEFT_HAPTIC, "Left Hand Haptic"); + map1.put(ACTION_RIGHT_HAPTIC, "Right Hand Haptic"); + map1.put("language_tag", "en_US"); + map.put("localization", ImmutableList.>builder().add(map1).build()); + List> list3 = new ArrayList<>(); + list3.add(ImmutableMap.builder().put("controller_type", "vive_controller").put("binding_url", "vive_defaults.json").build()); + list3.add(ImmutableMap.builder().put("controller_type", "oculus_touch").put("binding_url", "oculus_defaults.json").build()); + list3.add(ImmutableMap.builder().put("controller_type", "holographic_controller").put("binding_url", "wmr_defaults.json").build()); + list3.add(ImmutableMap.builder().put("controller_type", "knuckles").put("binding_url", "knuckles_defaults.json").build()); + list3.add(ImmutableMap.builder().put("controller_type", "vive_cosmos_controller").put("binding_url", "cosmos_defaults.json").build()); + list3.add(ImmutableMap.builder().put("controller_type", "vive_tracker_camera").put("binding_url", "tracker_defaults.json").build()); + map.put("default_bindings", list3); + + try { + (new File("openvr/input")).mkdirs(); + + try (OutputStreamWriter outputstreamwriter = new OutputStreamWriter(new FileOutputStream("openvr/input/action_manifest.json"), StandardCharsets.UTF_8)) { + this.GSON.toJson(map, outputstreamwriter); + } + } catch (Exception exception) { + throw new RuntimeException("Failed to write action manifest", exception); + } + + String s1 = this.dh.vrSettings.reverseHands ? "_reversed" : ""; + Utils.loadAssetToFile("input/vive_defaults" + s1 + ".json", new File("openvr/input/vive_defaults.json"), false); + Utils.loadAssetToFile("input/oculus_defaults" + s1 + ".json", new File("openvr/input/oculus_defaults.json"), false); + Utils.loadAssetToFile("input/wmr_defaults" + s1 + ".json", new File("openvr/input/wmr_defaults.json"), false); + Utils.loadAssetToFile("input/knuckles_defaults" + s1 + ".json", new File("openvr/input/knuckles_defaults.json"), false); + Utils.loadAssetToFile("input/cosmos_defaults" + s1 + ".json", new File("openvr/input/cosmos_defaults.json"), false); + Utils.loadAssetToFile("input/tracker_defaults.json", new File("openvr/input/tracker_defaults.json"), false); + } + + private long getActionHandle(String name) { + try (MemoryStack stack = MemoryStack.stackPush()) { + LongBuffer longbyreference = stack.callocLong(1); + int i = VRInput.VRInput_GetActionHandle(name, longbyreference); + + if (i != 0) { + throw new RuntimeException("Error getting action handle for '" + name + "': " + getInputErrorName(i)); + } else { + return longbyreference.get(0); + } + } + } + + private boolean updateActiveActionSets() { + ArrayList arraylist = new ArrayList<>(); + arraylist.add(VRInputActionSet.GLOBAL); + + // we are always modded + arraylist.add(VRInputActionSet.MOD); + + arraylist.add(VRInputActionSet.MIXED_REALITY); + arraylist.add(VRInputActionSet.TECHNICAL); + + if (this.mc.screen == null) { + arraylist.add(VRInputActionSet.INGAME); + arraylist.add(VRInputActionSet.CONTEXTUAL); + } else { + arraylist.add(VRInputActionSet.GUI); + if (ClientDataHolderVR.getInstance().vrSettings.ingameBindingsInGui) { + arraylist.add(VRInputActionSet.INGAME); + } + } + + if (KeyboardHandler.Showing || RadialHandler.isShowing()) { + arraylist.add(VRInputActionSet.KEYBOARD); + } + + if (activeActionSetsBuffer == null) { + activeActionSetsBuffer = VRActiveActionSet.calloc(arraylist.size()); + } else if (activeActionSetsBuffer.capacity() != arraylist.size()) { + activeActionSetsBuffer.close(); + activeActionSetsBuffer = VRActiveActionSet.calloc(arraylist.size()); + } + + for (int i = 0; i < arraylist.size(); ++i) { + VRInputActionSet vrinputactionset = arraylist.get(i); + activeActionSetsBuffer.get(i).set(this.getActionSetHandle(vrinputactionset), 0L, 0, 0); + } + + return !arraylist.isEmpty(); + } + + public Matrix4f getControllerComponentTransform(int controllerIndex, String componenetName) { + return this.controllerComponentTransforms != null && this.controllerComponentTransforms.containsKey(componenetName) && ((Matrix4f[]) this.controllerComponentTransforms.get(componenetName))[controllerIndex] != null ? (this.controllerComponentTransforms.get(componenetName))[controllerIndex] : Utils.Matrix4fSetIdentity(new Matrix4f()); + } + + private Matrix4f getControllerComponentTransformFromButton(int controllerIndex, long button) { + return this.controllerComponentNames != null && this.controllerComponentNames.containsKey(button) ? this.getControllerComponentTransform(controllerIndex, this.controllerComponentNames.get(button)) : new Matrix4f(); + } + + private int getError() { + return this.hmdErrorStore.get(0) != EVRInitError_VRInitError_None ? this.hmdErrorStore.get(0) : this.hmdErrorStoreBuf.get(0); + } + + long getHapticHandle(ControllerType hand) { + return hand == ControllerType.RIGHT ? this.rightHapticHandle : this.leftHapticHandle; + } + + public String memUTF8NullTerminated(ByteBuffer buf) { + return MemoryUtil.memUTF8(MemoryUtil.memAddress(buf)); + } + + public String getOriginName(long handle) { + try (MemoryStack stack = MemoryStack.stackPush()) { + ByteBuffer str = stack.calloc(32768); + // omit controller type + int i = VRInput_GetOriginLocalizedName(handle, str, 5); + + if (i != 0) { + throw new RuntimeException("Error getting origin name: " + getInputErrorName(i)); + } else { + return memUTF8NullTerminated(str); + } + } + } + + float getSuperSampling() { + return OpenVR.VRSettings == null ? -1.0F : VRSettings_GetFloat("steamvr", "supersampleScale", this.hmdErrorStore); + } + + + private void getTransforms() { + if (OpenVR.VRRenderModels != null) { + if (this.getXforms) { + this.controllerComponentTransforms = new HashMap<>(); + } + + if (this.controllerComponentNames == null) { + this.controllerComponentNames = new HashMap<>(); + } + + int i = VRRenderModels_GetRenderModelCount(); + List list = new ArrayList<>(); + list.add("tip"); + list.add("handgrip"); + boolean flag = false; + + for (String s : list) { + this.controllerComponentTransforms.put(s, new Matrix4f[2]); + + for (int j = 0; j < 2; ++j) { + if (this.controllerDeviceIndex[j] == -1) { + flag = true; + } else { + try (MemoryStack stack = MemoryStack.stackPush()) { + var stringBuffer = stack.calloc(32768); + VRSystem_GetStringTrackedDeviceProperty(this.controllerDeviceIndex[j], VR.ETrackedDeviceProperty_Prop_RenderModelName_String, stringBuffer, this.hmdErrorStore); + String renderModelName = memUTF8NullTerminated(stringBuffer); + VRSystem_GetStringTrackedDeviceProperty(controllerDeviceIndex[j], VR.ETrackedDeviceProperty_Prop_InputProfilePath_String, stringBuffer, this.hmdErrorStore); + String inputProfilePath = memUTF8NullTerminated(stringBuffer); + boolean flag1 = inputProfilePath.contains("holographic"); + boolean flag2 = inputProfilePath.contains("rifts"); + + var componentName = s; + if (flag1 && s.equals("handgrip")) { + componentName = "body"; + } + + long k = VRRenderModels_GetComponentButtonMask(renderModelName, componentName); + + if (k > 0L) { + this.controllerComponentNames.put(k, s); + } + + long l = j == 0 ? this.rightControllerHandle : this.leftControllerHandle; + + if (l == 0L) { + flag = true; + } else { + var renderModelComponentState = RenderModelComponentState.callocStack(stack); + boolean b0 = VRRenderModels_GetComponentStateForDevicePath(renderModelName, componentName, l, RenderModelControllerModeState.callocStack(stack), renderModelComponentState); + + if (!b0) { + flag = true; + } else { + Matrix4f matrix4f = new Matrix4f(); + OpenVRUtil.convertSteamVRMatrix3ToMatrix4f(renderModelComponentState.mTrackingToComponentLocal(), matrix4f); + (this.controllerComponentTransforms.get(s))[j] = matrix4f; + + if (j == 1 && flag2 && s.equals("handgrip")) { + (this.controllerComponentTransforms.get(s))[1] = (this.controllerComponentTransforms.get(s))[0]; + } + + if (!flag && j == 0) { + try { + Matrix4f matrix4f1 = this.getControllerComponentTransform(0, "tip"); + Matrix4f matrix4f2 = this.getControllerComponentTransform(0, "handgrip"); + Vector3 vector3 = matrix4f1.transform(this.forward); + Vector3 vector31 = matrix4f2.transform(this.forward); + double d0 = (double) Math.abs(vector3.normalized().dot(vector31.normalized())); + double d1 = Math.acos(d0); + double d2 = Math.toDegrees(d1); + double d3 = Math.acos((double) vector3.normalized().dot(this.forward.normalized())); + double d4 = Math.toDegrees(d3); + this.gunStyle = d2 > 10.0D; + this.gunAngle = d2; + } catch (Exception exception) { + flag = true; + } + } + } + } + } + } + } + + this.getXforms = flag; + } + } + } + + private void initializeOpenVR() { + this.hmdErrorStoreBuf = MemoryUtil.memCallocInt(1); + int token = VR.VR_InitInternal(this.hmdErrorStoreBuf, 1); + + if (!this.isError()) { + OpenVR.create(token); + } + + if (OpenVR.VRSystem != null && !this.isError()) { + System.out.println("OpenVR System Initialized OK."); + this.hmdTrackedDevicePoses = TrackedDevicePose.calloc(64); + this.poseMatrices = new Matrix4f[64]; + + for (int i = 0; i < this.poseMatrices.length; ++i) { + this.poseMatrices[i] = new Matrix4f(); + } + + this.initSuccess = true; + } else { + throw new RuntimeException(VR.VR_GetVRInitErrorAsEnglishDescription(this.getError())); + } + } + + public boolean postinit() throws RenderConfigException { + this.initInputAndApplication(); + return this.inputInitialized; + } + + private void initInputAndApplication() throws RenderConfigException { + this.populateInputActions(); + + if (OpenVR.VRInput != null) { + this.generateActionManifest(); + this.loadActionManifest(); + this.loadActionHandles(); + this.installApplicationManifest(false); + this.inputInitialized = true; + } + } + +// private void initOpenComposite() { +// this.vrOpenComposite = new VR_IVROCSystem_FnTable(VR.VR_GetGenericInterface("FnTable:IVROCSystem_001", this.hmdErrorStoreBuf)); +// +// if (!this.isError()) { +// this.vrOpenComposite.setAutoSynch(false); +// this.vrOpenComposite.read(); +// System.out.println("OpenComposite initialized."); +// } else { +// System.out.println("OpenComposite not found: " + VR.VR_GetVRInitErrorAsEnglishDescription(this.getError()).getString(0L)); +// this.vrOpenComposite = null; +// } +// } + + private void initOpenVRCompositor() { + if (OpenVR.VRSystem != null) { + VRCompositor_SetTrackingSpace(1); + try (MemoryStack stack = MemoryStack.stackPush()) { + var pointer = stack.calloc(20); + System.out.println("TrackingSpace: " + VRCompositor_GetTrackingSpace()); + VRSystem_GetStringTrackedDeviceProperty(0, 1005, pointer, this.hmdErrorStore); + String s = memUTF8NullTerminated(pointer); + System.out.println("Device manufacturer is: " + s); + this.detectedHardware = HardwareType.fromManufacturer(s); + } + this.dh.vrSettings.loadOptions(); + VRHotkeys.loadExternalCameraConfig(); + } + + if (OpenVR.VRCompositor == null) { + System.out.println("Skipping VR Compositor..."); + } + + this.texBounds.uMax(1.0F); + this.texBounds.uMin(0.0F); + this.texBounds.vMax(1.0F); + this.texBounds.vMin(0.0F); + this.texType0.eColorSpace(VR.EColorSpace_ColorSpace_Gamma); + this.texType0.eType(VR.ETextureType_TextureType_OpenGL); + this.texType0.handle(-1); + this.texType1.eColorSpace(VR.EColorSpace_ColorSpace_Gamma); + this.texType1.eType(VR.ETextureType_TextureType_OpenGL); + this.texType1.handle(-1); + System.out.println("OpenVR Compositor initialized OK."); + } + + private void installApplicationManifest(boolean force) throws RenderConfigException { + File file1 = new File("openvr/vivecraft.vrmanifest"); + Utils.loadAssetToFile("vivecraft.vrmanifest", file1, true); + File file2 = new File("openvr/custom.vrmanifest"); + + if (file2.exists()) { + file1 = file2; + } + + if (OpenVR.VRApplications != null) { + String s; + + try { + Map map = (new Gson()).fromJson(new FileReader(file1), Map.class); + s = ((Map) ((List) map.get("applications")).get(0)).get("app_key").toString(); + } catch (Exception exception1) { + System.out.println("Error reading appkey from manifest"); + exception1.printStackTrace(); + return; + } + + System.out.println("Appkey: " + s); + + if (!force && VRApplications_IsApplicationInstalled(s)) { + System.out.println("Application manifest already installed"); + } else { + int i = VRApplications_AddApplicationManifest(file1.getAbsolutePath(), true); + + if (i != 0) { + // application needs to be installed, so abort + String pathFormatted = ""; + boolean hasInvalidChars = false; + for (char c : file1.getAbsolutePath().toCharArray()){ + if (c > 127) { + hasInvalidChars = true; + pathFormatted += "§c"+c+"§r"; + } else { + pathFormatted += c; + } + } + + String error = VRApplications_GetApplicationsErrorNameFromEnum(i) + (hasInvalidChars ? "\nInvalid characters in path: \n" : "\n"); + System.out.println("Failed to install application manifest: " + error + file1.getAbsolutePath()); + + throw new RenderConfigException("Failed to install application manifest", new TextComponent(error).append(pathFormatted)); + } + + System.out.println("Application manifest installed successfully"); + } + + int j; + + try { + String s1 = ManagementFactory.getRuntimeMXBean().getName(); + j = Integer.parseInt(s1.split("@")[0]); + } catch (Exception exception) { + System.out.println("Error getting process id"); + exception.printStackTrace(); + return; + } + + int k = VRApplications_IdentifyApplication(j, s); + + if (k != 0) { + System.out.println("Failed to identify application: " + VRApplications_GetApplicationsErrorNameFromEnum(k)); + } else { + System.out.println("Application identified successfully"); + } + } + } + + private void loadActionHandles() { + try (MemoryStack stack = MemoryStack.stackPush()) { + LongBuffer longbyreference = stack.callocLong(1); + + for (VRInputAction vrinputaction : this.inputActions.values()) { + int i = VRInput_GetActionHandle(vrinputaction.name, longbyreference); + + if (i != 0) { + throw new RuntimeException("Error getting action handle for '" + vrinputaction.name + "': " + getInputErrorName(i)); + } + + vrinputaction.setHandle(longbyreference.get(0)); + } + + this.leftPoseHandle = this.getActionHandle(ACTION_LEFT_HAND); + this.rightPoseHandle = this.getActionHandle(ACTION_RIGHT_HAND); + this.leftHapticHandle = this.getActionHandle(ACTION_LEFT_HAPTIC); + this.rightHapticHandle = this.getActionHandle(ACTION_RIGHT_HAPTIC); + this.externalCameraPoseHandle = this.getActionHandle(ACTION_EXTERNAL_CAMERA); + + for (VRInputActionSet vrinputactionset : VRInputActionSet.values()) { + int j = VRInput_GetActionSetHandle(vrinputactionset.name, longbyreference); + + if (j != 0) { + throw new RuntimeException("Error getting action set handle for '" + vrinputactionset.name + "': " + getInputErrorName(j)); + } + + this.actionSetHandles.put(vrinputactionset, longbyreference.get(0)); + } + + this.leftControllerHandle = this.getInputSourceHandle("/user/hand/left"); + this.rightControllerHandle = this.getInputSourceHandle("/user/hand/right"); + } + } + + private void loadActionManifest() { + int i = VRInput_SetActionManifestPath((new File("openvr/input/action_manifest.json")).getAbsolutePath()); + + if (i != 0) { + throw new RuntimeException("Failed to load action manifest: " + getInputErrorName(i)); + } + } + + private void pollVREvents() { + if (OpenVR.VRSystem != null) { + for (VREvent vrevent = VREvent.calloc(); VRSystem_PollNextEvent(vrevent, VREvent.SIZEOF); vrevent = VREvent.calloc()) { + this.vrEvents.add(vrevent); + } + } + } + + private void processInputAction(VRInputAction action) { + if (action.isActive() && action.isEnabledRaw() + // try to prevent double left clicks + && (!ClientDataHolderVR.getInstance().vrSettings.ingameBindingsInGui + || !(action.actionSet == VRInputActionSet.INGAME && action.keyBinding.key.getType() == InputConstants.Type.MOUSE && action.keyBinding.key.getValue() == 0 && mc.screen != null))) { + if (action.isButtonChanged()) { + if (action.isButtonPressed() && action.isEnabled()) { + if (!this.ignorePressesNextFrame) { + action.pressBinding(); + } + } else { + action.unpressBinding(); + } + } + } else { + action.unpressBinding(); + } + } + + private void processScrollInput(KeyMapping keyBinding, Runnable upCallback, Runnable downCallback) { + VRInputAction vrinputaction = this.getInputAction(keyBinding); + + if (vrinputaction.isEnabled() && vrinputaction.getLastOrigin() != 0L && vrinputaction.getAxis2D(true).getY() != 0.0F) { + float f = vrinputaction.getAxis2D(false).getY(); + + if (f > 0.0F) { + upCallback.run(); + } else if (f < 0.0F) { + downCallback.run(); + } + } + } + + private void processSwipeInput(KeyMapping keyBinding, Runnable leftCallback, Runnable rightCallback, Runnable upCallback, Runnable downCallback) { + VRInputAction vrinputaction = this.getInputAction(keyBinding); + + if (vrinputaction.isEnabled() && vrinputaction.getLastOrigin() != 0L) { + ControllerType controllertype = this.findActiveBindingControllerType(keyBinding); + + if (controllertype != null) { + if (!this.trackpadSwipeSamplers.containsKey(keyBinding.getName())) { + this.trackpadSwipeSamplers.put(keyBinding.getName(), new TrackpadSwipeSampler()); + } + + TrackpadSwipeSampler trackpadswipesampler = this.trackpadSwipeSamplers.get(keyBinding.getName()); + trackpadswipesampler.update(controllertype, vrinputaction.getAxis2D(false)); + + if (trackpadswipesampler.isSwipedUp() && upCallback != null) { + this.triggerHapticPulse(controllertype, 0.001F, 400.0F, 0.5F); + upCallback.run(); + } + + if (trackpadswipesampler.isSwipedDown() && downCallback != null) { + this.triggerHapticPulse(controllertype, 0.001F, 400.0F, 0.5F); + downCallback.run(); + } + + if (trackpadswipesampler.isSwipedLeft() && leftCallback != null) { + this.triggerHapticPulse(controllertype, 0.001F, 400.0F, 0.5F); + leftCallback.run(); + } + + if (trackpadswipesampler.isSwipedRight() && rightCallback != null) { + this.triggerHapticPulse(controllertype, 0.001F, 400.0F, 0.5F); + rightCallback.run(); + } + } + } + } + + private void processVREvents() { + while (!this.vrEvents.isEmpty()) { + VREvent vrevent = this.vrEvents.poll(); + + switch (vrevent.eventType()) { + case 100: + case 101: + case 102: + case 108: + case 853: + this.getXforms = true; + break; + + case 700: + this.mc.stop(); + } + } + } + + private void readOriginInfo(long inputValueHandle) { + int i = VRInput_GetOriginTrackedDeviceInfo(inputValueHandle, this.originInfo, InputOriginInfo.SIZEOF); + + if (i != 0) { + throw new RuntimeException("Error reading origin info: " + getInputErrorName(i)); + } + } + + private void readPoseData(long actionHandle) { + int i = VRInput_GetPoseActionData(actionHandle, 1, 0F, this.poseData, InputPoseActionData.SIZEOF, 0L); + + if (i != 0) { + throw new RuntimeException("Error reading pose data: " + getInputErrorName(i)); + } + } + + private void updateControllerPose(int controller, long actionHandle) { + if (this.TPose) { + if (controller == 0) { + Utils.Matrix4fCopy(this.TPose_Right, this.controllerPose[controller]); + } else if (controller == 1) { + Utils.Matrix4fCopy(this.TPose_Left, this.controllerPose[controller]); + } + + this.controllerTracking[controller] = true; + } else { + this.readPoseData(actionHandle); + + if (this.poseData.activeOrigin() != 0L) { + this.readOriginInfo(this.poseData.activeOrigin()); + int i = this.originInfo.trackedDeviceIndex(); + + if (i != this.controllerDeviceIndex[controller]) { + this.getXforms = true; + } + + this.controllerDeviceIndex[controller] = i; + + if (i != -1) { + TrackedDevicePose trackeddevicepose = this.poseData.pose(); + + if (trackeddevicepose.bPoseIsValid()) { + OpenVRUtil.convertSteamVRMatrix3ToMatrix4f(trackeddevicepose.mDeviceToAbsoluteTracking(), this.poseMatrices[i]); + this.deviceVelocity[i] = new Vec3((double) trackeddevicepose.vVelocity().v(0), (double) trackeddevicepose.vVelocity().v(1), (double) trackeddevicepose.vVelocity().v(2)); + Utils.Matrix4fCopy(this.poseMatrices[i], this.controllerPose[controller]); + this.controllerTracking[controller] = true; + return; + } + } + } else { + this.controllerDeviceIndex[controller] = -1; + } + + this.controllerTracking[controller] = false; + } + } + + private void updatePose() { + if (OpenVR.VRSystem != null && OpenVR.VRSystem != null) { + int i = VRCompositor_WaitGetPoses(this.hmdTrackedDevicePoses, null); + + if (i > 0) { + System.out.println("Compositor Error: GetPoseError " + OpenVRStereoRenderer.getCompostiorError(i)); + } + + if (i == 101) { + this.triggerHapticPulse(0, 500); + this.triggerHapticPulse(1, 500); + } + + if (this.getXforms) { + this.getTransforms(); + } else if (this.dbg) { + this.dbg = false; + this.debugOut(0); + this.debugOut(this.controllerDeviceIndex[0]); + this.debugOut(this.controllerDeviceIndex[1]); + } + + try (MemoryStack stack = MemoryStack.stackPush()) { + var hmdmatrix34 = HmdMatrix34.callocStack(stack); + OpenVRUtil.convertSteamVRMatrix3ToMatrix4f(VRSystem_GetEyeToHeadTransform(0, hmdmatrix34), this.hmdPoseLeftEye); + OpenVRUtil.convertSteamVRMatrix3ToMatrix4f(VRSystem_GetEyeToHeadTransform(1, hmdmatrix34), this.hmdPoseRightEye); + } + + for (int j = 0; j < 64; ++j) { + + if (this.hmdTrackedDevicePoses.get(j).bPoseIsValid()) { + OpenVRUtil.convertSteamVRMatrix3ToMatrix4f(this.hmdTrackedDevicePoses.get(j).mDeviceToAbsoluteTracking(), this.poseMatrices[j]); + this.deviceVelocity[j] = new Vec3((double) this.hmdTrackedDevicePoses.get(j).vVelocity().v(0), (double) this.hmdTrackedDevicePoses.get(j).vVelocity().v(1), (double) this.hmdTrackedDevicePoses.get(j).vVelocity().v(2)); + } + } + + if (this.hmdTrackedDevicePoses.get(0).bPoseIsValid()) { + Utils.Matrix4fCopy(this.poseMatrices[0], this.hmdPose); + this.headIsTracking = true; + } else { + this.headIsTracking = false; + Utils.Matrix4fSetIdentity(this.hmdPose); + this.hmdPose.M[1][3] = 1.62F; + } + + this.TPose = false; + + if (this.TPose) { + this.TPose_Right.M[0][3] = 0.0F; + this.TPose_Right.M[1][3] = 0.0F; + this.TPose_Right.M[2][3] = 0.0F; + Matrix4f matrix4f = this.TPose_Right; + Utils.Matrix4fCopy(Matrix4f.rotationY(-120.0F), this.TPose_Right); + this.TPose_Right.M[0][3] = 0.5F; + this.TPose_Right.M[1][3] = 1.0F; + this.TPose_Right.M[2][3] = -0.5F; + this.TPose_Left.M[0][3] = 0.0F; + this.TPose_Left.M[1][3] = 0.0F; + this.TPose_Left.M[2][3] = 0.0F; + matrix4f = this.TPose_Left; + Utils.Matrix4fCopy(Matrix4f.rotationY(120.0F), this.TPose_Left); + this.TPose_Left.M[0][3] = -0.5F; + this.TPose_Left.M[1][3] = 1.0F; + this.TPose_Left.M[2][3] = -0.5F; + this.Neutral_HMD.M[0][3] = 0.0F; + this.Neutral_HMD.M[1][3] = 1.8F; + Utils.Matrix4fCopy(this.Neutral_HMD, this.hmdPose); + this.headIsTracking = true; + } + + if (this.inputInitialized) { + this.mc.getProfiler().push("updateActionState"); + + if (this.updateActiveActionSets()) { + int k = VRInput.VRInput_UpdateActionState(activeActionSetsBuffer, VRActiveActionSet.SIZEOF); + + if (k != 0) { + throw new RuntimeException("Error updating action state: code " + getInputErrorName(k)); + } + } + + this.inputActions.values().forEach(this::readNewData); + this.mc.getProfiler().pop(); + + if (this.dh.vrSettings.reverseHands) { + this.updateControllerPose(0, this.leftPoseHandle); + this.updateControllerPose(1, this.rightPoseHandle); + } else { + this.updateControllerPose(0, this.rightPoseHandle); + this.updateControllerPose(1, this.leftPoseHandle); + } + + this.updateControllerPose(2, this.externalCameraPoseHandle); + } + + this.updateAim(); + } + } + + long getActionSetHandle(VRInputActionSet actionSet) { + return this.actionSetHandles.get(actionSet); + } + + long getControllerHandle(ControllerType hand) { + if (this.dh.vrSettings.reverseHands) { + return hand == ControllerType.RIGHT ? this.leftControllerHandle : this.rightControllerHandle; + } else { + return hand == ControllerType.RIGHT ? this.rightControllerHandle : this.leftControllerHandle; + } + } + + long getInputSourceHandle(String path) { + try (MemoryStack stack = MemoryStack.stackPush()) { + LongBuffer longbyreference = stack.callocLong(1); + int i = VRInput_GetInputSourceHandle(path, longbyreference); + + if (i != 0) { + throw new RuntimeException("Error getting input source handle for '" + path + "': " + getInputErrorName(i)); + } else { + return longbyreference.get(0); + } + } + } + + ControllerType getOriginControllerType(long inputValueHandle) { + if (inputValueHandle == 0L) { + return null; + } else { + this.readOriginInfo(inputValueHandle); + + if (this.originInfo.trackedDeviceIndex() != -1) { + if (this.originInfo.trackedDeviceIndex() == this.controllerDeviceIndex[0]) { + return ControllerType.RIGHT; + } + + if (this.originInfo.trackedDeviceIndex() == this.controllerDeviceIndex[1]) { + return ControllerType.LEFT; + } + } + + return null; + } + } + + public void readNewData(VRInputAction action) { + String s = action.type; + + switch (s) { + case "boolean": + if (action.isHanded()) { + for (ControllerType controllertype1 : ControllerType.values()) { + this.readDigitalData(action, controllertype1); + } + } else { + this.readDigitalData(action, (ControllerType) null); + } + + break; + + case "vector1": + case "vector2": + case "vector3": + if (action.isHanded()) { + for (ControllerType controllertype : ControllerType.values()) { + this.readAnalogData(action, controllertype); + } + } else { + this.readAnalogData(action, (ControllerType) null); + } + } + } + + private void readDigitalData(VRInputAction action, ControllerType hand) { + int i = 0; + + if (hand != null) { + i = hand.ordinal(); + } + + int j = VRInput_GetDigitalActionData(action.handle, this.digital, InputDigitalActionData.SIZEOF, hand != null ? this.getControllerHandle(hand) : 0L); + + if (j != 0) { + throw new RuntimeException("Error reading digital data for '" + action.name + "': " + getInputErrorName(j)); + } else { + action.digitalData[i].activeOrigin = this.digital.activeOrigin(); + action.digitalData[i].isActive = this.digital.bActive(); + action.digitalData[i].state = this.digital.bState(); + action.digitalData[i].isChanged = this.digital.bChanged(); + } + } + + private void readAnalogData(VRInputAction action, ControllerType hand) { + int i = 0; + + if (hand != null) { + i = hand.ordinal(); + } + + int j = VRInput_GetAnalogActionData(action.handle, this.analog, InputAnalogActionData.SIZEOF, hand != null ? this.getControllerHandle(hand) : 0L); + + if (j != 0) { + throw new RuntimeException("Error reading analog data for '" + action.name + "': " + getInputErrorName(j)); + } else { + action.analogData[i].x = this.analog.x(); + action.analogData[i].y = this.analog.y(); + action.analogData[i].z = this.analog.z(); + action.analogData[i].deltaX = this.analog.deltaX(); + action.analogData[i].deltaY = this.analog.deltaY(); + action.analogData[i].deltaZ = this.analog.deltaZ(); + action.analogData[i].activeOrigin = this.analog.activeOrigin(); + action.analogData[i].isActive = this.analog.bActive(); + } + } + + public boolean hasThirdController() { + return this.controllerDeviceIndex[2] != -1; + } + + public List getOrigins(VRInputAction action) { + try (MemoryStack stack = MemoryStack.stackPush()) { + var longbyreference = stack.callocLong(16); + int i = VRInput_GetActionOrigins(this.getActionSetHandle(action.actionSet), action.handle, longbyreference); + + if (i != 0) { + throw new RuntimeException("Error getting action origins for '" + action.name + "': " + getInputErrorName(i)); + } else { + List list = new ArrayList<>(); + + while (longbyreference.remaining() > 0) { + long j = longbyreference.get(); + if (j != 0L) { + list.add(j); + } + } + + return list; + } + } + } + + @Override + public VRRenderer createVRRenderer() { + return new OpenVRStereoRenderer(this); + } + + @Override + public boolean isActive() { + int activityLevel = VRSystem_GetTrackedDeviceActivityLevel(0); + return activityLevel == EDeviceActivityLevel_k_EDeviceActivityLevel_UserInteraction || activityLevel == EDeviceActivityLevel_k_EDeviceActivityLevel_UserInteraction_Timeout; + } +} diff --git a/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/OpenVRHapticScheduler.java b/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/OpenVRHapticScheduler.java new file mode 100644 index 000000000..a13dbcaae --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/OpenVRHapticScheduler.java @@ -0,0 +1,24 @@ +package org.vivecraft.client_vr.provider.openvr_lwjgl; + +import java.util.concurrent.TimeUnit; + +import org.lwjgl.openvr.VRInput; +import org.vivecraft.client_vr.provider.ControllerType; +import org.vivecraft.client_vr.provider.HapticScheduler; + +public class OpenVRHapticScheduler extends HapticScheduler { + private void triggerHapticPulse(ControllerType controller, float durationSeconds, float frequency, float amplitude) { + int i = VRInput.VRInput_TriggerHapticVibrationAction(MCOpenVR.get().getHapticHandle(controller), 0.0F, durationSeconds, frequency, amplitude, 0L); + + if (i != 0) { + System.out.println("Error triggering haptic: " + MCOpenVR.getInputErrorName(i)); + } + } + + public void queueHapticPulse(ControllerType controller, float durationSeconds, float frequency, float amplitude, float delaySeconds) { + this.executor.schedule(() -> + { + this.triggerHapticPulse(controller, durationSeconds, frequency, amplitude); + }, (long) (delaySeconds * 1000000.0F), TimeUnit.MICROSECONDS); + } +} diff --git a/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/OpenVRStereoRenderer.java b/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/OpenVRStereoRenderer.java new file mode 100644 index 000000000..1e7df2a38 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/OpenVRStereoRenderer.java @@ -0,0 +1,201 @@ +package org.vivecraft.client_vr.provider.openvr_lwjgl; + +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.platform.TextureUtil; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.math.Matrix4f; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.util.Tuple; +import org.lwjgl.opengl.GL11; +import org.lwjgl.openvr.*; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; +import org.vivecraft.client.utils.Utils; +import org.vivecraft.client_vr.provider.MCVR; +import org.vivecraft.client_vr.provider.VRRenderer; +import org.vivecraft.client_vr.render.RenderConfigException; +import org.vivecraft.client_vr.render.RenderPass; + +import static org.lwjgl.openvr.VRCompositor.*; +import static org.lwjgl.openvr.VRSystem.*; + +public class OpenVRStereoRenderer extends VRRenderer { + private HiddenAreaMesh[] hiddenMeshes = new HiddenAreaMesh[2]; + private final MCOpenVR openvr; + + public OpenVRStereoRenderer(MCVR vr) { + super(vr); + this.openvr = (MCOpenVR) vr; + hiddenMeshes[0] = HiddenAreaMesh.calloc(); + hiddenMeshes[1] = HiddenAreaMesh.calloc(); + } + + public Tuple getRenderTextureSizes() { + if (this.resolution != null) { + return this.resolution; + } else { + try (MemoryStack stack = MemoryStack.stackPush()) { + var intbyreference = stack.callocInt(1); + var intbyreference1 = stack.callocInt(1); + VRSystem_GetRecommendedRenderTargetSize(intbyreference, intbyreference1); + this.resolution = new Tuple<>(intbyreference.get(0), intbyreference1.get(0)); + System.out.println("OpenVR Render Res " + this.resolution.getA() + " x " + this.resolution.getB()); + this.ss = this.openvr.getSuperSampling(); + System.out.println("OpenVR Supersampling: " + this.ss); + } + + for (int i = 0; i < 2; ++i) { + this.hiddenMeshes[i] = VRSystem_GetHiddenAreaMesh(i, 0, this.hiddenMeshes[i]); + int j = this.hiddenMeshes[i].unTriangleCount(); + + if (j <= 0) { + System.out.println("No stencil mesh found for eye " + i); + } else { + this.hiddenMesheVertecies[i] = new float[this.hiddenMeshes[i].unTriangleCount() * 3 * 2]; + MemoryUtil.memFloatBuffer(MemoryUtil.memAddress(this.hiddenMeshes[i].pVertexData()), this.hiddenMesheVertecies[i].length).get(this.hiddenMesheVertecies[i]); + + for (int k = 0; k < this.hiddenMesheVertecies[i].length; k += 2) { + this.hiddenMesheVertecies[i][k] *= (float) this.resolution.getA(); + this.hiddenMesheVertecies[i][k + 1] *= (float) this.resolution.getB(); + } + + System.out.println("Stencil mesh loaded for eye " + i); + } + } + + return this.resolution; + } + } + + public Matrix4f getProjectionMatrix(int eyeType, float nearClip, float farClip) { + try (MemoryStack stack = MemoryStack.stackPush()) { + if (eyeType == 0) { + return Utils.Matrix4fFromOpenVR(VRSystem_GetProjectionMatrix(0, nearClip, farClip, HmdMatrix44.callocStack(stack))); + } else { + return Utils.Matrix4fFromOpenVR(VRSystem_GetProjectionMatrix(1, nearClip, farClip, HmdMatrix44.callocStack(stack))); + } + } + } + + public String getLastError() { + return ""; + } + + public void createRenderTexture(int lwidth, int lheight) { + this.LeftEyeTextureId = GlStateManager._genTexture(); + int i = GlStateManager._getInteger(GL11.GL_TEXTURE_BINDING_2D); + RenderSystem.bindTexture(this.LeftEyeTextureId); + RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); + RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + GlStateManager._texImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA8, lwidth, lheight, 0, GL11.GL_RGBA, GL11.GL_INT, null); + RenderSystem.bindTexture(i); + this.openvr.texType0.handle(this.LeftEyeTextureId); + this.openvr.texType0.eColorSpace(VR.EColorSpace_ColorSpace_Gamma); + this.openvr.texType0.eType(VR.ETextureType_TextureType_OpenGL); + + this.RightEyeTextureId = GlStateManager._genTexture(); + i = GlStateManager._getInteger(GL11.GL_TEXTURE_BINDING_2D); + RenderSystem.bindTexture(this.RightEyeTextureId); + RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); + RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + GlStateManager._texImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA8, lwidth, lheight, 0, GL11.GL_RGBA, GL11.GL_INT, null); + RenderSystem.bindTexture(i); + this.openvr.texType1.handle(this.RightEyeTextureId); + this.openvr.texType1.eColorSpace(VR.EColorSpace_ColorSpace_Gamma); + this.openvr.texType1.eType(VR.ETextureType_TextureType_OpenGL); + } + + public boolean endFrame(RenderPass eye) { + return true; + } + + public void endFrame() throws RenderConfigException { + if (OpenVR.VRCompositor.Submit != 0) { + int i = VRCompositor_Submit(0, this.openvr.texType0, null, 0); + int j = VRCompositor_Submit(1, this.openvr.texType1, null, 0); + VRCompositor_PostPresentHandoff(); + + if (i + j > 0) { + throw new RenderConfigException("Compositor Error", new TextComponent("Texture submission error: Left/Right " + getCompostiorError(i) + "/" + getCompostiorError(j))); + } + } + } + + public static String getCompostiorError(int code) { + switch (code) { + case 0: + return "None:"; + + case 1: + return "RequestFailed"; + + case 100: + return "IncompatibleVersion"; + + case 101: + return "DoesNotHaveFocus"; + + case 102: + return "InvalidTexture"; + + case 103: + return "IsNotSceneApplication"; + + case 104: + return "TextureIsOnWrongDevice"; + + case 105: + return "TextureUsesUnsupportedFormat:"; + + case 106: + return "SharedTexturesNotSupported"; + + case 107: + return "IndexOutOfRange"; + + case 108: + return "AlreadySubmitted:"; + + default: + return "Unknown"; + } + } + + public boolean providesStencilMask() { + return true; + } + + public float[] getStencilMask(RenderPass eye) { + if (this.hiddenMesheVertecies != null && (eye == RenderPass.LEFT || eye == RenderPass.RIGHT)) { + return eye == RenderPass.LEFT ? this.hiddenMesheVertecies[0] : this.hiddenMesheVertecies[1]; + } else { + return null; + } + } + + public String getName() { + return "OpenVR"; + } + + public boolean isInitialized() { + return this.vr.initSuccess; + } + + public String getinitError() { + return this.vr.initStatus; + } + + @Override + public void destroy() { + super.destroy(); + if (this.LeftEyeTextureId > -1) { + TextureUtil.releaseTextureId(this.LeftEyeTextureId); + this.LeftEyeTextureId = -1; + } + + if (this.RightEyeTextureId > -1) { + TextureUtil.releaseTextureId(this.RightEyeTextureId); + this.RightEyeTextureId = -1; + } + } +} diff --git a/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/OpenVRUtil.java b/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/OpenVRUtil.java new file mode 100644 index 000000000..0af186693 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/OpenVRUtil.java @@ -0,0 +1,44 @@ +package org.vivecraft.client_vr.provider.openvr_lwjgl; + +import org.lwjgl.openvr.HmdMatrix34; +import org.vivecraft.client.utils.Utils; +import org.vivecraft.common.utils.math.Matrix4f; +import org.vivecraft.common.utils.math.Quaternion; + +public class OpenVRUtil +{ + public static Matrix4f convertSteamVRMatrix3ToMatrix4f(HmdMatrix34 hmdMatrix, Matrix4f mat) + { + Utils.Matrix4fSet(mat, hmdMatrix.m(0), hmdMatrix.m(1), hmdMatrix.m(2), hmdMatrix.m(3), hmdMatrix.m(4), hmdMatrix.m(5), hmdMatrix.m(6), hmdMatrix.m(7), hmdMatrix.m(8), hmdMatrix.m(9), hmdMatrix.m(10), hmdMatrix.m(11), 0.0F, 0.0F, 0.0F, 1.0F); + return mat; + } + +// public static Matrix4f convertSteamVRMatrix4ToMatrix4f(HmdMatrix44_t hmdMatrix, Matrix4f mat) +// { +// Utils.Matrix4fSet(mat, hmdMatrix.m[0], hmdMatrix.m[1], hmdMatrix.m[2], hmdMatrix.m[3], hmdMatrix.m[4], hmdMatrix.m[5], hmdMatrix.m[6], hmdMatrix.m[7], hmdMatrix.m[8], hmdMatrix.m[9], hmdMatrix.m[10], hmdMatrix.m[11], hmdMatrix.m[12], hmdMatrix.m[13], hmdMatrix.m[14], hmdMatrix.m[15]); +// return mat; +// } + + public static Quaternion convertMatrix4ftoRotationQuat(Matrix4f mat) + { + return Utils.convertMatrix4ftoRotationQuat(mat.M[0][0], mat.M[0][1], mat.M[0][2], mat.M[1][0], mat.M[1][1], mat.M[1][2], mat.M[2][0], mat.M[2][1], mat.M[2][2]); + } + +// public static HmdMatrix34_t convertToMatrix34(org.joml.Matrix4f matrix) +// { +// HmdMatrix34_t hmdmatrix34_t = new HmdMatrix34_t(); +// hmdmatrix34_t.m[0] = matrix.m00(); +// hmdmatrix34_t.m[1] = matrix.m10(); +// hmdmatrix34_t.m[2] = matrix.m20(); +// hmdmatrix34_t.m[3] = matrix.m30(); +// hmdmatrix34_t.m[4] = matrix.m01(); +// hmdmatrix34_t.m[5] = matrix.m11(); +// hmdmatrix34_t.m[6] = matrix.m21(); +// hmdmatrix34_t.m[7] = matrix.m31(); +// hmdmatrix34_t.m[8] = matrix.m02(); +// hmdmatrix34_t.m[9] = matrix.m12(); +// hmdmatrix34_t.m[10] = matrix.m22(); +// hmdmatrix34_t.m[11] = matrix.m32(); +// return hmdmatrix34_t; +// } +} diff --git a/common/src/main/java/org/vivecraft/provider/openvr_jna/VRInputAction.java b/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/VRInputAction.java similarity index 93% rename from common/src/main/java/org/vivecraft/provider/openvr_jna/VRInputAction.java rename to common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/VRInputAction.java index 518e1ceba..eea5ae825 100644 --- a/common/src/main/java/org/vivecraft/provider/openvr_jna/VRInputAction.java +++ b/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/VRInputAction.java @@ -1,4 +1,4 @@ -package org.vivecraft.provider.openvr_jna; +package org.vivecraft.client_vr.provider.openvr_lwjgl; import java.util.ArrayList; import java.util.Arrays; @@ -7,13 +7,14 @@ import javax.annotation.Nullable; -import org.vivecraft.provider.ControllerType; -import org.vivecraft.provider.HandedKeyBinding; -import org.vivecraft.provider.InputSimulator; -import org.vivecraft.provider.openvr_jna.control.VRInputActionSet; -import org.vivecraft.provider.MCVR; -import org.vivecraft.utils.math.Vector2; -import org.vivecraft.utils.math.Vector3; +import org.vivecraft.client.VivecraftVRMod; +import org.vivecraft.client_vr.provider.ControllerType; +import org.vivecraft.client_vr.provider.HandedKeyBinding; +import org.vivecraft.client_vr.provider.InputSimulator; +import org.vivecraft.client_vr.provider.MCVR; +import org.vivecraft.client_vr.provider.openvr_lwjgl.control.VRInputActionSet; +import org.vivecraft.common.utils.math.Vector2; +import org.vivecraft.common.utils.math.Vector3; import com.mojang.blaze3d.platform.InputConstants; @@ -538,7 +539,7 @@ public static void setKeyBindState(KeyMapping kb, boolean pressed) { if (kb != null) { - kb.isDown = pressed; + kb.setDown(pressed); kb.clickCount += 1; } } @@ -547,7 +548,7 @@ private void pressKey() { InputConstants.Key inputconstants$key = this.keyBinding.key; - if (inputconstants$key.getValue() != -1 && !MCOpenVR.get().isSafeBinding(this.keyBinding)) //&& (!Reflector.ForgeKeyBinding_getKeyModifier.exists() || Reflector.call(this.keyBinding, Reflector.ForgeKeyBinding_getKeyModifier) == Reflector.getFieldValue(Reflector.KeyModifier_NONE))) + if (inputconstants$key.getValue() != -1 && !VivecraftVRMod.INSTANCE.isSafeBinding(this.keyBinding)) //&& (!Reflector.ForgeKeyBinding_getKeyModifier.exists() || Reflector.call(this.keyBinding, Reflector.ForgeKeyBinding_getKeyModifier) == Reflector.getFieldValue(Reflector.KeyModifier_NONE))) { if (inputconstants$key.getType() == InputConstants.Type.KEYSYM) { @@ -569,7 +570,7 @@ public void unpressKey() { InputConstants.Key inputconstants$key = this.keyBinding.key; - if (inputconstants$key.getValue() != -1 && !MCOpenVR.get().isSafeBinding(this.keyBinding)) // && (!Reflector.ForgeKeyBinding_getKeyModifier.exists() || Reflector.call(this.keyBinding, Reflector.ForgeKeyBinding_getKeyModifier) == Reflector.getFieldValue(Reflector.KeyModifier_NONE))) + if (inputconstants$key.getValue() != -1 && !VivecraftVRMod.INSTANCE.isSafeBinding(this.keyBinding)) // && (!Reflector.ForgeKeyBinding_getKeyModifier.exists() || Reflector.call(this.keyBinding, Reflector.ForgeKeyBinding_getKeyModifier) == Reflector.getFieldValue(Reflector.KeyModifier_NONE))) { if (inputconstants$key.getType() == InputConstants.Type.KEYSYM) { diff --git a/common/src/main/java/org/vivecraft/provider/openvr_jna/control/HapticMusicPlayer.java b/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/control/HapticMusicPlayer.java similarity index 95% rename from common/src/main/java/org/vivecraft/provider/openvr_jna/control/HapticMusicPlayer.java rename to common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/control/HapticMusicPlayer.java index 1f257f871..8728b3c95 100644 --- a/common/src/main/java/org/vivecraft/provider/openvr_jna/control/HapticMusicPlayer.java +++ b/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/control/HapticMusicPlayer.java @@ -1,4 +1,4 @@ -package org.vivecraft.provider.openvr_jna.control; +package org.vivecraft.client_vr.provider.openvr_lwjgl.control; import java.util.HashMap; import java.util.LinkedList; @@ -6,8 +6,8 @@ import java.util.Map; import javax.annotation.Nullable; -import org.vivecraft.provider.openvr_jna.MCOpenVR; -import org.vivecraft.provider.ControllerType; +import org.vivecraft.client_vr.provider.ControllerType; +import org.vivecraft.client_vr.provider.openvr_lwjgl.MCOpenVR; public class HapticMusicPlayer { diff --git a/common/src/main/java/org/vivecraft/provider/openvr_jna/control/TrackpadSwipeSampler.java b/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/control/TrackpadSwipeSampler.java similarity index 83% rename from common/src/main/java/org/vivecraft/provider/openvr_jna/control/TrackpadSwipeSampler.java rename to common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/control/TrackpadSwipeSampler.java index 0f0a31608..a5e382511 100644 --- a/common/src/main/java/org/vivecraft/provider/openvr_jna/control/TrackpadSwipeSampler.java +++ b/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/control/TrackpadSwipeSampler.java @@ -1,9 +1,10 @@ -package org.vivecraft.provider.openvr_jna.control; +package org.vivecraft.client_vr.provider.openvr_lwjgl.control; -import org.vivecraft.provider.openvr_jna.MCOpenVR; -import org.vivecraft.provider.ControllerType; -import org.vivecraft.utils.lwjgl.Vector2f; -import org.vivecraft.utils.math.Vector2; +import org.vivecraft.client.VivecraftVRMod; +import org.vivecraft.client_vr.provider.ControllerType; +import org.vivecraft.client_vr.provider.openvr_lwjgl.MCOpenVR; +import org.vivecraft.common.utils.lwjgl.Vector2f; +import org.vivecraft.common.utils.math.Vector2; public class TrackpadSwipeSampler { @@ -28,9 +29,9 @@ public TrackpadSwipeSampler() public void update(ControllerType hand, Vector2 position) { - MCOpenVR.get().getInputAction(MCOpenVR.get().keyTrackpadTouch).setCurrentHand(hand); + MCOpenVR.get().getInputAction(VivecraftVRMod.INSTANCE.keyTrackpadTouch).setCurrentHand(hand); - if (MCOpenVR.get().getInputAction(MCOpenVR.get().keyTrackpadTouch).isButtonPressed()) + if (MCOpenVR.get().getInputAction(VivecraftVRMod.INSTANCE.keyTrackpadTouch).isButtonPressed()) { this.buffer[this.index].set(position.getX(), position.getY()); diff --git a/common/src/main/java/org/vivecraft/provider/openvr_jna/control/VRInputActionSet.java b/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/control/VRInputActionSet.java similarity index 88% rename from common/src/main/java/org/vivecraft/provider/openvr_jna/control/VRInputActionSet.java rename to common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/control/VRInputActionSet.java index 439bde2bf..7eadb69f1 100644 --- a/common/src/main/java/org/vivecraft/provider/openvr_jna/control/VRInputActionSet.java +++ b/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/control/VRInputActionSet.java @@ -1,7 +1,7 @@ -package org.vivecraft.provider.openvr_jna.control; +package org.vivecraft.client_vr.provider.openvr_lwjgl.control; import net.minecraft.client.KeyMapping; -import org.vivecraft.provider.MCVR; +import org.vivecraft.client.VivecraftVRMod; public enum VRInputActionSet { @@ -43,7 +43,7 @@ public static VRInputActionSet fromKeyBinding(KeyMapping keyBinding) return KEYBOARD; default: - return MCVR.get().isModBinding(keyBinding) ? MOD : INGAME; + return VivecraftVRMod.INSTANCE.isModBinding(keyBinding) ? MOD : INGAME; } } } diff --git a/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/control/VivecraftMovementInput.java b/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/control/VivecraftMovementInput.java new file mode 100644 index 000000000..9c6cc201d --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_vr/provider/openvr_lwjgl/control/VivecraftMovementInput.java @@ -0,0 +1,14 @@ +package org.vivecraft.client_vr.provider.openvr_lwjgl.control; + +import net.minecraft.client.KeyMapping; +import org.vivecraft.client_vr.provider.MCVR; +import org.vivecraft.client_vr.provider.openvr_lwjgl.VRInputAction; + +public class VivecraftMovementInput +{ + public static float getMovementAxisValue(KeyMapping keyBinding) + { + VRInputAction vrinputaction = MCVR.get().getInputAction(keyBinding); + return Math.abs(vrinputaction.getAxis1DUseTracked()); + } +} diff --git a/common/src/main/java/org/vivecraft/provider/ovr_lwjgl/MC_OVR.java b/common/src/main/java/org/vivecraft/client_vr/provider/ovr_lwjgl/MC_OVR.java similarity index 100% rename from common/src/main/java/org/vivecraft/provider/ovr_lwjgl/MC_OVR.java rename to common/src/main/java/org/vivecraft/client_vr/provider/ovr_lwjgl/MC_OVR.java diff --git a/common/src/main/java/org/vivecraft/provider/ovr_lwjgl/OVRUtils.java b/common/src/main/java/org/vivecraft/client_vr/provider/ovr_lwjgl/OVRUtils.java similarity index 100% rename from common/src/main/java/org/vivecraft/provider/ovr_lwjgl/OVRUtils.java rename to common/src/main/java/org/vivecraft/client_vr/provider/ovr_lwjgl/OVRUtils.java diff --git a/common/src/main/java/org/vivecraft/provider/ovr_lwjgl/OVR_HapticScheduler.java b/common/src/main/java/org/vivecraft/client_vr/provider/ovr_lwjgl/OVR_HapticScheduler.java similarity index 100% rename from common/src/main/java/org/vivecraft/provider/ovr_lwjgl/OVR_HapticScheduler.java rename to common/src/main/java/org/vivecraft/client_vr/provider/ovr_lwjgl/OVR_HapticScheduler.java diff --git a/common/src/main/java/org/vivecraft/provider/ovr_lwjgl/OVR_StereoRenderer.java b/common/src/main/java/org/vivecraft/client_vr/provider/ovr_lwjgl/OVR_StereoRenderer.java similarity index 100% rename from common/src/main/java/org/vivecraft/provider/ovr_lwjgl/OVR_StereoRenderer.java rename to common/src/main/java/org/vivecraft/client_vr/provider/ovr_lwjgl/OVR_StereoRenderer.java diff --git a/common/src/main/java/org/vivecraft/client_vr/render/RenderConfigException.java b/common/src/main/java/org/vivecraft/client_vr/render/RenderConfigException.java new file mode 100644 index 000000000..69a41478d --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_vr/render/RenderConfigException.java @@ -0,0 +1,20 @@ +package org.vivecraft.client_vr.render; + +import net.minecraft.network.chat.Component; + +public class RenderConfigException extends Exception +{ + public String title; + public Component error; + + public RenderConfigException(String title, Component error) + { + this.title = title; + this.error = error; + } + + public String toString() + { + return this.error.getString(); + } +} diff --git a/common/src/main/java/org/vivecraft/render/RenderPass.java b/common/src/main/java/org/vivecraft/client_vr/render/RenderPass.java similarity index 74% rename from common/src/main/java/org/vivecraft/render/RenderPass.java rename to common/src/main/java/org/vivecraft/client_vr/render/RenderPass.java index e117ea8e5..97b05eb26 100644 --- a/common/src/main/java/org/vivecraft/render/RenderPass.java +++ b/common/src/main/java/org/vivecraft/client_vr/render/RenderPass.java @@ -1,4 +1,4 @@ -package org.vivecraft.render; +package org.vivecraft.client_vr.render; public enum RenderPass { diff --git a/common/src/main/java/org/vivecraft/render/ShaderHelper.java b/common/src/main/java/org/vivecraft/client_vr/render/ShaderHelper.java similarity index 87% rename from common/src/main/java/org/vivecraft/render/ShaderHelper.java rename to common/src/main/java/org/vivecraft/client_vr/render/ShaderHelper.java index e11a68f6e..113d7934f 100644 --- a/common/src/main/java/org/vivecraft/render/ShaderHelper.java +++ b/common/src/main/java/org/vivecraft/client_vr/render/ShaderHelper.java @@ -1,4 +1,4 @@ -package org.vivecraft.render; +package org.vivecraft.client_vr.render; import com.mojang.blaze3d.platform.GlStateManager; import org.lwjgl.opengl.*; @@ -13,7 +13,7 @@ private static int createShader(String shaderGLSL, int shaderType) throws Except try { - i = GL43C.glCreateShader(shaderType); + i = GlStateManager.glCreateShader(shaderType); if (i == 0) { @@ -94,16 +94,16 @@ public static int initShaders(String vertexShaderGLSL, String fragmentShaderGLSL } else { - GL43C.glAttachShader(k, i); - GL43C.glAttachShader(k, j); + GlStateManager.glAttachShader(k, i); + GlStateManager.glAttachShader(k, j); if (doAttribs) { - GL20.glBindAttribLocation(k, 0, "in_Position"); + GlStateManager._glBindAttribLocation(k, 0, "in_Position"); checkGLError("@2"); - GL20.glBindAttribLocation(k, 1, "in_Color"); + GlStateManager._glBindAttribLocation(k, 1, "in_Color"); checkGLError("@2a"); - GL20.glBindAttribLocation(k, 2, "in_TextureCoord"); + GlStateManager._glBindAttribLocation(k, 2, "in_TextureCoord"); checkGLError("@3"); } diff --git a/common/src/main/java/org/vivecraft/render/VRArmRenderer.java b/common/src/main/java/org/vivecraft/client_vr/render/VRArmRenderer.java similarity index 91% rename from common/src/main/java/org/vivecraft/render/VRArmRenderer.java rename to common/src/main/java/org/vivecraft/client_vr/render/VRArmRenderer.java index 8c2b1b58a..d78f5f85f 100644 --- a/common/src/main/java/org/vivecraft/render/VRArmRenderer.java +++ b/common/src/main/java/org/vivecraft/client_vr/render/VRArmRenderer.java @@ -1,7 +1,7 @@ -package org.vivecraft.render; +package org.vivecraft.client_vr.render; -import org.vivecraft.gameplay.trackers.SwingTracker; -import org.vivecraft.provider.ControllerType; +import org.vivecraft.client_vr.gameplay.trackers.SwingTracker; +import org.vivecraft.client_vr.provider.ControllerType; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; @@ -39,8 +39,8 @@ private void renderItem(ControllerType side, PoseStack matrixStackIn, MultiBuffe { PlayerModel playermodel = this.getModel(); this.setModelProperties(playerIn); - GlStateManager._enableBlend(); - GlStateManager._enableCull(); + RenderSystem.enableBlend(); + RenderSystem.enableCull(); RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); playermodel.attackTime = 0.0F; playermodel.crouching = false; @@ -52,7 +52,7 @@ private void renderItem(ControllerType side, PoseStack matrixStackIn, MultiBuffe rendererArmIn.render(matrixStackIn, bufferIn.getBuffer(RenderType.entityTranslucent(playerIn.getSkinTextureLocation())), combinedLightIn, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, f); rendererArmwearIn.xRot = 0.0F; rendererArmwearIn.render(matrixStackIn, bufferIn.getBuffer(RenderType.entityTranslucent(playerIn.getSkinTextureLocation())), combinedLightIn, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, f); - GlStateManager._disableBlend(); + RenderSystem.disableBlend(); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); } } diff --git a/common/src/main/java/org/vivecraft/render/VRFirstPersonArmSwing.java b/common/src/main/java/org/vivecraft/client_vr/render/VRFirstPersonArmSwing.java similarity index 64% rename from common/src/main/java/org/vivecraft/render/VRFirstPersonArmSwing.java rename to common/src/main/java/org/vivecraft/client_vr/render/VRFirstPersonArmSwing.java index 873a8390d..77a88e4bb 100644 --- a/common/src/main/java/org/vivecraft/render/VRFirstPersonArmSwing.java +++ b/common/src/main/java/org/vivecraft/client_vr/render/VRFirstPersonArmSwing.java @@ -1,4 +1,4 @@ -package org.vivecraft.render; +package org.vivecraft.client_vr.render; public enum VRFirstPersonArmSwing { diff --git a/common/src/main/java/org/vivecraft/render/VRShaders.java b/common/src/main/java/org/vivecraft/client_vr/render/VRShaders.java similarity index 86% rename from common/src/main/java/org/vivecraft/render/VRShaders.java rename to common/src/main/java/org/vivecraft/client_vr/render/VRShaders.java index af267a841..93e4f75b0 100644 --- a/common/src/main/java/org/vivecraft/render/VRShaders.java +++ b/common/src/main/java/org/vivecraft/client_vr/render/VRShaders.java @@ -1,10 +1,9 @@ -package org.vivecraft.render; +package org.vivecraft.client_vr.render; import com.mojang.blaze3d.shaders.AbstractUniform; import com.mojang.blaze3d.vertex.DefaultVertexFormat; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.ShaderInstance; -import org.vivecraft.utils.Utils; public class VRShaders { @@ -39,11 +38,16 @@ public class VRShaders public static AbstractUniform _Overlay_time; public static AbstractUniform _Overlay_BlackAlpha; public static AbstractUniform _Overlay_eye; - public static final String PASSTHRU_VERTEX_SHADER = Utils.loadAssetAsString("shaders/passthru.vsh", true); - public static final String DEPTH_MASK_FRAGMENT_SHADER = Utils.loadAssetAsString("shaders/mixedreality.fsh", true); - public static final String LANCZOS_SAMPLER_VERTEX_SHADER = Utils.loadAssetAsString("shaders/lanczos.vsh", true); - public static final String LANCZOS_SAMPLER_FRAGMENT_SHADER = Utils.loadAssetAsString("shaders/lanczos.fsh", true); - public static final String FOV_REDUCTION_FRAGMENT_SHADER = Utils.loadAssetAsString("shaders/fovreduction.fsh", true); + + public static ShaderInstance rendertypeEndPortalShaderVR; + public static ShaderInstance rendertypeEndGatewayShaderVR; + + public static ShaderInstance getRendertypeEndPortalShaderVR(){ + return rendertypeEndPortalShaderVR; + } + public static ShaderInstance getRendertypeEndGatewayShaderVR(){ + return rendertypeEndGatewayShaderVR; + } private VRShaders() { @@ -95,4 +99,10 @@ public static void setupFOVReduction() throws Exception _Overlay_time = fovReductionShader.safeGetUniform("portaltime"); _Overlay_BlackAlpha = fovReductionShader.safeGetUniform("blackalpha"); } + + public static void setupPortalShaders() throws Exception + { + rendertypeEndPortalShaderVR = new ShaderInstance(Minecraft.getInstance().getResourceManager(), "rendertype_end_portal_vr", DefaultVertexFormat.POSITION); + rendertypeEndGatewayShaderVR = new ShaderInstance(Minecraft.getInstance().getResourceManager(), "rendertype_end_gateway_vr", DefaultVertexFormat.POSITION); + } } diff --git a/common/src/main/java/org/vivecraft/render/VRWidgetHelper.java b/common/src/main/java/org/vivecraft/client_vr/render/VRWidgetHelper.java similarity index 86% rename from common/src/main/java/org/vivecraft/render/VRWidgetHelper.java rename to common/src/main/java/org/vivecraft/client_vr/render/VRWidgetHelper.java index 62c31b4b0..d5eef5075 100644 --- a/common/src/main/java/org/vivecraft/render/VRWidgetHelper.java +++ b/common/src/main/java/org/vivecraft/client_vr/render/VRWidgetHelper.java @@ -1,4 +1,4 @@ -package org.vivecraft.render; +package org.vivecraft.client_vr.render; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.BufferBuilder; @@ -18,14 +18,14 @@ import net.minecraft.world.inventory.InventoryMenu; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.MethodHolder; -import org.vivecraft.extensions.GameRendererExtension; -import org.vivecraft.extensions.ItemInHandRendererExtension; -import org.vivecraft.gameplay.trackers.CameraTracker; -import org.vivecraft.settings.VRHotkeys; -import org.vivecraft.settings.VRSettings; -import org.vivecraft.utils.Utils; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.MethodHolder; +import org.vivecraft.client_vr.extensions.GameRendererExtension; +import org.vivecraft.client_vr.extensions.ItemInHandRendererExtension; +import org.vivecraft.client_vr.gameplay.trackers.CameraTracker; +import org.vivecraft.client_vr.settings.VRHotkeys; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.client.utils.Utils; import java.util.Random; import java.util.function.Function; @@ -38,7 +38,7 @@ public class VRWidgetHelper public static void renderVRThirdPersonCamWidget() { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); if (dataholder.vrSettings.mixedRealityRenderCameraModel) { @@ -51,7 +51,7 @@ public static void renderVRThirdPersonCamWidget() f *= 1.03F; } - renderVRCameraWidget(-0.748F, -0.438F, -0.06F, f, RenderPass.THIRD, ClientDataHolder.thirdPersonCameraModel, ClientDataHolder.thirdPersonCameraDisplayModel, () -> + renderVRCameraWidget(-0.748F, -0.438F, -0.06F, f, RenderPass.THIRD, ClientDataHolderVR.thirdPersonCameraModel, ClientDataHolderVR.thirdPersonCameraDisplayModel, () -> { dataholder.vrRenderer.framebufferMR.bindRead(); RenderSystem.setShaderTexture(0, dataholder.vrRenderer.framebufferMR.getColorTextureId()); @@ -72,7 +72,7 @@ public static void renderVRThirdPersonCamWidget() public static void renderVRHandheldCameraWidget() { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); if (dataholder.currentPass != RenderPass.CAMERA && dataholder.cameraTracker.isVisible()) { @@ -103,7 +103,7 @@ public static void renderVRHandheldCameraWidget() public static void renderVRCameraWidget(float offsetX, float offsetY, float offsetZ, float scale, RenderPass renderPass, ModelResourceLocation model, ModelResourceLocation displayModel, Runnable displayBindFunc, Function displayFaceFunc) { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); PoseStack poseStack = RenderSystem.getModelViewStack(); poseStack.pushPose(); poseStack.setIdentity(); @@ -135,23 +135,23 @@ public static void renderVRCameraWidget(float offsetX, float offsetY, float offs RenderSystem.defaultBlendFunc(); RenderSystem.setShaderTexture(0, InventoryMenu.BLOCK_ATLAS); if (minecraft.level != null) - RenderSystem.setShader(GameRenderer::getRendertypeCutoutShader); + RenderSystem.setShader(GameRenderer::getRendertypeEntityCutoutNoCullShader); else RenderSystem.setShader(GameRenderer::getPositionTexColorNormalShader); minecraft.gameRenderer.lightTexture().turnOnLightLayer(); Tesselator tesselator = Tesselator.getInstance(); BufferBuilder bufferbuilder = tesselator.getBuilder(); - bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.BLOCK); + bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.NEW_ENTITY); minecraft.getBlockRenderer().getModelRenderer().renderModel((new PoseStack()).last(), bufferbuilder, (BlockState)null, minecraft.getModelManager().getModel(model), 1.0F, 1.0F, 1.0F, i, OverlayTexture.NO_OVERLAY); tesselator.end(); RenderSystem.disableBlend(); displayBindFunc.run(); - RenderSystem.setShader(GameRenderer::getRendertypeSolidShader); + RenderSystem.setShader(GameRenderer::getRendertypeEntitySolidShader); BufferBuilder bufferbuilder1 = tesselator.getBuilder(); - bufferbuilder1.begin(Mode.QUADS, DefaultVertexFormat.BLOCK); + bufferbuilder1.begin(Mode.QUADS, DefaultVertexFormat.NEW_ENTITY); for (BakedQuad bakedquad : minecraft.getModelManager().getModel(displayModel).getQuads((BlockState)null, (Direction)null, random)) { @@ -167,6 +167,7 @@ public static void renderVRCameraWidget(float offsetX, float offsetY, float offs Float.intBitsToFloat(vertexList[2])) .color(1.0F, 1.0F, 1.0F, 1.0F) .uv(flag ? 1.0F : 0.0F, 1.0F) + .overlayCoords(OverlayTexture.NO_OVERLAY) .uv2(j) .normal(0.0F, 0.0F, flag ? -1.0F : 1.0F) .endVertex(); @@ -176,6 +177,7 @@ public static void renderVRCameraWidget(float offsetX, float offsetY, float offs Float.intBitsToFloat(vertexList[step+2])) .color(1.0F, 1.0F, 1.0F, 1.0F) .uv(flag ? 1.0F : 0.0F, 0.0F) + .overlayCoords(OverlayTexture.NO_OVERLAY) .uv2(j) .normal(0.0F, 0.0F, flag ? -1.0F : 1.0F).endVertex(); bufferbuilder1.vertex( @@ -184,6 +186,7 @@ public static void renderVRCameraWidget(float offsetX, float offsetY, float offs Float.intBitsToFloat(vertexList[step*2+2])) .color(1.0F, 1.0F, 1.0F, 1.0F) .uv(flag ? 0.0F : 1.0F, 0.0F) + .overlayCoords(OverlayTexture.NO_OVERLAY) .uv2(j) .normal(0.0F, 0.0F, flag ? -1.0F : 1.0F).endVertex(); bufferbuilder1.vertex( @@ -192,6 +195,7 @@ public static void renderVRCameraWidget(float offsetX, float offsetY, float offs Float.intBitsToFloat(vertexList[step*3+2])) .color(1.0F, 1.0F, 1.0F, 1.0F) .uv(flag ? 0.0F : 1.0F, 1.0F) + .overlayCoords(OverlayTexture.NO_OVERLAY) .uv2(j) .normal(0.0F, 0.0F, flag ? -1.0F : 1.0F).endVertex(); } diff --git a/common/src/main/java/org/vivecraft/render/VivecraftItemRendering.java b/common/src/main/java/org/vivecraft/client_vr/render/VivecraftItemRendering.java similarity index 94% rename from common/src/main/java/org/vivecraft/render/VivecraftItemRendering.java rename to common/src/main/java/org/vivecraft/client_vr/render/VivecraftItemRendering.java index 60e93e69b..467c70526 100644 --- a/common/src/main/java/org/vivecraft/render/VivecraftItemRendering.java +++ b/common/src/main/java/org/vivecraft/client_vr/render/VivecraftItemRendering.java @@ -1,10 +1,11 @@ -package org.vivecraft.render; +package org.vivecraft.client_vr.render; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.api.ItemTags; -import org.vivecraft.gameplay.trackers.SwingTracker; -import org.vivecraft.gameplay.trackers.TelescopeTracker; -import org.vivecraft.provider.ControllerType; +import org.vivecraft.client.VivecraftVRMod; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.ItemTags; +import org.vivecraft.client_vr.gameplay.trackers.SwingTracker; +import org.vivecraft.client_vr.gameplay.trackers.TelescopeTracker; +import org.vivecraft.client_vr.provider.ControllerType; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Quaternion; @@ -38,7 +39,7 @@ public class VivecraftItemRendering { - private static ClientDataHolder dh = ClientDataHolder.getInstance(); + private static ClientDataHolderVR dh = ClientDataHolderVR.getInstance(); public static VivecraftItemTransformType getTransformType(ItemStack pStack, AbstractClientPlayer pPlayer, ItemRenderer itemRenderer) { VivecraftItemTransformType rendertype = VivecraftItemTransformType.Item; Item item = pStack.getItem(); @@ -293,13 +294,22 @@ else if (rendertype == VivecraftItemTransformType.Block_Stick) rotation.mul(Vector3f.XP.rotationDegrees(-45.0F)); rotation.mul(Vector3f.XP.rotationDegrees((float)gunAngle)); } + else if (rendertype == VivecraftItemTransformType.Horn) + { + scale = (double)0.3F; + rotation = Vector3f.XP.rotationDegrees(0.0F); + translateY += -0.105D + 0.06D * gunAngle / 40.0D; + translateZ += (double) - 0.1F; + rotation.mul(Vector3f.XP.rotationDegrees(-45.0F)); + rotation.mul(Vector3f.XP.rotationDegrees((float)gunAngle)); + } else if (rendertype == VivecraftItemTransformType.Shield) { boolean reverse = dh.vrSettings.reverseHands && !dh.vrSettings.seated; if(reverse)k*=-1; scale = (double)0.4F; - translateY += (double)0.21F; + translateY += (double)0.18F; // if (k==1) { @@ -425,7 +435,7 @@ else if (rendertype == VivecraftItemTransformType.Tool) translateY += (double)0.02F; translateX += (double)0.03F; - if (dh.vr.keyClimbeyGrab.isDown(ControllerType.RIGHT) && mainHand || dh.vr.keyClimbeyGrab.isDown(ControllerType.LEFT) && !mainHand) + if (VivecraftVRMod.INSTANCE.keyClimbeyGrab.isDown(ControllerType.RIGHT) && mainHand || VivecraftVRMod.INSTANCE.keyClimbeyGrab.isDown(ControllerType.LEFT) && !mainHand) { translateZ += (double) - 0.2F; } @@ -480,7 +490,8 @@ public enum VivecraftItemTransformType Noms, Crossbow, Telescope, - Compass; + Compass, + Horn } } \ No newline at end of file diff --git a/common/src/main/java/org/vivecraft/client_vr/render/XRCamera.java b/common/src/main/java/org/vivecraft/client_vr/render/XRCamera.java new file mode 100644 index 000000000..d797be44d --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_vr/render/XRCamera.java @@ -0,0 +1,66 @@ +package org.vivecraft.client_vr.render; + +import com.mojang.math.Vector3f; +import net.minecraft.world.level.material.FogType; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRData; + +import net.minecraft.client.Camera; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.phys.Vec3; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.client_xr.render_pass.RenderPassType; + + +public class XRCamera extends Camera { + public void setup(BlockGetter pLevel, Entity pRenderViewEntity, boolean pThirdPerson, boolean pThirdPersonReverse, float pPartialTicks) { + if (RenderPassType.isVanilla()) { + super.setup(pLevel, pRenderViewEntity, pThirdPerson, pThirdPersonReverse, pPartialTicks); + return; + } + this.initialized = true; + this.level = pLevel; + this.entity = pRenderViewEntity; + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); + RenderPass renderpass = dataholder.currentPass; + + VRData.VRDevicePose eye = dataholder.vrPlayer.vrdata_world_render.getEye(renderpass); + this.setPosition(eye.getPosition()); + this.xRot = -eye.getPitch(); + this.yRot = eye.getYaw(); + this.getLookVector().set((float) eye.getDirection().x, (float) eye.getDirection().y, (float) eye.getDirection().z); + Vec3 vec3 = eye.getCustomVector(new Vec3(0.0D, 1.0D, 0.0D)); + this.getUpVector().set((float) vec3.x, (float) vec3.y, (float) vec3.z); + eye.getCustomVector(new Vec3(1.0D, 0.0D, 0.0D)); + this.getLeftVector().set((float) vec3.x, (float) vec3.y, (float) vec3.z); + this.rotation().set(0.0F, 0.0F, 0.0F, 1.0F); + this.rotation().mul(Vector3f.YP.rotationDegrees(-this.yRot)); + this.rotation().mul(Vector3f.XP.rotationDegrees(this.xRot)); + } + + public void tick() { + if (RenderPassType.isVanilla()) { + super.tick(); + } + } + + @Override + public boolean isDetached() { + if (RenderPassType.isVanilla()) { + return super.isDetached(); + } + boolean renderSelf = ClientDataHolderVR.getInstance().currentPass == RenderPass.THIRD && ClientDataHolderVR.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON || ClientDataHolderVR.getInstance().currentPass == RenderPass.CAMERA; + return renderSelf || ClientDataHolderVR.getInstance().vrSettings.shouldRenderSelf; + } + + // some mods call this, when querying the sunrise color in the menu world + @Override + public FogType getFluidInCamera() { + if (this.level == null) { + return FogType.NONE; + } else { + return super.getFluidInCamera(); + } + } +} diff --git a/common/src/main/java/org/vivecraft/settings/AutoCalibration.java b/common/src/main/java/org/vivecraft/client_vr/settings/AutoCalibration.java similarity index 79% rename from common/src/main/java/org/vivecraft/settings/AutoCalibration.java rename to common/src/main/java/org/vivecraft/client_vr/settings/AutoCalibration.java index c1b71f345..e63cfdb38 100644 --- a/common/src/main/java/org/vivecraft/settings/AutoCalibration.java +++ b/common/src/main/java/org/vivecraft/client_vr/settings/AutoCalibration.java @@ -1,7 +1,7 @@ -package org.vivecraft.settings; +package org.vivecraft.client_vr.settings; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.utils.LangHelper; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client.utils.LangHelper; import net.minecraft.client.Minecraft; import net.minecraft.network.chat.TextComponent; @@ -13,7 +13,7 @@ public class AutoCalibration public static void calibrateManual() { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); dataholder.vrSettings.manualCalibration = (float)dataholder.vr.hmdPivotHistory.averagePosition(0.5D).y; int i = (int)((float)((double)Math.round(100.0D * (double)getPlayerHeight() / (double)1.52F))); minecraft.gui.getChat().addMessage(new TextComponent(LangHelper.get("vivecraft.messages.heightset", i))); @@ -23,7 +23,7 @@ public static void calibrateManual() public static float getPlayerHeight() { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); float f = 1.52F; if (dataholder.vrSettings.seated) diff --git a/common/src/main/java/org/vivecraft/settings/OptionEnum.java b/common/src/main/java/org/vivecraft/client_vr/settings/OptionEnum.java similarity index 93% rename from common/src/main/java/org/vivecraft/settings/OptionEnum.java rename to common/src/main/java/org/vivecraft/client_vr/settings/OptionEnum.java index 61cda1310..b82614eeb 100644 --- a/common/src/main/java/org/vivecraft/settings/OptionEnum.java +++ b/common/src/main/java/org/vivecraft/client_vr/settings/OptionEnum.java @@ -1,8 +1,8 @@ -package org.vivecraft.settings; +package org.vivecraft.client_vr.settings; import java.lang.reflect.Method; -import org.vivecraft.utils.LangHelper; +import org.vivecraft.client.utils.LangHelper; public interface OptionEnum> { default String getLangKey() { diff --git a/common/src/main/java/org/vivecraft/settings/SettingField.java b/common/src/main/java/org/vivecraft/client_vr/settings/SettingField.java similarity index 95% rename from common/src/main/java/org/vivecraft/settings/SettingField.java rename to common/src/main/java/org/vivecraft/client_vr/settings/SettingField.java index 22ceef4e1..f56a3f841 100644 --- a/common/src/main/java/org/vivecraft/settings/SettingField.java +++ b/common/src/main/java/org/vivecraft/client_vr/settings/SettingField.java @@ -1,4 +1,4 @@ -package org.vivecraft.settings; +package org.vivecraft.client_vr.settings; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/common/src/main/java/org/vivecraft/settings/VRHotkeys.java b/common/src/main/java/org/vivecraft/client_vr/settings/VRHotkeys.java similarity index 93% rename from common/src/main/java/org/vivecraft/settings/VRHotkeys.java rename to common/src/main/java/org/vivecraft/client_vr/settings/VRHotkeys.java index eccd7c452..6570f9dce 100644 --- a/common/src/main/java/org/vivecraft/settings/VRHotkeys.java +++ b/common/src/main/java/org/vivecraft/client_vr/settings/VRHotkeys.java @@ -1,4 +1,4 @@ -package org.vivecraft.settings; +package org.vivecraft.client_vr.settings; import java.io.BufferedReader; import java.io.File; @@ -6,17 +6,17 @@ import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.MethodHolder; -import org.vivecraft.extensions.MinecraftExtension; -import org.vivecraft.api.VRData; -import org.vivecraft.utils.LangHelper; -import org.vivecraft.utils.Utils; -import org.vivecraft.utils.math.Angle; -import org.vivecraft.utils.math.Axis; -import org.vivecraft.utils.math.Matrix4f; -import org.vivecraft.utils.math.Quaternion; -import org.vivecraft.utils.math.Vector3; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.MethodHolder; +import org.vivecraft.client_vr.extensions.MinecraftExtension; +import org.vivecraft.client_vr.VRData; +import org.vivecraft.client.utils.LangHelper; +import org.vivecraft.client.utils.Utils; +import org.vivecraft.common.utils.math.Angle; +import org.vivecraft.common.utils.math.Axis; +import org.vivecraft.common.utils.math.Matrix4f; +import org.vivecraft.common.utils.math.Quaternion; +import org.vivecraft.common.utils.math.Vector3; import com.google.common.util.concurrent.Runnables; @@ -48,7 +48,7 @@ public static boolean handleKeyboardInputs(int key, int scanCode, int action, in else { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); boolean flag = false; if (action == 1 && key == 344 && MethodHolder.isKeyDown(345)) @@ -119,7 +119,7 @@ public static boolean handleKeyboardInputs(int key, int scanCode, int action, in public static void handleMRKeys() { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); boolean flag = false; if (MethodHolder.isKeyDown(263) && MethodHolder.isKeyDown(345) && !MethodHolder.isKeyDown(344)) @@ -240,7 +240,7 @@ public static void handleMRKeys() private static void adjustCamPos(Vector3 offset) { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); if (dataholder.vr.mrMovingCamActive) { @@ -261,7 +261,7 @@ private static void adjustCamPos(Vector3 offset) private static void adjustCamRot(Axis axis, float degrees) { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); if (dataholder.vr.mrMovingCamActive) { @@ -276,7 +276,7 @@ private static void adjustCamRot(Axis axis, float degrees) public static void snapMRCam(int controller) { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); Vec3 vec3 = dataholder.vrPlayer.vrdata_room_pre.getController(controller).getPosition(); dataholder.vrSettings.vrFixedCamposX = (float)vec3.x; dataholder.vrSettings.vrFixedCamposY = (float)vec3.y; @@ -288,7 +288,7 @@ public static void snapMRCam(int controller) public static void updateMovingThirdPersonCam() { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); if (startControllerPose != null) { @@ -308,7 +308,7 @@ public static void updateMovingThirdPersonCam() public static void startMovingThirdPersonCam(int controller, Triggerer triggerer) { Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); startController = controller; startControllerPose = dataholder.vrPlayer.vrdata_room_pre.getController(controller); startCamposX = dataholder.vrSettings.vrFixedCamposX; @@ -398,7 +398,7 @@ public static void loadExternalCameraConfig() } Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); Quaternion quaternion = new Quaternion(f3, f4, f5, dataholder.vrSettings.externalCameraAngleOrder); dataholder.vrSettings.mrMovingCamOffsetX = f; dataholder.vrSettings.mrMovingCamOffsetY = f1; diff --git a/common/src/main/java/org/vivecraft/settings/VRSettings.java b/common/src/main/java/org/vivecraft/client_vr/settings/VRSettings.java similarity index 93% rename from common/src/main/java/org/vivecraft/settings/VRSettings.java rename to common/src/main/java/org/vivecraft/client_vr/settings/VRSettings.java index 696537c62..975b6318b 100644 --- a/common/src/main/java/org/vivecraft/settings/VRSettings.java +++ b/common/src/main/java/org/vivecraft/client_vr/settings/VRSettings.java @@ -2,18 +2,16 @@ * Copyright 2013 Mark Browning, StellaArtois * Licensed under the LGPL 3.0 or later (See LICENSE.md for details) */ -package org.vivecraft.settings; +package org.vivecraft.client_vr.settings; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.IrisHelper; -import org.vivecraft.Xplat; -import org.vivecraft.extensions.OptionsExtension; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.mod_compat_vr.ShadersHelper; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.extensions.OptionsExtension; import com.google.gson.JsonObject; import com.mojang.blaze3d.pipeline.RenderTarget; import net.minecraft.client.Minecraft; -import net.minecraft.client.Options; import net.minecraft.client.resources.language.I18n; -import net.minecraft.client.sounds.SoundEngine; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; @@ -22,16 +20,16 @@ import org.apache.commons.lang3.tuple.Triple; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.vivecraft.settings.profile.ProfileManager; -import org.vivecraft.settings.profile.ProfileReader; -import org.vivecraft.settings.profile.ProfileWriter; -import org.vivecraft.gameplay.VRPlayer; -import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; -import org.vivecraft.gui.PhysicalKeyboard; -import org.vivecraft.utils.LangHelper; -import org.vivecraft.utils.math.Angle; -import org.vivecraft.utils.math.Quaternion; -import org.vivecraft.utils.math.Vector3; +import org.vivecraft.client_vr.settings.profile.ProfileManager; +import org.vivecraft.client_vr.settings.profile.ProfileReader; +import org.vivecraft.client_vr.settings.profile.ProfileWriter; +import org.vivecraft.client_vr.gameplay.VRPlayer; +import org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler; +import org.vivecraft.client_vr.gui.PhysicalKeyboard; +import org.vivecraft.client.utils.LangHelper; +import org.vivecraft.common.utils.math.Angle; +import org.vivecraft.common.utils.math.Quaternion; +import org.vivecraft.common.utils.math.Vector3; import java.awt.*; import java.io.File; @@ -110,7 +108,8 @@ public enum FreeMove implements OptionEnum { CONTROLLER, HMD, RUN_IN_PLACE, - ROOM + ROOM, + AUTO // only for flying } public enum MenuWorld implements OptionEnum { @@ -138,14 +137,23 @@ public enum ShaderGUIRender implements OptionEnum { AFTER_TRANSLUCENT, AFTER_SHADER } + + public enum VRProvider implements OptionEnum { + OPENVR, + NULLVR + } + + public enum ChatServerPluginMessage implements OptionEnum { + ALWAYS, + SERVER_ONLY, + NEVER + } @SettingField public int version = UNKNOWN_VERSION; @SettingField - public String stereoProviderPluginID = "openvr"; - @SettingField - public String badStereoProviderPluginID = ""; + public VRProvider stereoProviderPluginID = VRProvider.OPENVR; public boolean storeDebugAim = false; @SettingField public int smoothRunTickCount = 20; @@ -193,12 +201,10 @@ public enum ShaderGUIRender implements OptionEnum { public String keyboardKeysShift ="~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL;\':\"ZXCVBNM,./?<>"; @SettingField(VrOptions.HRTF_SELECTION) public int hrtfSelection = 0; - @SettingField - public boolean disableFun = false; - @SettingField - public boolean firstRun = true; @SettingField(VrOptions.RIGHT_CLICK_DELAY) public RightClickDelay rightclickDelay = RightClickDelay.VANILLA; + @SettingField(VrOptions.INGAME_BINDINGS_IN_GUI) + public boolean ingameBindingsInGui = false; @SettingField(VrOptions.THIRDPERSON_ITEMTRANSFORMS) public boolean thirdPersonItems = false; // @@ -216,6 +222,8 @@ public enum ShaderGUIRender implements OptionEnum { public float movementSpeedMultiplier = 1.0f; // VIVE - use full speed by default @SettingField(VrOptions.FREEMOVE_MODE) public FreeMove vrFreeMoveMode = FreeMove.CONTROLLER; + @SettingField(VrOptions.FREEMOVE_FLY_MODE) + public FreeMove vrFreeMoveFlyMode = FreeMove.AUTO; @SettingField(value = VrOptions.LIMIT_TELEPORT, config = "limitedTeleport") public boolean vrLimitedSurvivalTeleport = true; @@ -296,7 +304,6 @@ public enum ShaderGUIRender implements OptionEnum { @SettingField(VrOptions.MIRROR_EYE) public boolean displayMirrorLeftEye = false; public boolean shouldRenderSelf=false; - public boolean tmpRenderSelf; @SettingField(VrOptions.MENU_WORLD_SELECTION) public MenuWorld menuWorldSelection = MenuWorld.BOTH; // @@ -399,6 +406,18 @@ public enum ShaderGUIRender implements OptionEnum { public boolean guiAppearOverBlock = true; @SettingField(VrOptions.SHADER_GUI_RENDER) public ShaderGUIRender shaderGUIRender = ShaderGUIRender.AFTER_SHADER; + @SettingField(VrOptions.SHOW_UPDATES) + public boolean alwaysShowUpdates = true; + @SettingField + public String lastUpdate = ""; + @SettingField(VrOptions.SHOW_PLUGIN) + public ChatServerPluginMessage showServerPluginMessage = ChatServerPluginMessage.SERVER_ONLY; + @SettingField(VrOptions.SHOW_PLUGIN_MISSING) + public boolean showServerPluginMissingMessageAlways = true; + @SettingField + public boolean vrEnabled = false; + @SettingField(VrOptions.VR_HOTSWITCH) + public boolean vrHotswitchingEnabled = true; /** * This isn't actually used, it's only a dummy field to save the value from vanilla Options. @@ -1078,13 +1097,16 @@ Object convertOption(String value) { } } }, + SHOW_UPDATES(false, true, "vivecraft.options.always", "vivecraft.options.once"), + SHOW_PLUGIN(false, true), + SHOW_PLUGIN_MISSING(false, true, "vivecraft.options.always", "vivecraft.options.once"), AUTO_OPEN_KEYBOARD(false, true), // Always Open Keyboard RADIAL_MODE_HOLD(false, true, "vivecraft.options.hold", "vivecraft.options.press"), // Radial Menu Mode PHYSICAL_KEYBOARD(false, true, "vivecraft.options.keyboard.physical", "vivecraft.options.keyboard.pointer"), // Keyboard Type PHYSICAL_KEYBOARD_SCALE(true, false, 0.75f, 1.5f, 0.01f, -1) { // Keyboard Size @Override void onOptionChange() { - KeyboardHandler.physicalKeyboard.setScale(ClientDataHolder.getInstance().vrSettings.physicalKeyboardScale); + KeyboardHandler.physicalKeyboard.setScale(ClientDataHolderVR.getInstance().vrSettings.physicalKeyboardScale); } }, PHYSICAL_KEYBOARD_THEME(false, false), // Keyboard Theme @@ -1113,8 +1135,8 @@ Object convertOption(String value) { @Override void onOptionChange() { - if (!((Xplat.isModLoaded("iris") || Xplat.isModLoaded("oculus")) && IrisHelper.isShaderActive())) { - ClientDataHolder.getInstance().vrRenderer.reinitFrameBuffers("Mirror Setting Changed"); + if (VRState.vrRunning && !ShadersHelper.isShaderActive()) { + ClientDataHolderVR.getInstance().vrRenderer.reinitFrameBuffers("Mirror Setting Changed"); } } @@ -1170,19 +1192,19 @@ Object setOptionValue(Object value) { MIXED_REALITY_UNITY_LIKE(false, true, "vivecraft.options.unity", "vivecraft.options.sidebyside") { // Layout @Override void onOptionChange() { - ClientDataHolder.getInstance().vrRenderer.reinitFrameBuffers("MR Setting Changed"); + ClientDataHolderVR.getInstance().vrRenderer.reinitFrameBuffers("MR Setting Changed"); } }, MIXED_REALITY_UNDISTORTED(false, true) { // Undistorted Pass @Override void onOptionChange() { - ClientDataHolder.getInstance().vrRenderer.reinitFrameBuffers("MR Setting Changed"); + ClientDataHolderVR.getInstance().vrRenderer.reinitFrameBuffers("MR Setting Changed"); } }, MIXED_REALITY_ALPHA_MASK(false, true) { // Alpha Mask @Override void onOptionChange() { - ClientDataHolder.getInstance().vrRenderer.reinitFrameBuffers("MR Setting Changed"); + ClientDataHolderVR.getInstance().vrRenderer.reinitFrameBuffers("MR Setting Changed"); } }, MIXED_REALITY_FOV(true, false, 0, 179, 1, 0) { // Third Person FOV @@ -1275,9 +1297,11 @@ Float setOptionFloatValue(float value) { @Override void onOptionChange() { - ClientDataHolder.getInstance().vrPlayer.roomScaleMovementDelay = 2; - ClientDataHolder.getInstance().vrPlayer.snapRoomOriginToPlayerEntity(Minecraft.getInstance().player, false, true); - VRPlayer.get().preTick(); + if (VRState.vrRunning) { + ClientDataHolderVR.getInstance().vrPlayer.roomScaleMovementDelay = 2; + ClientDataHolderVR.getInstance().vrPlayer.snapRoomOriginToPlayerEntity(Minecraft.getInstance().player, false, true); + VRPlayer.get().preTick(); + } } }, WORLD_ROTATION(true, false, 0, 360, 30, 0) { // World Rotation @@ -1323,19 +1347,24 @@ Float setOptionFloatValue(float value) { @Override void onOptionChange() { - ClientDataHolder.getInstance().vrSettings.worldRotation = 0; + ClientDataHolderVR.getInstance().vrSettings.worldRotation = 0; } }, TOUCH_HOTBAR(false, true), // Touch Hotbar Enabled PLAY_MODE_SEATED(false, true, "vivecraft.options.seated", "vivecraft.options.standing"), // Play Mode + VR_HOTSWITCH(false, true), RENDER_SCALEFACTOR(true, false, 0.1f, 9f, 0.1f, 0) { // Resolution @Override String getDisplayString(String prefix, Object value) { - RenderTarget eye0 = ClientDataHolder.getInstance().vrRenderer.framebufferEye0; - return prefix + Math.round((float)value * 100) + "% (" + (int)Math.ceil(eye0.viewWidth * Math.sqrt((float)value)) + "x" + (int)Math.ceil(eye0.viewHeight * Math.sqrt((float)value)) + ")"; + if (VRState.vrEnabled) { + RenderTarget eye0 = ClientDataHolderVR.getInstance().vrRenderer.framebufferEye0; + return prefix + Math.round((float) value * 100) + "% (" + (int) Math.ceil(eye0.viewWidth * Math.sqrt((float) value)) + "x" + (int) Math.ceil(eye0.viewHeight * Math.sqrt((float) value)) + ")"; + } else { + return prefix + Math.round((float) value * 100) + "%"; + } } }, - MONO_FOV(true, false, 0, 179, 1, 0) { // Undistorted FOV + MONO_FOV(true, false, 1, 179, 1, 0) { // Undistorted FOV @Override String getDisplayString(String prefix, Object value) { return prefix + String.format("%.0f" + DEGREE, Minecraft.getInstance().options.fov); @@ -1352,7 +1381,7 @@ Float setOptionFloatValue(float value) { return 0f; } }, - HANDHELD_CAMERA_FOV(true, false, 0, 179, 1, 0) { // Camera FOV + HANDHELD_CAMERA_FOV(true, false, 1, 179, 1, 0) { // Camera FOV @Override String getDisplayString(String prefix, Object value) { return prefix + String.format("%.0f" + DEGREE, (float)value); @@ -1399,6 +1428,26 @@ Object convertOption(String value) { return null; } } + @Override + Object setOptionValue(Object value) { + if (value == FreeMove.ROOM) { + // skip Auto + return FreeMove.CONTROLLER; + } + return null; + } + }, + FREEMOVE_FLY_MODE(false, true) { + @Override + Object setOptionValue(Object value) { + if (value == FreeMove.CONTROLLER) { + return FreeMove.HMD; + } else if (value == FreeMove.AUTO) { + return FreeMove.CONTROLLER; + } else { + return FreeMove.AUTO; + } + } }, VEHICLE_ROTATION(false, true), // Vehicle Rotation //SEATED @@ -1476,15 +1525,15 @@ String getDisplayString(String prefix, Object value) { return prefix + I18n.get("options.off"); else if (i == 0) return prefix + I18n.get("vivecraft.options.default"); - else if (i <= ClientDataHolder.hrtfList.size()) - return prefix + ClientDataHolder.hrtfList.get(i - 1); + else if (i <= ClientDataHolderVR.hrtfList.size()) + return prefix + ClientDataHolderVR.hrtfList.get(i - 1); return prefix; } @Override Object setOptionValue(Object value) { int i = (int)value; - if (++i > ClientDataHolder.hrtfList.size()) + if (++i > ClientDataHolderVR.hrtfList.size()) i = -1; return i; } @@ -1492,8 +1541,7 @@ Object setOptionValue(Object value) { @Override void onOptionChange() { // Reload the sound engine to get the new HRTF - SoundEngine eng = Minecraft.getInstance().getSoundManager().soundEngine; - eng.reload(); + Minecraft.getInstance().getSoundManager().reload(); } }, RELOAD_EXTERNAL_CAMERA(false, false) { // Reload External Camera @@ -1502,6 +1550,7 @@ String getDisplayString(String prefix, Object value) { return I18n.get("vivecraft.options." + name()); } }, + INGAME_BINDINGS_IN_GUI(false, true), RIGHT_CLICK_DELAY(false, false); // Right Click Repeat // ANISOTROPIC_FILTERING("options.anisotropicFiltering", true, false, 1.0F, 16.0F, 0.0F) // { @@ -1659,28 +1708,29 @@ public double denormalizeValue(float value) public static synchronized void initSettings( Minecraft mc, File dataDir ) { ProfileManager.init(dataDir); - mc.options = new Options( mc, dataDir ); - // mc.gameSettings.saveOptions(); - ClientDataHolder.getInstance().vrSettings = new VRSettings( mc, dataDir ); - ClientDataHolder.getInstance().vrSettings.saveOptions(); + var vrSettings = new VRSettings( mc, dataDir ); + + vrSettings.saveOptions(); + + ClientDataHolderVR.getInstance().vrSettings = vrSettings; } public static synchronized void loadAll( Minecraft mc ) { mc.options.load(); - ClientDataHolder.getInstance().vrSettings.loadOptions(); + ClientDataHolderVR.getInstance().vrSettings.loadOptions(); } public static synchronized void saveAll( Minecraft mc ) { mc.options.save(); - ClientDataHolder.getInstance().vrSettings.saveOptions(); + ClientDataHolderVR.getInstance().vrSettings.saveOptions(); } public static synchronized void resetAll( Minecraft mc ) { ((OptionsExtension) mc.options).resetSettings(); - ClientDataHolder.getInstance().vrSettings.resetSettings(); + ClientDataHolderVR.getInstance().vrSettings.resetSettings(); } public static synchronized String getCurrentProfile() diff --git a/common/src/main/java/org/vivecraft/settings/profile/ProfileManager.java b/common/src/main/java/org/vivecraft/client_vr/settings/profile/ProfileManager.java similarity index 98% rename from common/src/main/java/org/vivecraft/settings/profile/ProfileManager.java rename to common/src/main/java/org/vivecraft/client_vr/settings/profile/ProfileManager.java index 4159a9210..315dc5f9c 100644 --- a/common/src/main/java/org/vivecraft/settings/profile/ProfileManager.java +++ b/common/src/main/java/org/vivecraft/client_vr/settings/profile/ProfileManager.java @@ -1,4 +1,4 @@ -package org.vivecraft.settings.profile; +package org.vivecraft.client_vr.settings.profile; import java.io.BufferedReader; import java.io.File; @@ -15,10 +15,7 @@ import java.util.SortedSet; import java.util.TreeSet; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.JsonPrimitive; +import com.google.gson.*; public class ProfileManager @@ -34,6 +31,7 @@ public class ProfileManager static File vrProfileCfgFile = null; static JsonObject jsonConfigRoot = null; static JsonObject profiles = null; + static final Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create(); static boolean loaded = false; public static final String[] DEFAULT_BINDINGS = new String[] {"key.playerlist:b:6:Button 6", "axis.updown:a:2:-:Y Rotation", "walk.forward:a:0:-:Y ", "gui.axis.leftright:a:3:-:X Rotation", "gui.axis.updown:a:2:-:Y Rotation", "key.sneak:b:9:Button 9", "gui.Left:px:-", "key.itemright:b:5:Button 5", "gui.Right:px:+", "key.left:a:1:-:X ", "gui.Select:b:0:Button 0", "key.aimcenter:b:8:Button 8", "key.pickItem:b:2:Button 2", "key.menu:b:7:Button 7", "key.attack:a:4:-:Z ", "gui.Up:py:-", "key.use:a:4:+:Z ", "axis.leftright:a:3:-:X Rotation", "gui.Down:py:+", "key.right:a:1:+:X ", "key.back:a:0:+:Y ", "key.inventory:b:3:Button 3", "key.jump:b:0:Button 0", "key.drop:b:1:Button 1", "gui.Back:b:1:Button 1", "key.itemleft:b:4:Button 4"}; @@ -319,7 +317,7 @@ public static synchronized void save() try { OutputStreamWriter outputstreamwriter = new OutputStreamWriter(new FileOutputStream(vrProfileCfgFile), "UTF-8"); - String s = jsonConfigRoot.toString(); + String s = gson.toJson(jsonConfigRoot); outputstreamwriter.write(s); outputstreamwriter.flush(); outputstreamwriter.close(); diff --git a/common/src/main/java/org/vivecraft/settings/profile/ProfileReader.java b/common/src/main/java/org/vivecraft/client_vr/settings/profile/ProfileReader.java similarity index 97% rename from common/src/main/java/org/vivecraft/settings/profile/ProfileReader.java rename to common/src/main/java/org/vivecraft/client_vr/settings/profile/ProfileReader.java index cc32c5647..ee353535f 100644 --- a/common/src/main/java/org/vivecraft/settings/profile/ProfileReader.java +++ b/common/src/main/java/org/vivecraft/client_vr/settings/profile/ProfileReader.java @@ -1,4 +1,4 @@ -package org.vivecraft.settings.profile; +package org.vivecraft.client_vr.settings.profile; import java.io.IOException; import java.util.Iterator; diff --git a/common/src/main/java/org/vivecraft/settings/profile/ProfileWriter.java b/common/src/main/java/org/vivecraft/client_vr/settings/profile/ProfileWriter.java similarity index 96% rename from common/src/main/java/org/vivecraft/settings/profile/ProfileWriter.java rename to common/src/main/java/org/vivecraft/client_vr/settings/profile/ProfileWriter.java index c6a22090d..6c53069d4 100644 --- a/common/src/main/java/org/vivecraft/settings/profile/ProfileWriter.java +++ b/common/src/main/java/org/vivecraft/client_vr/settings/profile/ProfileWriter.java @@ -1,4 +1,4 @@ -package org.vivecraft.settings.profile; +package org.vivecraft.client_vr.settings.profile; import java.util.HashMap; import java.util.Map; diff --git a/common/src/main/java/org/vivecraft/tweaker/LoaderUtils.java b/common/src/main/java/org/vivecraft/client_vr/utils/LoaderUtils.java similarity index 98% rename from common/src/main/java/org/vivecraft/tweaker/LoaderUtils.java rename to common/src/main/java/org/vivecraft/client_vr/utils/LoaderUtils.java index 9bb9a6671..854383540 100644 --- a/common/src/main/java/org/vivecraft/tweaker/LoaderUtils.java +++ b/common/src/main/java/org/vivecraft/client_vr/utils/LoaderUtils.java @@ -1,4 +1,4 @@ -package org.vivecraft.tweaker; +package org.vivecraft.client_vr.utils; import java.io.File; import java.io.IOException; diff --git a/common/src/main/java/org/vivecraft/utils/RGBAColor.java b/common/src/main/java/org/vivecraft/client_vr/utils/RGBAColor.java similarity index 98% rename from common/src/main/java/org/vivecraft/utils/RGBAColor.java rename to common/src/main/java/org/vivecraft/client_vr/utils/RGBAColor.java index e11047b98..0fde50e17 100644 --- a/common/src/main/java/org/vivecraft/utils/RGBAColor.java +++ b/common/src/main/java/org/vivecraft/client_vr/utils/RGBAColor.java @@ -1,4 +1,4 @@ -package org.vivecraft.utils; +package org.vivecraft.client_vr.utils; // Pinched from GlStateManager and additional functionality added public class RGBAColor { diff --git a/common/src/main/java/org/vivecraft/utils/external/jinfinadeck.java b/common/src/main/java/org/vivecraft/client_vr/utils/external/jinfinadeck.java similarity index 98% rename from common/src/main/java/org/vivecraft/utils/external/jinfinadeck.java rename to common/src/main/java/org/vivecraft/client_vr/utils/external/jinfinadeck.java index b46faf2f7..d492b7204 100644 --- a/common/src/main/java/org/vivecraft/utils/external/jinfinadeck.java +++ b/common/src/main/java/org/vivecraft/client_vr/utils/external/jinfinadeck.java @@ -1,4 +1,4 @@ -package org.vivecraft.utils.external; +package org.vivecraft.client_vr.utils.external; import com.sun.jna.Library; import com.sun.jna.Native; diff --git a/common/src/main/java/org/vivecraft/utils/external/jkatvr.java b/common/src/main/java/org/vivecraft/client_vr/utils/external/jkatvr.java similarity index 97% rename from common/src/main/java/org/vivecraft/utils/external/jkatvr.java rename to common/src/main/java/org/vivecraft/client_vr/utils/external/jkatvr.java index 4818b0903..5430a74da 100644 --- a/common/src/main/java/org/vivecraft/utils/external/jkatvr.java +++ b/common/src/main/java/org/vivecraft/client_vr/utils/external/jkatvr.java @@ -1,4 +1,4 @@ -package org.vivecraft.utils.external; +package org.vivecraft.client_vr.utils.external; import com.sun.jna.Library; import com.sun.jna.Native; diff --git a/common/src/main/java/org/vivecraft/client_xr/render_pass/RenderPassManager.java b/common/src/main/java/org/vivecraft/client_xr/render_pass/RenderPassManager.java new file mode 100644 index 000000000..e33ad5201 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_xr/render_pass/RenderPassManager.java @@ -0,0 +1,44 @@ +package org.vivecraft.client_xr.render_pass; + +import com.mojang.blaze3d.pipeline.MainTarget; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.PostChain; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.gameplay.screenhandlers.GuiHandler; +import org.vivecraft.client_vr.render.RenderPass; + +public class RenderPassManager { + private static final Minecraft mc = Minecraft.getInstance(); + + public static RenderPassManager INSTANCE; + + public final MainTarget vanillaRenderTarget; + public PostChain vanillaOutlineChain; + public PostChain vanillaTransparencyChain; + public static RenderPassType renderPassType = RenderPassType.VANILLA; + public static WorldRenderPass wrp; + + public RenderPassManager(MainTarget vanillaRenderTarget) { + this.vanillaRenderTarget = vanillaRenderTarget; + } + + public static void setWorldRenderPass(WorldRenderPass wrp) { + RenderPassManager.wrp = wrp; + renderPassType = RenderPassType.WORLD_ONLY; + mc.mainRenderTarget = wrp.target; + } + + public static void setGUIRenderPass() { + ClientDataHolderVR.getInstance().currentPass = RenderPass.GUI; + RenderPassManager.wrp = null; + renderPassType = RenderPassType.GUI_ONLY; + mc.mainRenderTarget = GuiHandler.guiFramebuffer; + } + + public static void setVanillaRenderPass() { + ClientDataHolderVR.getInstance().currentPass = null; + RenderPassManager.wrp = null; + renderPassType = RenderPassType.VANILLA; + mc.mainRenderTarget = INSTANCE.vanillaRenderTarget; + } +} diff --git a/common/src/main/java/org/vivecraft/client_xr/render_pass/RenderPassType.java b/common/src/main/java/org/vivecraft/client_xr/render_pass/RenderPassType.java new file mode 100644 index 000000000..2b731fd67 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_xr/render_pass/RenderPassType.java @@ -0,0 +1,19 @@ +package org.vivecraft.client_xr.render_pass; + +public enum RenderPassType { + VANILLA, + GUI_ONLY, + WORLD_ONLY; + + public static boolean isVanilla() { + return RenderPassManager.renderPassType == VANILLA; + } + + public static boolean isGuiOnly() { + return RenderPassManager.renderPassType == GUI_ONLY; + } + + public static boolean isWorldOnly() { + return RenderPassManager.renderPassType == WORLD_ONLY; + } +} diff --git a/common/src/main/java/org/vivecraft/client_xr/render_pass/WorldRenderPass.java b/common/src/main/java/org/vivecraft/client_xr/render_pass/WorldRenderPass.java new file mode 100644 index 000000000..b2ee6f2c2 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_xr/render_pass/WorldRenderPass.java @@ -0,0 +1,51 @@ +package org.vivecraft.client_xr.render_pass; + +import com.mojang.blaze3d.pipeline.RenderTarget; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.PostChain; +import net.minecraft.resources.ResourceLocation; +import org.vivecraft.client_vr.VRTextureTarget; + +import java.io.IOException; + +public class WorldRenderPass implements AutoCloseable { + + private static final Minecraft mc = Minecraft.getInstance(); + + public static WorldRenderPass stereoXR; + public static WorldRenderPass center; + public static WorldRenderPass mixedReality; + public static WorldRenderPass leftTelescope; + public static WorldRenderPass rightTelescope; + public static WorldRenderPass camera; + + + public final VRTextureTarget target; + public final PostChain transparencyChain; + public final PostChain outlineChain; + + public WorldRenderPass(VRTextureTarget target) throws IOException { + this.target = target; + if (Minecraft.useShaderTransparency()) { + this.transparencyChain = createPostChain(new ResourceLocation("shaders/post/vrtransparency.json"), this.target); + } else { + this.transparencyChain = null; + } + this.outlineChain = createPostChain(new ResourceLocation("shaders/post/entity_outline.json"), this.target); + } + + private static PostChain createPostChain(ResourceLocation resourceLocation, RenderTarget target) throws IOException { + PostChain postchain = new PostChain(mc.getTextureManager(), mc.getResourceManager(), target, resourceLocation); + postchain.resize(target.viewWidth, target.viewHeight); + return postchain; + } + + @Override + public void close() { + this.target.destroyBuffers(); + if (this.transparencyChain != null) { + this.transparencyChain.close(); + } + this.outlineChain.close(); + } +} diff --git a/common/src/main/java/org/vivecraft/common/APIImpl.java b/common/src/main/java/org/vivecraft/common/APIImpl.java new file mode 100644 index 000000000..ac634ec67 --- /dev/null +++ b/common/src/main/java/org/vivecraft/common/APIImpl.java @@ -0,0 +1,24 @@ +package org.vivecraft.common; + +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; +import org.vivecraft.api_beta.VivecraftAPI; +import org.vivecraft.client.VRPlayersClient; +import org.vivecraft.server.ServerVRPlayers; + +public final class APIImpl implements VivecraftAPI { + + public static final APIImpl INSTANCE = new APIImpl(); + + private APIImpl() { + } + + @Override + public boolean isVRPlayer(Player player) { + if (player instanceof ServerPlayer serverPlayer) { + return ServerVRPlayers.isVRPlayer(serverPlayer); + } + + return VRPlayersClient.getInstance().isVRPlayer(player); + } +} diff --git a/common/src/main/java/org/vivecraft/CommonDataHolder.java b/common/src/main/java/org/vivecraft/common/CommonDataHolder.java similarity index 57% rename from common/src/main/java/org/vivecraft/CommonDataHolder.java rename to common/src/main/java/org/vivecraft/common/CommonDataHolder.java index 78d110817..99855b0b8 100644 --- a/common/src/main/java/org/vivecraft/CommonDataHolder.java +++ b/common/src/main/java/org/vivecraft/common/CommonDataHolder.java @@ -1,10 +1,11 @@ -package org.vivecraft; +package org.vivecraft.common; + +import org.vivecraft.client.Xplat; public class CommonDataHolder { private static CommonDataHolder INSTANCE; - public boolean resourcePacksChanged; - public final String minecriftVerString; + public final String versionIdentifier; public CommonDataHolder() { String mcVersion = ""; @@ -15,11 +16,7 @@ public CommonDataHolder() { modVersion = version[1]; } - if (VRState.checkVR()) { - minecriftVerString = "Vivecraft " + mcVersion + " jrbudda-VR-" + Xplat.getModloader() + "-" + modVersion; - } else { - minecriftVerString = "Vivecraft " + mcVersion + " jrbudda-NONVR-" + Xplat.getModloader() + "-" + modVersion; - } + versionIdentifier = "Vivecraft-" + mcVersion + "-" + Xplat.getModloader() + "-" + modVersion; } public static CommonDataHolder getInstance() { diff --git a/common/src/main/java/org/vivecraft/common/VRServerPerms.java b/common/src/main/java/org/vivecraft/common/VRServerPerms.java new file mode 100644 index 000000000..4e766a682 --- /dev/null +++ b/common/src/main/java/org/vivecraft/common/VRServerPerms.java @@ -0,0 +1,19 @@ +package org.vivecraft.common; + +import org.vivecraft.client_vr.ClientDataHolderVR; + +public class VRServerPerms { + + public static VRServerPerms INSTANCE = new VRServerPerms(); + + public boolean noTeleportClient = true; + + public void setTeleportSupported(boolean supported) + { + this.noTeleportClient = !supported; + + if (ClientDataHolderVR.getInstance().vrPlayer != null) { + ClientDataHolderVR.getInstance().vrPlayer.updateTeleportKeys(); + } + } +} diff --git a/common/src/main/java/org/vivecraft/common/network/CommonNetworkHelper.java b/common/src/main/java/org/vivecraft/common/network/CommonNetworkHelper.java new file mode 100644 index 000000000..ccbd20616 --- /dev/null +++ b/common/src/main/java/org/vivecraft/common/network/CommonNetworkHelper.java @@ -0,0 +1,59 @@ +package org.vivecraft.common.network; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.phys.Vec3; +import org.vivecraft.common.utils.math.Quaternion; + +public class CommonNetworkHelper { + + public static final ResourceLocation CHANNEL = new ResourceLocation("vivecraft:data"); + + // maximum supported network version + public static final int MAX_SUPPORTED_NETWORK_VERSION = 0; + // minimum supported network version + public static final int MIN_SUPPORTED_NETWORK_VERSION = 0; + + public enum PacketDiscriminators { + VERSION, + REQUESTDATA, + HEADDATA, + CONTROLLER0DATA, + CONTROLLER1DATA, + WORLDSCALE, + DRAW, + MOVEMODE, + UBERPACKET, + TELEPORT, + CLIMBING, + SETTING_OVERRIDE, + HEIGHT, + ACTIVEHAND, + CRAWL, + NETWORK_VERSION, + VR_SWITCHING, + IS_VR_ACTIVE, + VR_PLAYER_STATE + } + + public static void serializeF(FriendlyByteBuf buffer, Vec3 vec3) { + buffer.writeFloat((float) vec3.x); + buffer.writeFloat((float) vec3.y); + buffer.writeFloat((float) vec3.z); + } + + public static void serialize(FriendlyByteBuf buffer, Quaternion quat) { + buffer.writeFloat(quat.w); + buffer.writeFloat(quat.x); + buffer.writeFloat(quat.y); + buffer.writeFloat(quat.z); + } + + public static Vec3 deserializeFVec3(FriendlyByteBuf buffer) { + return new Vec3(buffer.readFloat(), buffer.readFloat(), buffer.readFloat()); + } + + public static Quaternion deserializeVivecraftQuaternion(FriendlyByteBuf buffer) { + return new Quaternion(buffer.readFloat(), buffer.readFloat(), buffer.readFloat(), buffer.readFloat()); + } +} diff --git a/common/src/main/java/org/vivecraft/common/network/Pose.java b/common/src/main/java/org/vivecraft/common/network/Pose.java new file mode 100644 index 000000000..5b652f71e --- /dev/null +++ b/common/src/main/java/org/vivecraft/common/network/Pose.java @@ -0,0 +1,17 @@ +package org.vivecraft.common.network; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.phys.Vec3; +import org.vivecraft.common.utils.math.Quaternion; + +public record Pose(Vec3 position, Quaternion orientation) { + + public static Pose deserialize(FriendlyByteBuf byteBuf) { + return new Pose(CommonNetworkHelper.deserializeFVec3(byteBuf), CommonNetworkHelper.deserializeVivecraftQuaternion(byteBuf)); + } + + public void serialize(FriendlyByteBuf buffer) { + CommonNetworkHelper.serializeF(buffer, this.position); + CommonNetworkHelper.serialize(buffer, this.orientation); + } +} diff --git a/common/src/main/java/org/vivecraft/common/network/VrPlayerState.java b/common/src/main/java/org/vivecraft/common/network/VrPlayerState.java new file mode 100644 index 000000000..4129bb997 --- /dev/null +++ b/common/src/main/java/org/vivecraft/common/network/VrPlayerState.java @@ -0,0 +1,60 @@ +package org.vivecraft.common.network; + +import net.minecraft.client.Minecraft; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.phys.Vec3; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.gameplay.VRPlayer; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.common.utils.lwjgl.Matrix4f; +import org.vivecraft.common.utils.math.Quaternion; + +import java.nio.Buffer; +import java.nio.FloatBuffer; + +public record VrPlayerState(boolean seated, Pose hmd, boolean reverseHands, Pose controller0, boolean reverseHands1legacy, Pose controller1) { + + public static VrPlayerState create(VRPlayer vrPlayer) { + return new VrPlayerState( + ClientDataHolderVR.getInstance().vrSettings.seated, + hmdPose(vrPlayer), + ClientDataHolderVR.getInstance().vrSettings.reverseHands, + controllerPose(vrPlayer, 0), + ClientDataHolderVR.getInstance().vrSettings.reverseHands, + controllerPose(vrPlayer, 1) + ); + } + + private static Pose hmdPose(VRPlayer vrPlayer) { + FloatBuffer floatbuffer = vrPlayer.vrdata_world_post.hmd.getMatrix().toFloatBuffer(); + ((Buffer) floatbuffer).rewind(); + Matrix4f matrix4f = new Matrix4f(); + matrix4f.load(floatbuffer); + Vec3 vec3 = vrPlayer.vrdata_world_post.getEye(RenderPass.CENTER).getPosition().subtract(Minecraft.getInstance().player.position()); + Quaternion quaternion = new Quaternion(matrix4f); + return new Pose(vec3, quaternion); + } + + private static Pose controllerPose(VRPlayer vrPlayer, int i) { + Vec3 position = vrPlayer.vrdata_world_post.getController(i).getPosition().subtract(Minecraft.getInstance().player.position()); + FloatBuffer floatbuffer1 = vrPlayer.vrdata_world_post.getController(i).getMatrix().toFloatBuffer(); + ((Buffer) floatbuffer1).rewind(); + Matrix4f matrix4f1 = new Matrix4f(); + matrix4f1.load(floatbuffer1); + Quaternion orientation = new Quaternion(matrix4f1); + return new Pose(position, orientation); + } + + public static VrPlayerState deserialize(FriendlyByteBuf byteBuf) { + return new VrPlayerState(byteBuf.readBoolean(), Pose.deserialize(byteBuf), byteBuf.readBoolean(), Pose.deserialize(byteBuf), byteBuf.readBoolean(), Pose.deserialize(byteBuf)); + } + + public void serialize(FriendlyByteBuf buffer) { + buffer.writeBoolean(this.seated); + this.hmd.serialize(buffer); + buffer.writeBoolean(this.reverseHands); + this.controller0.serialize(buffer); + buffer.writeBoolean(this.reverseHands); + this.controller1.serialize(buffer); + } +} diff --git a/common/src/main/java/org/vivecraft/common/utils/Utils.java b/common/src/main/java/org/vivecraft/common/utils/Utils.java new file mode 100644 index 000000000..1e2f0533b --- /dev/null +++ b/common/src/main/java/org/vivecraft/common/utils/Utils.java @@ -0,0 +1,58 @@ +package org.vivecraft.common.utils; + +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.animal.SnowGolem; +import net.minecraft.world.entity.boss.enderdragon.EnderDragon; +import net.minecraft.world.entity.monster.*; +import net.minecraft.world.entity.monster.piglin.AbstractPiglin; +import net.minecraft.world.entity.npc.AbstractVillager; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; + +public class Utils { + + public static AABB getEntityHeadHitbox(Entity entity, double inflate) { + if ((entity instanceof Player player && !player.isSwimming()) || // swimming players hitbox is just a box around their butt + entity instanceof Zombie || + entity instanceof AbstractPiglin || + entity instanceof AbstractSkeleton || + entity instanceof Witch || + entity instanceof AbstractIllager || + entity instanceof Blaze || + entity instanceof Creeper || + entity instanceof EnderMan || + entity instanceof AbstractVillager || + entity instanceof SnowGolem || + entity instanceof Vex || + entity instanceof Strider){ + + Vec3 headpos = entity.getEyePosition(); + double headsize = entity.getBbWidth()*0.5; + if (((LivingEntity) entity).isBaby()) { + // babies have big heads + headsize *= 1.20; + } + return new AABB(headpos.subtract(headsize,headsize-inflate,headsize), headpos.add(headsize,headsize+inflate,headsize)).inflate(inflate); + + } else if (!(entity instanceof EnderDragon) // no ender dragon, the code doesn't work for it + && entity instanceof LivingEntity livingEntity){ + + float yrot = -(livingEntity.yBodyRot) * 0.017453292F; + // offset head in entity rotation + Vec3 headpos = entity.getEyePosition() + .add(new Vec3(Mth.sin(yrot), 0, Mth.cos(yrot)) + .scale(livingEntity.getBbWidth()*0.5F)); + + double headsize = livingEntity.getBbWidth()*0.25; + if (livingEntity.isBaby()) { + // babies have big heads + headsize *= 1.5; + } + return new AABB(headpos.subtract(headsize,headsize,headsize), headpos.add(headsize,headsize,headsize)).inflate(inflate*0.25).expandTowards(headpos.subtract(entity.position()).scale(inflate)); + } + return null; + } +} diff --git a/common/src/main/java/org/vivecraft/utils/lwjgl/Matrix.java b/common/src/main/java/org/vivecraft/common/utils/lwjgl/Matrix.java similarity index 76% rename from common/src/main/java/org/vivecraft/utils/lwjgl/Matrix.java rename to common/src/main/java/org/vivecraft/common/utils/lwjgl/Matrix.java index ffba6c2e8..a3ef0a107 100644 --- a/common/src/main/java/org/vivecraft/utils/lwjgl/Matrix.java +++ b/common/src/main/java/org/vivecraft/common/utils/lwjgl/Matrix.java @@ -1,14 +1,10 @@ -package org.vivecraft.utils.lwjgl; +package org.vivecraft.common.utils.lwjgl; -import java.io.Serializable; import java.nio.FloatBuffer; -public abstract class Matrix implements Serializable +@Deprecated +public abstract class Matrix { - protected Matrix() - { - } - public abstract Matrix setIdentity(); public abstract Matrix invert(); diff --git a/common/src/main/java/org/vivecraft/utils/lwjgl/Matrix2f.java b/common/src/main/java/org/vivecraft/common/utils/lwjgl/Matrix2f.java similarity index 96% rename from common/src/main/java/org/vivecraft/utils/lwjgl/Matrix2f.java rename to common/src/main/java/org/vivecraft/common/utils/lwjgl/Matrix2f.java index cc2184b35..ce2f48832 100644 --- a/common/src/main/java/org/vivecraft/utils/lwjgl/Matrix2f.java +++ b/common/src/main/java/org/vivecraft/common/utils/lwjgl/Matrix2f.java @@ -1,11 +1,10 @@ -package org.vivecraft.utils.lwjgl; +package org.vivecraft.common.utils.lwjgl; -import java.io.Serializable; import java.nio.FloatBuffer; -public class Matrix2f extends Matrix implements Serializable +@Deprecated +public class Matrix2f extends Matrix { - private static final long serialVersionUID = 1L; public float m00; public float m01; public float m10; diff --git a/common/src/main/java/org/vivecraft/utils/lwjgl/Matrix3f.java b/common/src/main/java/org/vivecraft/common/utils/lwjgl/Matrix3f.java similarity index 98% rename from common/src/main/java/org/vivecraft/utils/lwjgl/Matrix3f.java rename to common/src/main/java/org/vivecraft/common/utils/lwjgl/Matrix3f.java index 28962a829..6ce2ba39f 100644 --- a/common/src/main/java/org/vivecraft/utils/lwjgl/Matrix3f.java +++ b/common/src/main/java/org/vivecraft/common/utils/lwjgl/Matrix3f.java @@ -1,11 +1,10 @@ -package org.vivecraft.utils.lwjgl; +package org.vivecraft.common.utils.lwjgl; -import java.io.Serializable; import java.nio.FloatBuffer; -public class Matrix3f extends Matrix implements Serializable +@Deprecated +public class Matrix3f extends Matrix { - private static final long serialVersionUID = 1L; public float m00; public float m01; public float m02; diff --git a/common/src/main/java/org/vivecraft/utils/lwjgl/Matrix4f.java b/common/src/main/java/org/vivecraft/common/utils/lwjgl/Matrix4f.java similarity index 99% rename from common/src/main/java/org/vivecraft/utils/lwjgl/Matrix4f.java rename to common/src/main/java/org/vivecraft/common/utils/lwjgl/Matrix4f.java index 69e83122f..d574d5159 100644 --- a/common/src/main/java/org/vivecraft/utils/lwjgl/Matrix4f.java +++ b/common/src/main/java/org/vivecraft/common/utils/lwjgl/Matrix4f.java @@ -1,11 +1,10 @@ -package org.vivecraft.utils.lwjgl; +package org.vivecraft.common.utils.lwjgl; -import java.io.Serializable; import java.nio.FloatBuffer; -public class Matrix4f extends Matrix implements Serializable +@Deprecated +public class Matrix4f extends Matrix { - private static final long serialVersionUID = 1L; public float m00; public float m01; public float m02; diff --git a/common/src/main/java/org/vivecraft/utils/lwjgl/Vector.java b/common/src/main/java/org/vivecraft/common/utils/lwjgl/Vector.java similarity index 76% rename from common/src/main/java/org/vivecraft/utils/lwjgl/Vector.java rename to common/src/main/java/org/vivecraft/common/utils/lwjgl/Vector.java index 343c1aa81..a6f01a5d2 100644 --- a/common/src/main/java/org/vivecraft/utils/lwjgl/Vector.java +++ b/common/src/main/java/org/vivecraft/common/utils/lwjgl/Vector.java @@ -1,9 +1,9 @@ -package org.vivecraft.utils.lwjgl; +package org.vivecraft.common.utils.lwjgl; -import java.io.Serializable; import java.nio.FloatBuffer; -public abstract class Vector implements Serializable, ReadableVector +@Deprecated +public abstract class Vector { protected Vector() { @@ -11,7 +11,7 @@ protected Vector() public final float length() { - return (float)Math.sqrt((double)this.lengthSquared()); + return (float)Math.sqrt(this.lengthSquared()); } public abstract float lengthSquared(); diff --git a/common/src/main/java/org/vivecraft/utils/lwjgl/Vector2f.java b/common/src/main/java/org/vivecraft/common/utils/lwjgl/Vector2f.java similarity index 89% rename from common/src/main/java/org/vivecraft/utils/lwjgl/Vector2f.java rename to common/src/main/java/org/vivecraft/common/utils/lwjgl/Vector2f.java index b7002547b..efdf83f9c 100644 --- a/common/src/main/java/org/vivecraft/utils/lwjgl/Vector2f.java +++ b/common/src/main/java/org/vivecraft/common/utils/lwjgl/Vector2f.java @@ -1,11 +1,10 @@ -package org.vivecraft.utils.lwjgl; +package org.vivecraft.common.utils.lwjgl; -import java.io.Serializable; import java.nio.FloatBuffer; -public class Vector2f extends Vector implements Serializable, ReadableVector2f, WritableVector2f +@Deprecated +public class Vector2f extends Vector { - private static final long serialVersionUID = 1L; public float x; public float y; @@ -13,11 +12,6 @@ public Vector2f() { } - public Vector2f(ReadableVector2f src) - { - this.set(src); - } - public Vector2f(float x, float y) { this.set(x, y); @@ -29,13 +23,6 @@ public void set(float x, float y) this.y = y; } - public Vector2f set(ReadableVector2f src) - { - this.x = src.getX(); - this.y = src.getY(); - return this; - } - public float lengthSquared() { return this.x * this.x + this.y * this.y; diff --git a/common/src/main/java/org/vivecraft/utils/lwjgl/Vector3f.java b/common/src/main/java/org/vivecraft/common/utils/lwjgl/Vector3f.java similarity index 90% rename from common/src/main/java/org/vivecraft/utils/lwjgl/Vector3f.java rename to common/src/main/java/org/vivecraft/common/utils/lwjgl/Vector3f.java index 2efbd285a..0c7d05678 100644 --- a/common/src/main/java/org/vivecraft/utils/lwjgl/Vector3f.java +++ b/common/src/main/java/org/vivecraft/common/utils/lwjgl/Vector3f.java @@ -1,11 +1,10 @@ -package org.vivecraft.utils.lwjgl; +package org.vivecraft.common.utils.lwjgl; -import java.io.Serializable; import java.nio.FloatBuffer; -public class Vector3f extends Vector implements Serializable, ReadableVector3f, WritableVector3f +@Deprecated +public class Vector3f extends Vector { - private static final long serialVersionUID = 1L; public float x; public float y; public float z; @@ -14,11 +13,6 @@ public Vector3f() { } - public Vector3f(ReadableVector3f src) - { - this.set(src); - } - public Vector3f(float x, float y, float z) { this.set(x, y, z); @@ -37,14 +31,6 @@ public void set(float x, float y, float z) this.z = z; } - public Vector3f set(ReadableVector3f src) - { - this.x = src.getX(); - this.y = src.getY(); - this.z = src.getZ(); - return this; - } - public float lengthSquared() { return this.x * this.x + this.y * this.y + this.z * this.z; diff --git a/common/src/main/java/org/vivecraft/utils/lwjgl/Vector4f.java b/common/src/main/java/org/vivecraft/common/utils/lwjgl/Vector4f.java similarity index 90% rename from common/src/main/java/org/vivecraft/utils/lwjgl/Vector4f.java rename to common/src/main/java/org/vivecraft/common/utils/lwjgl/Vector4f.java index 8165b0fa3..e45b9d37d 100644 --- a/common/src/main/java/org/vivecraft/utils/lwjgl/Vector4f.java +++ b/common/src/main/java/org/vivecraft/common/utils/lwjgl/Vector4f.java @@ -1,11 +1,10 @@ -package org.vivecraft.utils.lwjgl; +package org.vivecraft.common.utils.lwjgl; -import java.io.Serializable; import java.nio.FloatBuffer; -public class Vector4f extends Vector implements Serializable, ReadableVector4f, WritableVector4f +@Deprecated +public class Vector4f extends Vector { - private static final long serialVersionUID = 1L; public float x; public float y; public float z; @@ -15,11 +14,6 @@ public Vector4f() { } - public Vector4f(ReadableVector4f src) - { - this.set(src); - } - public Vector4f(float x, float y, float z, float w) { this.set(x, y, z, w); @@ -46,15 +40,6 @@ public void set(float x, float y, float z, float w) this.w = w; } - public Vector4f set(ReadableVector4f src) - { - this.x = src.getX(); - this.y = src.getY(); - this.z = src.getZ(); - this.w = src.getW(); - return this; - } - public float lengthSquared() { return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w; diff --git a/common/src/main/java/org/vivecraft/utils/math/Angle.java b/common/src/main/java/org/vivecraft/common/utils/math/Angle.java similarity index 97% rename from common/src/main/java/org/vivecraft/utils/math/Angle.java rename to common/src/main/java/org/vivecraft/common/utils/math/Angle.java index 2bd99b045..c1f1d9569 100644 --- a/common/src/main/java/org/vivecraft/utils/math/Angle.java +++ b/common/src/main/java/org/vivecraft/common/utils/math/Angle.java @@ -1,6 +1,6 @@ -package org.vivecraft.utils.math; +package org.vivecraft.common.utils.math; -import org.vivecraft.utils.lwjgl.Matrix4f; +import org.vivecraft.common.utils.lwjgl.Matrix4f; public class Angle { diff --git a/common/src/main/java/org/vivecraft/utils/math/Axis.java b/common/src/main/java/org/vivecraft/common/utils/math/Axis.java similarity index 89% rename from common/src/main/java/org/vivecraft/utils/math/Axis.java rename to common/src/main/java/org/vivecraft/common/utils/math/Axis.java index 7e73fbef3..1d5c16fd8 100644 --- a/common/src/main/java/org/vivecraft/utils/math/Axis.java +++ b/common/src/main/java/org/vivecraft/common/utils/math/Axis.java @@ -1,4 +1,4 @@ -package org.vivecraft.utils.math; +package org.vivecraft.common.utils.math; public enum Axis { diff --git a/common/src/main/java/org/vivecraft/utils/math/Convert.java b/common/src/main/java/org/vivecraft/common/utils/math/Convert.java similarity index 97% rename from common/src/main/java/org/vivecraft/utils/math/Convert.java rename to common/src/main/java/org/vivecraft/common/utils/math/Convert.java index d0c8f0e58..8b3cd219b 100644 --- a/common/src/main/java/org/vivecraft/utils/math/Convert.java +++ b/common/src/main/java/org/vivecraft/common/utils/math/Convert.java @@ -1,4 +1,4 @@ -package org.vivecraft.utils.math; +package org.vivecraft.common.utils.math; import java.nio.Buffer; import java.nio.FloatBuffer; @@ -34,7 +34,7 @@ public static Matrix matrix(FloatBuffer floatBuffer) return matrix(afloat); } - public static Matrix matrix(org.vivecraft.utils.lwjgl.Matrix4f matrix4f) + public static Matrix matrix(org.vivecraft.common.utils.lwjgl.Matrix4f matrix4f) { FloatBuffer floatbuffer = FloatBuffer.allocate(16); matrix4f.store(floatbuffer); diff --git a/common/src/main/java/org/vivecraft/utils/math/Matrix4f.java b/common/src/main/java/org/vivecraft/common/utils/math/Matrix4f.java similarity index 99% rename from common/src/main/java/org/vivecraft/utils/math/Matrix4f.java rename to common/src/main/java/org/vivecraft/common/utils/math/Matrix4f.java index 4295ec965..6d7c8f908 100644 --- a/common/src/main/java/org/vivecraft/utils/math/Matrix4f.java +++ b/common/src/main/java/org/vivecraft/common/utils/math/Matrix4f.java @@ -1,10 +1,11 @@ -package org.vivecraft.utils.math; +package org.vivecraft.common.utils.math; import java.nio.Buffer; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; +@Deprecated public class Matrix4f { public float[][] M = new float[4][4]; diff --git a/common/src/main/java/org/vivecraft/utils/math/Quaternion.java b/common/src/main/java/org/vivecraft/common/utils/math/Quaternion.java similarity index 95% rename from common/src/main/java/org/vivecraft/utils/math/Quaternion.java rename to common/src/main/java/org/vivecraft/common/utils/math/Quaternion.java index e5ef4efd9..53303cce7 100644 --- a/common/src/main/java/org/vivecraft/utils/math/Quaternion.java +++ b/common/src/main/java/org/vivecraft/common/utils/math/Quaternion.java @@ -1,9 +1,10 @@ -package org.vivecraft.utils.math; +package org.vivecraft.common.utils.math; import net.minecraft.world.phys.Vec3; -import org.vivecraft.utils.Utils; -import org.vivecraft.utils.lwjgl.Matrix3f; +import org.vivecraft.common.utils.lwjgl.Matrix3f; +import org.vivecraft.client.utils.Utils; +@Deprecated public class Quaternion { public float w; @@ -101,7 +102,7 @@ public Quaternion(Matrix3f matrix) this(matrix.m00, matrix.m01, matrix.m02, matrix.m10, matrix.m11, matrix.m12, matrix.m20, matrix.m21, matrix.m22); } - public Quaternion(org.vivecraft.utils.lwjgl.Matrix4f matrix) + public Quaternion(org.vivecraft.common.utils.lwjgl.Matrix4f matrix) { this(matrix.m00, matrix.m01, matrix.m02, matrix.m10, matrix.m11, matrix.m12, matrix.m20, matrix.m21, matrix.m22); } @@ -274,7 +275,7 @@ public Quaternion rotate(Axis axis, float degrees, boolean local) } else { - org.vivecraft.utils.lwjgl.Matrix4f matrix4f = this.getMatrix(); + org.vivecraft.common.utils.lwjgl.Matrix4f matrix4f = this.getMatrix(); matrix4f.rotate((float)Math.toRadians((double)degrees), Utils.convertVector(axis.getVector())); return new Quaternion(matrix4f); } @@ -289,9 +290,9 @@ public Quaternion multiply(Quaternion other) return new Quaternion(f, f1, f2, f3); } - public org.vivecraft.utils.lwjgl.Matrix4f getMatrix() + public org.vivecraft.common.utils.lwjgl.Matrix4f getMatrix() { - org.vivecraft.utils.lwjgl.Matrix4f matrix4f = new org.vivecraft.utils.lwjgl.Matrix4f(); + org.vivecraft.common.utils.lwjgl.Matrix4f matrix4f = new org.vivecraft.common.utils.lwjgl.Matrix4f(); float f = this.w * this.w; float f1 = this.x * this.x; float f2 = this.y * this.y; diff --git a/common/src/main/java/org/vivecraft/utils/math/Vector2.java b/common/src/main/java/org/vivecraft/common/utils/math/Vector2.java similarity index 97% rename from common/src/main/java/org/vivecraft/utils/math/Vector2.java rename to common/src/main/java/org/vivecraft/common/utils/math/Vector2.java index b4d880f79..f91b3c1c8 100644 --- a/common/src/main/java/org/vivecraft/utils/math/Vector2.java +++ b/common/src/main/java/org/vivecraft/common/utils/math/Vector2.java @@ -1,7 +1,8 @@ -package org.vivecraft.utils.math; +package org.vivecraft.common.utils.math; -import org.vivecraft.utils.lwjgl.Vector2f; +import org.vivecraft.common.utils.lwjgl.Vector2f; +@Deprecated public class Vector2 { protected float x; diff --git a/common/src/main/java/org/vivecraft/utils/math/Vector3.java b/common/src/main/java/org/vivecraft/common/utils/math/Vector3.java similarity index 97% rename from common/src/main/java/org/vivecraft/utils/math/Vector3.java rename to common/src/main/java/org/vivecraft/common/utils/math/Vector3.java index a84c7627e..0f22677be 100644 --- a/common/src/main/java/org/vivecraft/utils/math/Vector3.java +++ b/common/src/main/java/org/vivecraft/common/utils/math/Vector3.java @@ -1,10 +1,11 @@ -package org.vivecraft.utils.math; +package org.vivecraft.common.utils.math; import net.minecraft.world.phys.Vec3; -import org.vivecraft.utils.lwjgl.Matrix4f; -import org.vivecraft.utils.lwjgl.Matrix3f; -import org.vivecraft.utils.lwjgl.Vector3f; +import org.vivecraft.common.utils.lwjgl.Matrix3f; +import org.vivecraft.common.utils.lwjgl.Matrix4f; +import org.vivecraft.common.utils.lwjgl.Vector3f; +@Deprecated public class Vector3 { public float x; diff --git a/common/src/main/java/org/vivecraft/extensions/LibraryExtension.java b/common/src/main/java/org/vivecraft/extensions/LibraryExtension.java deleted file mode 100644 index 05f2d9a83..000000000 --- a/common/src/main/java/org/vivecraft/extensions/LibraryExtension.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.vivecraft.extensions; - -public interface LibraryExtension { - -} diff --git a/common/src/main/java/org/vivecraft/gui/framework/GuiVROptionSlider.java b/common/src/main/java/org/vivecraft/gui/framework/GuiVROptionSlider.java deleted file mode 100644 index 0d43ef147..000000000 --- a/common/src/main/java/org/vivecraft/gui/framework/GuiVROptionSlider.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.vivecraft.gui.framework; - -import org.vivecraft.ClientDataHolder; -import org.vivecraft.settings.VRSettings; - -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; - -import net.minecraft.client.Minecraft; -import net.minecraft.network.chat.TextComponent; -import net.minecraft.util.Mth; - -public class GuiVROptionSlider extends GuiVROptionButton -{ - private double sliderValue = 1.0D; - public boolean dragging; - private final double minValue; - private final double maxValue; - - public GuiVROptionSlider(int id, int x, int y, int width, int height, VRSettings.VrOptions option, double min, double max) - { - super(id, x, y, width, height, option, "", (p) -> - { - }); - this.minValue = min; - this.maxValue = max; - Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); - this.sliderValue = this.enumOptions.normalizeValue(dataholder.vrSettings.getOptionFloatValue(this.enumOptions)); - this.setMessage(new TextComponent(dataholder.vrSettings.getButtonDisplayString(this.enumOptions))); - } - - public GuiVROptionSlider(int id, int x, int y, VRSettings.VrOptions option, double min, double max) - { - this(id, x, y, 150, 20, option, min, max); - } - - protected int getHoverState(boolean mouseOver) - { - return 0; - } - - protected void onDrag(double pMouseX, double p_93637_, double pMouseY, double p_93639_) - { - this.setValueFromMouse(pMouseX); - super.onDrag(pMouseX, p_93637_, pMouseY, p_93639_); - } - - private void setValueFromMouse(double p_setValueFromMouse_1_) - { - Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); - this.sliderValue = (double)((float)(p_setValueFromMouse_1_ - (double)(this.x + 4)) / (float)(this.width - 8)); - this.sliderValue = Mth.clamp(this.sliderValue, 0.0D, 1.0D); - double d0 = this.enumOptions.denormalizeValue((float)this.sliderValue); - dataholder.vrSettings.setOptionFloatValue(this.enumOptions, (float)d0); - this.sliderValue = this.enumOptions.normalizeValue((float)d0); - this.setMessage(new TextComponent(dataholder.vrSettings.getButtonDisplayString(this.enumOptions))); - } - - protected void renderBg(PoseStack pMatrixStack, Minecraft pMinecraft, int pMouseX, int pMouseY) - { - if (this.visible) - { - pMinecraft.getTextureManager().bindForSetup(WIDGETS_LOCATION); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - int i = (this.isHoveredOrFocused() ? 2 : 1) * 20; - this.blit(pMatrixStack, this.x + (int)(this.sliderValue * (double)(this.width - 8)), this.y, 0, 46 + i, 4, 20); - this.blit(pMatrixStack, this.x + (int)(this.sliderValue * (double)(this.width - 8)) + 4, this.y, 196, 46 + i, 4, 20); - } - } - - public void onClick(double pMouseX, double p_93635_) - { - this.sliderValue = (pMouseX - (double)(this.x + 4)) / (double)(this.width - 8); - this.sliderValue = Mth.clamp(this.sliderValue, 0.0D, 1.0D); - Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); - dataholder.vrSettings.setOptionFloatValue(this.enumOptions, (float)this.enumOptions.denormalizeValue((float)this.sliderValue)); - this.setMessage(new TextComponent(dataholder.vrSettings.getButtonDisplayString(this.enumOptions))); - this.dragging = true; - } - - protected int getYImage(boolean pIsHovered) - { - return 0; - } - - public void onRelease(double pMouseX, double p_93670_) - { - this.dragging = false; - } -} diff --git a/common/src/main/java/org/vivecraft/gui/settings/GuiMenuWorldSettings.java b/common/src/main/java/org/vivecraft/gui/settings/GuiMenuWorldSettings.java deleted file mode 100644 index 45e94dd32..000000000 --- a/common/src/main/java/org/vivecraft/gui/settings/GuiMenuWorldSettings.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.vivecraft.gui.settings; - -import org.vivecraft.gui.framework.GuiVROptionsBase; -import org.vivecraft.gui.framework.VROptionEntry; -import org.vivecraft.settings.VRSettings; - -import net.minecraft.client.gui.screens.Screen; - -public class GuiMenuWorldSettings extends GuiVROptionsBase -{ - private VROptionEntry[] miscSettings = new VROptionEntry[] { - new VROptionEntry(VRSettings.VrOptions.MENU_WORLD_SELECTION), -// new VROptionEntry("vivecraft.gui.menuworld.refresh", (button, mousePos) -> { -// if (this.dataholder.menuWorldRenderer.getWorld() != null) -// { -// try -// { -// this.dataholder.menuWorldRenderer.destroy(); -// this.dataholder.menuWorldRenderer.prepare(); -// } -// catch (Exception exception) -// { -// exception.printStackTrace(); -// } -// } -// -// return true; -// }), -// new VROptionEntry(VRSettings.VrOptions.DUMMY), new VROptionEntry("vivecraft.gui.menuworld.loadnew", (button, mousePos) -> { -// try { -// if (this.dataholder.menuWorldRenderer.isReady()) -// { -// this.dataholder.menuWorldRenderer.destroy(); -// } -// -// this.dataholder.menuWorldRenderer.init(); -// } -// catch (Exception exception) -// { -// exception.printStackTrace(); -// } -// -// return true; -// }) - }; - - public GuiMenuWorldSettings(Screen guiScreen) - { - super(guiScreen); - } - - public void init() - { - this.vrTitle = "vivecraft.options.screen.menuworld"; - super.init(this.miscSettings, true); - super.addDefaultButtons(); - } -} diff --git a/common/src/main/java/org/vivecraft/gui/settings/GuiVRControls.java b/common/src/main/java/org/vivecraft/gui/settings/GuiVRControls.java deleted file mode 100644 index a99edaeb8..000000000 --- a/common/src/main/java/org/vivecraft/gui/settings/GuiVRControls.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.vivecraft.gui.settings; - -import org.vivecraft.gui.framework.GuiVROptionsBase; -import org.vivecraft.gui.framework.VROptionEntry; -import org.vivecraft.settings.VRSettings; - -import com.mojang.blaze3d.vertex.PoseStack; - -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.network.chat.TranslatableComponent; - -public class GuiVRControls extends GuiVROptionsBase -{ - private static VROptionEntry[] controlsSettings = new VROptionEntry[] { - new VROptionEntry(VRSettings.VrOptions.DUMMY, true), - new VROptionEntry(VRSettings.VrOptions.DUMMY, true), - new VROptionEntry(VRSettings.VrOptions.DUMMY, true), - new VROptionEntry(VRSettings.VrOptions.DUMMY, true), - new VROptionEntry(VRSettings.VrOptions.DUMMY, true), - new VROptionEntry(VRSettings.VrOptions.DUMMY, true), - new VROptionEntry(VRSettings.VrOptions.THIRDPERSON_ITEMTRANSFORMS) - }; - - public GuiVRControls(Screen par1GuiScreen) - { - super(par1GuiScreen); - } - - public void init() - { - this.vrTitle = "vivecraft.options.screen.controls"; - super.init(controlsSettings, true); - super.addDefaultButtons(); - } -} diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/audio/Library.java.patch b/common/src/main/java/org/vivecraft/mixin/blaze3d/audio/Library.java.patch deleted file mode 100644 index c7230acb7..000000000 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/audio/Library.java.patch +++ /dev/null @@ -1,144 +0,0 @@ ---- a/com/mojang/blaze3d/audio/Library.java -+++ b/com/mojang/blaze3d/audio/Library.java -@@ -1,7 +1,9 @@ - package com.mojang.blaze3d.audio; - - import com.google.common.collect.Sets; -+import java.nio.Buffer; - import java.nio.IntBuffer; -+import java.util.ArrayList; - import java.util.Collections; - import java.util.List; - import java.util.Objects; -@@ -9,9 +11,11 @@ - import java.util.Set; - import javax.annotation.Nullable; - import net.minecraft.SharedConstants; -+import net.minecraft.client.Minecraft; - import net.minecraft.util.Mth; - import org.apache.logging.log4j.LogManager; - import org.apache.logging.log4j.Logger; -+import org.lwjgl.BufferUtils; - import org.lwjgl.openal.AL; - import org.lwjgl.openal.AL10; - import org.lwjgl.openal.ALC; -@@ -20,6 +24,7 @@ - import org.lwjgl.openal.ALCCapabilities; - import org.lwjgl.openal.ALCapabilities; - import org.lwjgl.openal.ALUtil; -+import org.lwjgl.openal.SOFTHRTF; - import org.lwjgl.system.MemoryStack; - - public class Library -@@ -58,6 +63,7 @@ - private Library.ChannelPool staticChannels = EMPTY; - private Library.ChannelPool streamingChannels = EMPTY; - private final Listener listener = new Listener(); -+ public static List hrtfList = new ArrayList<>(); - - public Library() - { -@@ -89,6 +95,103 @@ - this.streamingChannels = new Library.CountingChannelPool(j); - ALCapabilities alcapabilities = AL.createCapabilities(alccapabilities); - OpenAlUtil.checkALError("Initialization"); -+ hrtfList.clear(); -+ -+ if (alccapabilities.ALC_SOFT_HRTF) -+ { -+ int l = ALC10.alcGetInteger(this.currentDevice, 6548); -+ -+ if (l > 0) -+ { -+ LOGGER.info("Available HRTFs:"); -+ -+ for (int i1 = 0; i1 < l; ++i1) -+ { -+ String s = Objects.requireNonNull(SOFTHRTF.alcGetStringiSOFT(this.currentDevice, 6549, i1)); -+ hrtfList.add(s); -+ LOGGER.info("{}: {}", i1, s); -+ } -+ -+ int k1 = Minecraft.getInstance().vrSettings.hrtfSelection; -+ int l1; -+ -+ if (k1 == -1) -+ { -+ l1 = 0; -+ } -+ else -+ { -+ l1 = 1; -+ } -+ -+ IntBuffer intbuffer = BufferUtils.createIntBuffer(10).put(6546).put(l1); -+ -+ if (k1 != -1) -+ { -+ if (k1 > 0 && k1 <= hrtfList.size()) -+ { -+ LOGGER.info("Using HRTF: {}", hrtfList.get(k1 - 1)); -+ intbuffer.put(6550).put(k1 - 1); -+ } -+ else -+ { -+ if (k1 > hrtfList.size()) -+ { -+ LOGGER.warn("Invalid HRTF index: {}", (int)k1); -+ } -+ -+ LOGGER.info("Using default HRTF"); -+ } -+ } -+ else -+ { -+ LOGGER.info("Disabling HRTF"); -+ } -+ -+ ((Buffer)intbuffer.put(0)).flip(); -+ SOFTHRTF.alcResetDeviceSOFT(this.currentDevice, intbuffer); -+ -+ if (!OpenAlUtil.checkALError("HRTF initialization")) -+ { -+ LOGGER.info("HRTF initialized."); -+ int j1 = ALC10.alcGetInteger(this.currentDevice, 6547); -+ -+ switch (j1) -+ { -+ case 0: -+ LOGGER.info("HRTF status: disabled"); -+ break; -+ -+ case 1: -+ LOGGER.info("HRTF status: enabled"); -+ break; -+ -+ case 2: -+ LOGGER.info("HRTF status: denied"); -+ break; -+ -+ case 3: -+ LOGGER.info("HRTF status: required"); -+ break; -+ -+ case 4: -+ LOGGER.info("HRTF status: headphones detected"); -+ break; -+ -+ case 5: -+ LOGGER.info("HRTF status: unsupported format"); -+ } -+ } -+ } -+ else -+ { -+ LOGGER.warn("No HRTFs found."); -+ } -+ } -+ else -+ { -+ LOGGER.warn("ALC_SOFT_HRTF is not supported."); -+ } - - if (!alcapabilities.AL_EXT_source_distance_model) - { diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/MainTarget.java.patch b/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/MainTarget.java.patch deleted file mode 100644 index e25f6716c..000000000 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/MainTarget.java.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- a/com/mojang/blaze3d/pipeline/MainTarget.java -+++ b/com/mojang/blaze3d/pipeline/MainTarget.java -@@ -10,9 +10,9 @@ - - public class MainTarget extends RenderTarget - { -- public static final int DEFAULT_WIDTH = 854; -- public static final int DEFAULT_HEIGHT = 480; -- static final MainTarget.Dimension DEFAULT_DIMENSIONS = new MainTarget.Dimension(854, 480); -+ public static final int DEFAULT_WIDTH = 1280; -+ public static final int DEFAULT_HEIGHT = 720; -+ static final MainTarget.Dimension DEFAULT_DIMENSIONS = new MainTarget.Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); - - public MainTarget(int pWidth, int pHeight) - { diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/MainTargetMixin.java b/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/MainTargetMixin.java deleted file mode 100644 index 73143013b..000000000 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/MainTargetMixin.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.vivecraft.mixin.blaze3d.pipeline; - -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.Shadow; - -import com.mojang.blaze3d.pipeline.MainTarget; - -@Mixin(MainTarget.class) -public abstract class MainTargetMixin { - - - @Shadow - @Final - @Mutable - static MainTarget.Dimension DEFAULT_DIMENSIONS = new MainTarget.Dimension(1280, 720); -} diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/MainTargetVRMixin.java b/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/MainTargetVRMixin.java deleted file mode 100644 index 5bcf3af2e..000000000 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/MainTargetVRMixin.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.vivecraft.mixin.blaze3d.pipeline; - -import com.mojang.blaze3d.pipeline.MainTarget; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(MainTarget.class) -public class MainTargetVRMixin { - // This parameter that gets set makes the texture incomplete on GLES :/ - @Redirect(method = "createFrameBuffer", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;_texParameter(III)V", ordinal = 4)) - private void stopDepthParameter(int i, int j, int k) { - - } -} diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/RenderTarget.java.patch b/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/RenderTarget.java.patch deleted file mode 100644 index 1ec5df6bd..000000000 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/RenderTarget.java.patch +++ /dev/null @@ -1,340 +0,0 @@ ---- a/com/mojang/blaze3d/pipeline/RenderTarget.java -+++ b/com/mojang/blaze3d/pipeline/RenderTarget.java -@@ -11,6 +11,11 @@ - import com.mojang.blaze3d.vertex.VertexFormat; - import com.mojang.math.Matrix4f; - import java.nio.IntBuffer; -+ -+import org.lwjgl.opengl.GL11; -+import org.lwjgl.opengl.GL30; -+import org.lwjgl.opengl.GL43; -+ - import net.minecraft.Util; - import net.minecraft.client.Minecraft; - import net.minecraft.client.renderer.ShaderInstance; -@@ -36,8 +41,19 @@ - return new float[]{1.0F, 1.0F, 1.0F, 0.0F}; - }); - public int filterMode; -- private boolean stencilEnabled = false; -- -+ public boolean stencilEnabled = true; -+ //Vivecraft -+ public static final int NO_TEXTURE_ID = -1; -+ private int texid = -1; -+ public String name = "Default"; -+ private boolean linearFilter; -+ public int getDepthBufferId() { -+ return depthBufferId; -+ } -+ public void setDepthBufferId(int depthBufferId) { -+ this.depthBufferId = depthBufferId; -+ } -+ //// - public RenderTarget(boolean pUseDepth) - { - this.useDepth = pUseDepth; -@@ -143,14 +159,26 @@ - else - { - this.frameBufferId = GlStateManager.glGenFramebuffers(); -- this.colorTextureId = TextureUtil.generateTextureId(); -- -+ -+ //Vivecraft -+ //this.colorTextureId = TextureUtil.generateTextureId(); -+ -+ if (this.texid == -1) -+ { -+ this.colorTextureId = TextureUtil.generateTextureId(); -+ } -+ else -+ { -+ this.colorTextureId = this.texid; -+ } -+ // -+ - if (this.useDepth) - { - this.depthBufferId = TextureUtil.generateTextureId(); - GlStateManager._bindTexture(this.depthBufferId); -- GlStateManager._texParameter(3553, 10241, 9728); -- GlStateManager._texParameter(3553, 10240, 9728); -+ GlStateManager._texParameter(3553, 10241, linearFilter ? GL11.GL_LINEAR : 9728); -+ GlStateManager._texParameter(3553, 10240, linearFilter ? GL11.GL_LINEAR : 9728); - GlStateManager._texParameter(3553, 34892, 0); - GlStateManager._texParameter(3553, 10242, 33071); - GlStateManager._texParameter(3553, 10243, 33071); -@@ -165,10 +193,14 @@ - } - } - -- this.setFilterMode(9728); -+ if (linearFilter) -+ this.setFilterMode(GL11.GL_LINEAR); -+ else -+ this.setFilterMode(9728); -+ - GlStateManager._bindTexture(this.colorTextureId); - GlStateManager._texParameter(3553, 10242, 33071); -- GlStateManager._texParameter(3553, 10243, 33071); -+ GlStateManager._texParameter(3553, 10243, 33071); //wut r u - GlStateManager._texImage2D(3553, 0, 32856, this.width, this.height, 0, 6408, 5121, (IntBuffer)null); - GlStateManager._glBindFramebuffer(36160, this.frameBufferId); - GlStateManager._glFramebufferTexture2D(36160, 36064, 3553, this.colorTextureId, 0); -@@ -253,6 +285,10 @@ - throw new RuntimeException("glCheckFramebufferStatus returned unknown status:" + i); - } - } -+ else -+ { -+ System.out.println("Framebuffer complete " + this.name); -+ } - } - - public void bindRead() -@@ -276,17 +312,19 @@ - { - RenderSystem.recordRenderCall(() -> - { -- this._bindWrite(pSetViewport); -+ this._bindWrite(true); - }); - } - else - { -- this._bindWrite(pSetViewport); -+ this._bindWrite(true); - } - } - - private void _bindWrite(boolean pSetViewport) - { -+ //vivecraft its easier to just always set the viewport. -+ pSetViewport = true; - if (GLX.isUsingFBOs()) - { - RenderSystem.assertOnRenderThreadOrInit(); -@@ -329,8 +367,8 @@ - { - this.blitToScreen(pWidth, pHeight, true); - } -- -- public void blitToScreen(int pWidth, int pHeight, boolean pDisableBlend) -+ //Vivecraft add x/y offsets -+ public void blitToScreen(int left, int width, int height, int top, boolean disableBlend, float xCropFactor, float yCropFactor, boolean keepAspect) - { - RenderSystem.assertOnGameThreadOrInit(); - -@@ -338,16 +376,18 @@ - { - RenderSystem.recordRenderCall(() -> - { -- this._blitToScreen(pWidth, pHeight, pDisableBlend); -+ this._blitToScreen(left, width, height, top, disableBlend, xCropFactor, yCropFactor, keepAspect); - }); - } - else - { -- this._blitToScreen(pWidth, pHeight, pDisableBlend); -+ this._blitToScreen(left, width, height, top, disableBlend, xCropFactor, yCropFactor, keepAspect); - } - } - -- private void _blitToScreen(int pWidth, int pHeight, boolean pDisableBlend) -+ public boolean blitLegacy = false; -+ -+ private void _blitToScreen(int left, int width, int height, int top, boolean pDisableBlend, float xCropFactor, float yCropFactor, boolean keepAspect) - { - if (GLX.isUsingFBOs()) - { -@@ -355,7 +395,7 @@ - GlStateManager._colorMask(true, true, true, false); - GlStateManager._disableDepthTest(); - GlStateManager._depthMask(false); -- GlStateManager._viewport(0, 0, pWidth, pHeight); -+ GlStateManager._viewport(left, top, width, height); - - if (pDisableBlend) - { -@@ -363,36 +403,92 @@ - } - - Minecraft minecraft = Minecraft.getInstance(); -- ShaderInstance shaderinstance = minecraft.gameRenderer.blitShader; -- shaderinstance.setSampler("DiffuseSampler", this.colorTextureId); -- Matrix4f matrix4f = Matrix4f.orthographic((float)pWidth, (float)(-pHeight), 1000.0F, 3000.0F); -- RenderSystem.setProjectionMatrix(matrix4f); -- -- if (shaderinstance.MODEL_VIEW_MATRIX != null) -- { -- shaderinstance.MODEL_VIEW_MATRIX.set(Matrix4f.createTranslateMatrix(0.0F, 0.0F, -2000.0F)); -- } -- -- if (shaderinstance.PROJECTION_MATRIX != null) -- { -- shaderinstance.PROJECTION_MATRIX.set(matrix4f); -- } -- -- shaderinstance.apply(); -- float f = (float)pWidth; -- float f1 = (float)pHeight; -- float f2 = (float)this.viewWidth / (float)this.width; -- float f3 = (float)this.viewHeight / (float)this.height; -- Tesselator tesselator = RenderSystem.renderThreadTesselator(); -- BufferBuilder bufferbuilder = tesselator.getBuilder(); -- bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); -- bufferbuilder.vertex(0.0D, (double)f1, 0.0D).uv(0.0F, 0.0F).color(255, 255, 255, 255).endVertex(); -- bufferbuilder.vertex((double)f, (double)f1, 0.0D).uv(f2, 0.0F).color(255, 255, 255, 255).endVertex(); -- bufferbuilder.vertex((double)f, 0.0D, 0.0D).uv(f2, f3).color(255, 255, 255, 255).endVertex(); -- bufferbuilder.vertex(0.0D, 0.0D, 0.0D).uv(0.0F, f3).color(255, 255, 255, 255).endVertex(); -- bufferbuilder.end(); -- BufferUploader._endInternal(bufferbuilder); -- shaderinstance.clear(); -+ -+ float f = (float)width / (float)height; -+ float f1 = (float)this.viewWidth / (float)this.viewHeight; -+ float f2 = (float)width; -+ float f3 = (float)height; -+ float f4 = 0.0F; -+ float f5 = 0.0F; -+ -+ if (keepAspect) -+ { -+ if (f > f1) -+ { -+ float f6 = (float)width / (float)this.viewWidth; -+ f4 = 0.0F; -+ f2 = (float)width; -+ f5 = (float)height / 2.0F - (float)this.viewHeight / 2.0F * f6; -+ f3 = (float)height / 2.0F + (float)this.viewHeight / 2.0F * f6; -+ } -+ else -+ { -+ float f10 = (float)height / (float)this.viewHeight; -+ f4 = (float)width / 2.0F - (float)this.viewWidth / 2.0F * f10; -+ f2 = (float)width / 2.0F + (float)this.viewWidth / 2.0F * f10; -+ f5 = 0.0F; -+ f3 = (float)height; -+ } -+ } -+ -+ float f11 = (float)width; -+ float f7 = (float)height; -+ float f8 = (float)this.viewWidth / (float)this.width; -+ float f9 = (float)this.viewHeight / (float)this.height; -+ -+ if(!blitLegacy) { -+ ShaderInstance shaderinstance = minecraft.gameRenderer.blitShader; -+ shaderinstance.setSampler("DiffuseSampler", this.colorTextureId); -+ Matrix4f matrix4f = Matrix4f.orthographic((float)width, (float)(-height), 1000.0F, 3000.0F); -+ RenderSystem.setProjectionMatrix(matrix4f); -+ -+ if (shaderinstance.MODEL_VIEW_MATRIX != null) -+ { -+ shaderinstance.MODEL_VIEW_MATRIX.set(Matrix4f.createTranslateMatrix(0.0F, 0.0F, -2000.0F)); -+ } -+ -+ if (shaderinstance.PROJECTION_MATRIX != null) -+ { -+ shaderinstance.PROJECTION_MATRIX.set(matrix4f); -+ } -+ -+ shaderinstance.apply(); -+ -+ Tesselator tesselator = RenderSystem.renderThreadTesselator(); -+ BufferBuilder bufferbuilder = tesselator.getBuilder(); -+ bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); -+ bufferbuilder.vertex((double)f4, (double)f3, 0.0D).uv(xCropFactor, yCropFactor).color(255, 255, 255, 255).endVertex(); -+ bufferbuilder.vertex((double)f2, (double)f3, 0.0D).uv(f8 - xCropFactor, yCropFactor).color(255, 255, 255, 255).endVertex(); -+ bufferbuilder.vertex((double)f2, (double)f5, 0.0D).uv(f8 - xCropFactor, f9 - yCropFactor).color(255, 255, 255, 255).endVertex(); -+ bufferbuilder.vertex((double)f4, (double)f5, 0.0D).uv(xCropFactor, f9 - yCropFactor).color(255, 255, 255, 255).endVertex(); -+ bufferbuilder.end(); -+ BufferUploader._endInternal(bufferbuilder); -+ shaderinstance.clear(); -+ } else { -+ this.bindRead(); -+ GlStateManager.disableAlphaTest(); -+ GlStateManager._disableBlend(); -+ GL11.glMatrixMode(GL11.GL_PROJECTION); -+ GL43.glLoadIdentity(); -+ GL11.glOrtho(0.0D, (double)width, (double)height, 0.0D, 1000.0D, 3000.0D); -+ GL43.glMatrixMode(5888); -+ GL43.glLoadIdentity(); -+ GL11.glTranslatef(0.0F, 0.0F, -2000); -+ GlStateManager._clearColor(1.0F, 1.0F, 1.0F, 1.0F); -+ GlStateManager._clearDepth(1.0D); -+ GL11.glBegin(GL11.GL_QUADS); -+ GL11.glTexCoord2f(xCropFactor, yCropFactor); -+ GL11.glVertex3f(f4, f3, 0.0F); -+ GL11.glTexCoord2f(f8 - xCropFactor, yCropFactor); -+ GL11.glVertex3f(f2, f3, 0.0F); -+ GL11.glTexCoord2f(f8 - xCropFactor, f9 - yCropFactor); -+ GL11.glVertex3f(f2, f5, 0.0F); -+ GL11.glTexCoord2f(xCropFactor, f9 - yCropFactor); -+ GL11.glVertex3f(f4, f5, 0.0F); -+ GL11.glEnd(); -+ unbindRead(); -+ } -+ - GlStateManager._depthMask(true); - GlStateManager._colorMask(true, true, true, true); - } -@@ -425,17 +521,52 @@ - return this.depthBufferId; - } - -- public void enableStencil() -+ public RenderTarget(String name, int width, int height, boolean usedepth, boolean onMac, int texid, boolean depthtex, boolean linearFilter) -+ { -+ RenderSystem.assertOnRenderThreadOrInit(); -+ this.name = name; -+ this.texid = texid; -+ this.linearFilter = linearFilter; -+ this.useDepth = usedepth; -+ this.frameBufferId = -1; -+ this.colorTextureId = -1; -+ this.depthBufferId = -1; -+ this.resize(width, height, onMac); -+ } -+ -+ public void genMipMaps() - { -- if (!this.stencilEnabled) -+ GL30.glGenerateMipmap(3553); -+ } -+ -+ public void blitToScreen(int pWidth, int pHeight, boolean p_83960_) -+ { -+ this.blitToScreen(0, pWidth, pHeight, 0, p_83960_, 0.0F, 0.0F, false); -+ } -+ -+ public String toString() -+ { -+ StringBuilder stringbuilder = new StringBuilder(); -+ stringbuilder.append("\n"); -+ -+ if (this.name != null) - { -- this.stencilEnabled = true; -- this.resize(this.viewWidth, this.viewHeight, Minecraft.ON_OSX); -+ stringbuilder.append("Name: " + this.name).append("\n"); - } -+ -+ stringbuilder.append("Size: " + this.viewWidth + " x " + this.viewHeight).append("\n"); -+ stringbuilder.append("FB ID: " + this.frameBufferId).append("\n"); -+ stringbuilder.append("Tex ID: " + this.colorTextureId).append("\n"); -+ return stringbuilder.toString(); -+ } -+ -+ public void enableStencil() -+ { -+ //Vivecraft noop - } - - public boolean isStencilEnabled() - { -- return this.stencilEnabled; -+ return true; - } - } diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/RenderTargetVRMixin.java b/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/RenderTargetVRMixin.java deleted file mode 100644 index c2545bd63..000000000 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/RenderTargetVRMixin.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.vivecraft.mixin.blaze3d.pipeline; - -import com.mojang.blaze3d.pipeline.RenderTarget; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(RenderTarget.class) -public class RenderTargetVRMixin { - // This parameter that gets set makes the texture incomplete on GLES :/ - @Redirect(method = "createBuffers", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;_texParameter(III)V", ordinal = 2)) - private void stopDepthParameter(int i, int j, int k) { - - } -} diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/TextureTarget.java.patch b/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/TextureTarget.java.patch deleted file mode 100644 index 77fd1b344..000000000 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/TextureTarget.java.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/com/mojang/blaze3d/pipeline/TextureTarget.java -+++ b/com/mojang/blaze3d/pipeline/TextureTarget.java -@@ -10,4 +10,11 @@ - RenderSystem.assertOnRenderThreadOrInit(); - this.resize(pWidth, pHeight, pClearError); - } -+ -+ //Vivecraft extended constructor. TODO: custom rendertarget impl? -+ public TextureTarget(String name, int width, int height, boolean usedepth, boolean onMac, int texid, boolean depthtex, boolean linearFilter) { -+ super(name, width, height, usedepth, onMac,texid, depthtex, linearFilter); -+ this.setClearColor(0.0F, 0.0F, 0.0F, 0.0F); -+ } -+ - } diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/platform/GLX.java.patch b/common/src/main/java/org/vivecraft/mixin/blaze3d/platform/GLX.java.patch deleted file mode 100644 index d4996a35e..000000000 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/platform/GLX.java.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/com/mojang/blaze3d/platform/GLX.java -+++ b/com/mojang/blaze3d/platform/GLX.java -@@ -31,7 +31,9 @@ - { - private static final Logger LOGGER = LogManager.getLogger(); - private static String cpuInfo; -- -+ -+ public int intentionallModifyThisClassCauseItWontLoadProperlyFromOptifine = 69; -+ - public static String getOpenGLVersionString() - { - RenderSystem.assertOnRenderThread(); diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/platform/GlStateManager.java.patch b/common/src/main/java/org/vivecraft/mixin/blaze3d/platform/GlStateManager.java.patch deleted file mode 100644 index 9ab8e22bb..000000000 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/platform/GlStateManager.java.patch +++ /dev/null @@ -1,291 +0,0 @@ ---- a/com/mojang/blaze3d/platform/GlStateManager.java -+++ b/com/mojang/blaze3d/platform/GlStateManager.java -@@ -42,7 +42,7 @@ - { - private static final boolean ON_LINUX = Util.getPlatform() == Util.OS.LINUX; - public static final int TEXTURE_COUNT = 12; -- private static final GlStateManager.BlendState BLEND = new GlStateManager.BlendState(); -+ public static final GlStateManager.BlendState BLEND = new GlStateManager.BlendState(); - private static final GlStateManager.DepthState DEPTH = new GlStateManager.DepthState(); - private static final GlStateManager.CullState CULL = new GlStateManager.CullState(); - private static final GlStateManager.PolygonOffsetState POLY_OFFSET = new GlStateManager.PolygonOffsetState(); -@@ -250,26 +250,30 @@ - { - RenderSystem.assertOnRenderThread(); - -+ // VIVECRAFT: correct bad blend function that trashes alpha channel -+ if (pSrcFactor == GlStateManager.SourceFactor.SRC_ALPHA.value && pDstFactor == GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA.value && pSrcFactorAlpha == GlStateManager.SourceFactor.ONE.value && pDstFactorAlpha == GlStateManager.DestFactor.ZERO.value) -+ { -+ pDstFactorAlpha = GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA.value; -+ } -+ // -+ - if (blendLock.isLocked()) - { - blendLockState.setFactors(pSrcFactor, pDstFactor, pSrcFactorAlpha, pDstFactorAlpha); - } -- else -+ else if (pSrcFactor != BLEND.srcRgb || pDstFactor != BLEND.dstRgb || pSrcFactorAlpha != BLEND.srcAlpha || pDstFactorAlpha != BLEND.dstAlpha) - { -- if (pSrcFactor != BLEND.srcRgb || pDstFactor != BLEND.dstRgb || pSrcFactorAlpha != BLEND.srcAlpha || pDstFactorAlpha != BLEND.dstAlpha) -- { -- BLEND.srcRgb = pSrcFactor; -- BLEND.dstRgb = pDstFactor; -- BLEND.srcAlpha = pSrcFactorAlpha; -- BLEND.dstAlpha = pDstFactorAlpha; -- -- if (Config.isShaders()) -- { -- Shaders.uniform_blendFunc.setValue(pSrcFactor, pDstFactor, pSrcFactorAlpha, pDstFactorAlpha); -- } -+ BLEND.srcRgb = pSrcFactor; -+ BLEND.dstRgb = pDstFactor; -+ BLEND.srcAlpha = pSrcFactorAlpha; -+ BLEND.dstAlpha = pDstFactorAlpha; - -- glBlendFuncSeparate(pSrcFactor, pDstFactor, pSrcFactorAlpha, pDstFactorAlpha); -+ if (Config.isShaders()) -+ { -+ Shaders.uniform_blendFunc.setValue(pSrcFactor, pDstFactor, pSrcFactorAlpha, pDstFactorAlpha); - } -+ -+ glBlendFuncSeparate(pSrcFactor, pDstFactor, pSrcFactorAlpha, pDstFactorAlpha); - } - } - -@@ -904,11 +908,11 @@ - - GL11.glDeleteTextures(pTexture); - -- for (GlStateManager.TextureState glstatemanager$texturestate : TEXTURES) -+ for (GlStateManager.TextureState GlStateManager$texturestate : TEXTURES) - { -- if (glstatemanager$texturestate.binding == pTexture) -+ if (GlStateManager$texturestate.binding == pTexture) - { -- glstatemanager$texturestate.binding = 0; -+ GlStateManager$texturestate.binding = 0; - } - } - } -@@ -1299,45 +1303,45 @@ - } - } - -- public static void getBlendState(GlBlendState gbs) -+ public static void getBlendState(GlBlendState p_getBlendState_0_) - { - if (blendLock.isLocked()) - { -- gbs.setState(blendLockState); -+ p_getBlendState_0_.setState(blendLockState); - } - else - { -- gbs.setState(BLEND.mode.enabled, BLEND.srcRgb, BLEND.dstRgb, BLEND.srcAlpha, BLEND.dstAlpha); -+ p_getBlendState_0_.setState(BLEND.mode.enabled, BLEND.srcRgb, BLEND.dstRgb, BLEND.srcAlpha, BLEND.dstAlpha); - } - } - -- public static void setBlendState(GlBlendState gbs) -+ public static void setBlendState(GlBlendState p_setBlendState_0_) - { - if (blendLock.isLocked()) - { -- blendLockState.setState(gbs); -+ blendLockState.setState(p_setBlendState_0_); - } - else - { -- BLEND.mode.setEnabled(gbs.isEnabled()); -+ BLEND.mode.setEnabled(p_setBlendState_0_.isEnabled()); - -- if (!gbs.isSeparate()) -+ if (!p_setBlendState_0_.isSeparate()) - { -- _blendFunc(gbs.getSrcFactor(), gbs.getDstFactor()); -+ _blendFunc(p_setBlendState_0_.getSrcFactor(), p_setBlendState_0_.getDstFactor()); - } - else - { -- _blendFuncSeparate(gbs.getSrcFactor(), gbs.getDstFactor(), gbs.getSrcFactorAlpha(), gbs.getDstFactorAlpha()); -+ _blendFuncSeparate(p_setBlendState_0_.getSrcFactor(), p_setBlendState_0_.getDstFactor(), p_setBlendState_0_.getSrcFactorAlpha(), p_setBlendState_0_.getDstFactorAlpha()); - } - } - } - -- public static void lockCull(GlCullState stateNew) -+ public static void lockCull(GlCullState p_lockCull_0_) - { - if (!cullLock.isLocked()) - { - getCullState(cullLockState); -- setCullState(stateNew); -+ setCullState(p_lockCull_0_); - cullLock.lock(); - } - } -@@ -1350,34 +1354,34 @@ - } - } - -- public static void getCullState(GlCullState state) -+ public static void getCullState(GlCullState p_getCullState_0_) - { - if (cullLock.isLocked()) - { -- state.setState(cullLockState); -+ p_getCullState_0_.setState(cullLockState); - } - else - { -- state.setState(CULL.enable.enabled, CULL.mode); -+ p_getCullState_0_.setState(CULL.enable.enabled, CULL.mode); - } - } - -- public static void setCullState(GlCullState state) -+ public static void setCullState(GlCullState p_setCullState_0_) - { - if (cullLock.isLocked()) - { -- cullLockState.setState(state); -+ cullLockState.setState(p_setCullState_0_); - } - else - { -- CULL.enable.setEnabled(state.isEnabled()); -- CULL.mode = state.getMode(); -+ CULL.enable.setEnabled(p_setCullState_0_.isEnabled()); -+ CULL.mode = p_setCullState_0_.getMode(); - } - } - -- public static void glMultiDrawArrays(int mode, IntBuffer bFirst, IntBuffer bCount) -+ public static void glMultiDrawArrays(int p_glMultiDrawArrays_0_, IntBuffer p_glMultiDrawArrays_1_, IntBuffer p_glMultiDrawArrays_2_) - { -- GL14.glMultiDrawArrays(mode, bFirst, bCount); -+ GL14.glMultiDrawArrays(p_glMultiDrawArrays_0_, p_glMultiDrawArrays_1_, p_glMultiDrawArrays_2_); - - if (Config.isShaders()) - { -@@ -1388,7 +1392,7 @@ - for (int j = 1; j < i; ++j) - { - Shaders.uniform_instanceId.setValue(j); -- GL14.glMultiDrawArrays(mode, bFirst, bCount); -+ GL14.glMultiDrawArrays(p_glMultiDrawArrays_0_, p_glMultiDrawArrays_1_, p_glMultiDrawArrays_2_); - } - - Shaders.uniform_instanceId.setValue(0); -@@ -1433,9 +1437,9 @@ - GL31.glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); - } - -- public static void readPixels(int x, int y, int width, int height, int format, int type, long pixels) -+ public static void readPixels(int p_readPixels_0_, int p_readPixels_1_, int p_readPixels_2_, int p_readPixels_3_, int p_readPixels_4_, int p_readPixels_5_, long p_readPixels_6_) - { -- GL11.glReadPixels(x, y, width, height, format, type, pixels); -+ GL11.glReadPixels(p_readPixels_0_, p_readPixels_1_, p_readPixels_2_, p_readPixels_3_, p_readPixels_4_, p_readPixels_5_, p_readPixels_6_); - } - - public static int getFramebufferRead() -@@ -1462,13 +1466,13 @@ - GL14.glBlendFuncSeparate(BLEND.srcRgb, BLEND.dstRgb, BLEND.srcAlpha, BLEND.dstAlpha); - } - -- public static void setBlendsIndexed(GlBlendState[] blends) -+ public static void setBlendsIndexed(GlBlendState[] p_setBlendsIndexed_0_) - { -- if (blends != null) -+ if (p_setBlendsIndexed_0_ != null) - { -- for (int i = 0; i < blends.length; ++i) -+ for (int i = 0; i < p_setBlendsIndexed_0_.length; ++i) - { -- GlBlendState glblendstate = blends[i]; -+ GlBlendState glblendstate = p_setBlendsIndexed_0_[i]; - - if (glblendstate != null) - { -@@ -1487,19 +1491,19 @@ - } - } - -- public static void bindImageTexture(int unit, int texture, int level, boolean layered, int layer, int access, int format) -+ public static void bindImageTexture(int p_bindImageTexture_0_, int p_bindImageTexture_1_, int p_bindImageTexture_2_, boolean p_bindImageTexture_3_, int p_bindImageTexture_4_, int p_bindImageTexture_5_, int p_bindImageTexture_6_) - { -- if (unit >= 0 && unit < IMAGE_TEXTURES.length) -+ if (p_bindImageTexture_0_ >= 0 && p_bindImageTexture_0_ < IMAGE_TEXTURES.length) - { -- if (IMAGE_TEXTURES[unit] == texture) -+ if (IMAGE_TEXTURES[p_bindImageTexture_0_] == p_bindImageTexture_1_) - { - return; - } - -- IMAGE_TEXTURES[unit] = texture; -+ IMAGE_TEXTURES[p_bindImageTexture_0_] = p_bindImageTexture_1_; - } - -- GL42.glBindImageTexture(unit, texture, level, layered, layer, access, format); -+ GL42.glBindImageTexture(p_bindImageTexture_0_, p_bindImageTexture_1_, p_bindImageTexture_2_, p_bindImageTexture_3_, p_bindImageTexture_4_, p_bindImageTexture_5_, p_bindImageTexture_6_); - } - - public static int getProgram() -@@ -1507,7 +1511,7 @@ - return glProgram; - } - -- static class BlendState -+ public static class BlendState - { - public final GlStateManager.BooleanState mode = new GlStateManager.BooleanState(3042); - public int srcRgb = 1; -@@ -1727,4 +1731,46 @@ - return INSTANCE.height; - } - } -+ -+ //Vivecraft TODO: fix -+ public static void mulTextureByModelView() -+ { -+// getMatrix(2982, MATRIX_BUFFER); -+// multMatrix(MATRIX_BUFFER); -+ } -+ -+ public static Matrix4f getMatrix4f(int p_getMatrix4f_0_) -+ { -+// GL11.glGetFloatv(p_getMatrix4f_0_, MATRIX_BUFFER); -+// MATRIX_BUFFER.rewind(); -+// Matrix4f matrix4f = new Matrix4f(); -+// matrix4f.read(MATRIX_BUFFER); -+// MATRIX_BUFFER.rewind(); -+ return null; -+ } -+ -+ //Vivecraft yea well un-deprecate it. -+ @Deprecated -+ public -+ static class Color -+ { -+ public float r = 1.0F; -+ public float g = 1.0F; -+ public float b = 1.0F; -+ public float a = 1.0F; -+ -+ public Color() -+ { -+ this(1.0F, 1.0F, 1.0F, 1.0F); -+ } -+ -+ public Color(float red, float green, float blue, float alpha) -+ { -+ this.r = red; -+ this.g = green; -+ this.b = blue; -+ this.a = alpha; -+ } -+ } -+ - } diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/platform/InputConstants.java.patch b/common/src/main/java/org/vivecraft/mixin/blaze3d/platform/InputConstants.java.patch deleted file mode 100644 index 8f21f2ff5..000000000 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/platform/InputConstants.java.patch +++ /dev/null @@ -1,99 +0,0 @@ ---- a/com/mojang/blaze3d/platform/InputConstants.java -+++ b/com/mojang/blaze3d/platform/InputConstants.java -@@ -12,6 +12,7 @@ - import java.util.OptionalInt; - import java.util.function.BiFunction; - import javax.annotation.Nullable; -+import net.minecraft.client.Minecraft; - import net.minecraft.locale.Language; - import net.minecraft.network.chat.Component; - import net.minecraft.network.chat.TextComponent; -@@ -24,6 +25,7 @@ - import org.lwjgl.glfw.GLFWKeyCallbackI; - import org.lwjgl.glfw.GLFWMouseButtonCallbackI; - import org.lwjgl.glfw.GLFWScrollCallbackI; -+import org.vivecraft.provider.InputSimulator; - - public class InputConstants - { -@@ -185,9 +187,12 @@ - - public static boolean isKeyDown(long pWindow, int p_84832_) - { -- return GLFW.glfwGetKey(pWindow, p_84832_) == 1; -+ return GLFW.glfwGetKey(pWindow, p_84832_) == 1 || InputSimulator.isKeyDown(p_84832_); -+ } -+ public static boolean isKeyDown(int p_216506_2_) -+ { -+ return GLFW.glfwGetKey(Minecraft.getInstance().getWindow().getWindow(), p_216506_2_) == 1 || InputSimulator.isKeyDown(p_216506_2_); - } -- - public static void setupKeyboardCallbacks(long pWindow, GLFWKeyCallbackI p_84846_, GLFWCharModsCallbackI pKeyCallback) - { - GLFW.glfwSetKeyCallback(pWindow, p_84846_); -@@ -239,14 +244,14 @@ - { - methodhandle = lookup.findStatic(GLFW.class, "glfwRawMouseMotionSupported", methodtype); - MethodHandle methodhandle1 = lookup.findStaticGetter(GLFW.class, "GLFW_RAW_MOUSE_MOTION", Integer.TYPE); -- i = (int)methodhandle1.invokeExact(); -+ i = (int) methodhandle1.invokeExact(); - } -- catch (NoSuchFieldException | NoSuchMethodException nosuchmethodexception) -+ catch (NoSuchMethodException | NoSuchFieldException nosuchfieldexception) - { - } -- catch (Throwable throwable) -+ catch (Throwable throwable1) - { -- throw new RuntimeException(throwable); -+ throw new RuntimeException(throwable1); - } - - GLFW_RAW_MOUSE_MOTION_SUPPORTED = methodhandle; -@@ -336,16 +341,16 @@ - - public static enum Type - { -- KEYSYM("key.keyboard", (p_84914_, p_84915_) -> { -- String s = GLFW.glfwGetKeyName(p_84914_, -1); -- return (Component)(s != null ? new TextComponent(s) : new TranslatableComponent(p_84915_)); -+ KEYSYM("key.keyboard", (p_237528_0_, p_237528_1_) -> { -+ String s = GLFW.glfwGetKeyName(p_237528_0_, -1); -+ return (Component)(s != null ? new TextComponent(s) : new TranslatableComponent(p_237528_1_)); - }), -- SCANCODE("scancode", (p_84911_, p_84912_) -> { -- String s = GLFW.glfwGetKeyName(-1, p_84911_); -- return (Component)(s != null ? new TextComponent(s) : new TranslatableComponent(p_84912_)); -+ SCANCODE("scancode", (p_237527_0_, p_237527_1_) -> { -+ String s = GLFW.glfwGetKeyName(-1, p_237527_0_); -+ return (Component)(s != null ? new TextComponent(s) : new TranslatableComponent(p_237527_1_)); - }), -- MOUSE("key.mouse", (p_84904_, p_84905_) -> { -- return Language.getInstance().has(p_84905_) ? new TranslatableComponent(p_84905_) : new TranslatableComponent("key.mouse", p_84904_ + 1); -+ MOUSE("key.mouse", (p_237524_0_, p_237524_1_) -> { -+ return Language.getInstance().has(p_237524_1_) ? new TranslatableComponent(p_237524_1_) : new TranslatableComponent("key.mouse", p_237524_0_ + 1); - }); - - private final Int2ObjectMap map = new Int2ObjectOpenHashMap<>(); -@@ -366,17 +371,17 @@ - - public InputConstants.Key getOrCreate(int pKeyCode) - { -- return this.map.computeIfAbsent(pKeyCode, (p_84907_) -> -+ return this.map.computeIfAbsent(pKeyCode, (p_237525_1_) -> - { -- int i = p_84907_; -+ int i = p_237525_1_; - - if (this == MOUSE) - { -- i = p_84907_ + 1; -+ i = p_237525_1_ + 1; - } - - String s = this.defaultPrefix + "." + i; -- return new InputConstants.Key(s, this, p_84907_); -+ return new InputConstants.Key(s, this, p_237525_1_); - }); - } - diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/platform/Window.java.patch b/common/src/main/java/org/vivecraft/mixin/blaze3d/platform/Window.java.patch deleted file mode 100644 index ebe58bcfd..000000000 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/platform/Window.java.patch +++ /dev/null @@ -1,142 +0,0 @@ ---- a/com/mojang/blaze3d/platform/Window.java -+++ b/com/mojang/blaze3d/platform/Window.java -@@ -98,8 +98,10 @@ - GLFW.glfwWindowHint(139275, 221185); - GLFW.glfwWindowHint(139266, 3); - GLFW.glfwWindowHint(139267, 2); -- GLFW.glfwWindowHint(139272, 204801); -- GLFW.glfwWindowHint(139270, 1); -+ //Vivecraft keep compatibility profile? -+ GLFW.glfwWindowHint(139272, 204802); -+ //(was 204801) -+ //GLFW.glfwWindowHint(139270, 1); - long i = 0L; - - if (Reflector.EarlyProgressVisualization_handOffWindow.exists()) -@@ -154,7 +156,6 @@ - GL.createCapabilities(); - this.setMode(); - this.refreshFramebufferSize(); -- GLFW.glfwSetFramebufferSizeCallback(this.window, this::onFramebufferResize); - GLFW.glfwSetWindowPosCallback(this.window, this::onMove); - GLFW.glfwSetWindowSizeCallback(this.window, this::onResize); - GLFW.glfwSetWindowFocusCallback(this.window, this::onFocus); -@@ -285,9 +286,9 @@ - memorystack.close(); - } - } -- catch (IOException ioexception1) -+ catch (IOException ioexception) - { -- LOGGER.error("Couldn't set icon", (Throwable)ioexception1); -+ LOGGER.error("Couldn't set icon", (Throwable)ioexception); - } - } - -@@ -364,7 +365,8 @@ - { - RenderSystem.assertOnRenderThreadOrInit(); - this.vsync = pVsync; -- GLFW.glfwSwapInterval(pVsync ? 1 : 0); -+ //Vivecraft no vsync -+ GLFW.glfwSwapInterval(0); - } - - public void close() -@@ -387,15 +389,16 @@ - { - if (p_85416_ == this.window) - { -- int i = this.getWidth(); -- int j = this.getHeight(); -+ //Vivecraft use screen sizes -+ int i = this.getScreenWidth(); -+ int j = this.getScreenHeight(); - - if (p_85417_ != 0 && p_85418_ != 0) - { - this.framebufferWidth = p_85417_; - this.framebufferHeight = p_85418_; - -- if (this.getWidth() != i || this.getHeight() != j) -+ if (this.getScreenWidth() != i || this.getScreenHeight() != j) - { - this.eventHandler.resizeDisplay(); - } -@@ -423,11 +426,15 @@ - }); - } - } -- -- private void onResize(long p_85428_, int p_85429_, int p_85430_) -+ //vivecraft dont resize on minimize -+ private void onResize(long pWindowPointer, int p_85429_, int pWindowWidth) - { -- this.width = p_85429_; -- this.height = p_85430_; -+ if (pWindowWidth * p_85429_ != 0) -+ { -+ this.width = p_85429_; -+ this.height = pWindowWidth; -+ this.eventHandler.resizeDisplay(); -+ } - } - - private void onFocus(long p_85393_, boolean p_85394_) -@@ -575,13 +582,12 @@ - { - int i; - -- for (i = 1; i != pGuiScale && i < this.framebufferWidth && i < this.framebufferHeight && this.framebufferWidth / (i + 1) >= 320 && this.framebufferHeight / (i + 1) >= 240; ++i) -+ for (i = 1; i != pGuiScale && i < this.width && i < this.height && this.width / (i + 1) >= 320 && this.height / (i + 1) >= 240; ++i) - { - } - - if (pForceUnicode && i % 2 != 0) - { -- ++i; - } - - return i; -@@ -590,10 +596,10 @@ - public void setGuiScale(double pScaleFactor) - { - this.guiScale = pScaleFactor; -- int i = (int)((double)this.framebufferWidth / pScaleFactor); -- this.guiScaledWidth = (double)this.framebufferWidth / pScaleFactor > (double)i ? i + 1 : i; -- int j = (int)((double)this.framebufferHeight / pScaleFactor); -- this.guiScaledHeight = (double)this.framebufferHeight / pScaleFactor > (double)j ? j + 1 : j; -+ int i = (int)((double)this.width / pScaleFactor); -+ this.guiScaledWidth = (double)this.width / pScaleFactor > (double)i ? i + 1 : i; -+ int j = (int)((double)this.height / pScaleFactor); -+ this.guiScaledHeight = (double)this.height / pScaleFactor > (double)j ? j + 1 : j; - } - - public void setTitle(String pTitle) -@@ -613,12 +619,12 @@ - - public int getWidth() - { -- return this.framebufferWidth; -+ return Minecraft.getInstance().getMainRenderTarget().viewWidth; - } - - public int getHeight() - { -- return this.framebufferHeight; -+ return Minecraft.getInstance().getMainRenderTarget().viewHeight; - } - - public void setWidth(int pFramebufferWidth) -@@ -677,9 +683,9 @@ - InputConstants.updateRawMouseInput(this.window, pEnableRawMouseMotion); - } - -- public void resizeFramebuffer(int width, int height) -+ public void resizeFramebuffer(int p_resizeFramebuffer_1_, int p_resizeFramebuffer_2_) - { -- this.onFramebufferResize(this.window, width, height); -+ this.onFramebufferResize(this.window, p_resizeFramebuffer_1_, p_resizeFramebuffer_2_); - } - - public boolean isClosed() diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/platform/WindowVRMixin.java b/common/src/main/java/org/vivecraft/mixin/blaze3d/platform/WindowVRMixin.java deleted file mode 100644 index 1bf406d34..000000000 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/platform/WindowVRMixin.java +++ /dev/null @@ -1,123 +0,0 @@ -package org.vivecraft.mixin.blaze3d.platform; - -import com.mojang.blaze3d.platform.Window; -import com.mojang.blaze3d.platform.WindowEventHandler; -import net.minecraft.client.Minecraft; -import org.lwjgl.glfw.GLFW; -import org.lwjgl.glfw.GLFWFramebufferSizeCallback; -import org.lwjgl.glfw.GLFWFramebufferSizeCallbackI; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Window.class) -public abstract class WindowVRMixin { - - - @Shadow - private int width; - @Shadow - private int height; - @Final - @Shadow - private WindowEventHandler eventHandler; - @Shadow - private double guiScale; - @Shadow - private int guiScaledWidth; - @Shadow - private int guiScaledHeight; - - @Shadow - public abstract int getScreenWidth(); - @Shadow - public abstract int getScreenHeight(); - - @Redirect(at = @At(value = "INVOKE", target = "Lorg/lwjgl/glfw/GLFW;glfwSetFramebufferSizeCallback(JLorg/lwjgl/glfw/GLFWFramebufferSizeCallbackI;)Lorg/lwjgl/glfw/GLFWFramebufferSizeCallback;", remap = false), - method = "(Lcom/mojang/blaze3d/platform/WindowEventHandler;Lcom/mojang/blaze3d/platform/ScreenManager;Lcom/mojang/blaze3d/platform/DisplayData;Ljava/lang/String;Ljava/lang/String;)V") - public GLFWFramebufferSizeCallback removebuffer(long l, GLFWFramebufferSizeCallbackI cl) { - return null; - } - - @Redirect(method = "updateVsync", at = @At(value = "INVOKE", target = "Lorg/lwjgl/glfw/GLFW;glfwSwapInterval(I)V", remap = false)) - public void disableSwap(int interval) { - GLFW.glfwSwapInterval(0); - } - - @Redirect(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/Window;getWidth()I"), method = "onFramebufferResize(JII)V") - public int widthCorrection(Window w) { - return this.getScreenWidth(); - } - - @Redirect(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/Window;getHeight()I"), method = "onFramebufferResize(JII)V") - public int heightCorrection(Window w) { - return this.getScreenHeight(); - } - - @Inject(at = @At("HEAD"), method = "onResize(JII)V", cancellable = true) - public void resize(long pWindowPointer, int p_85429_, int pWindowWidth, CallbackInfo info) { - if (pWindowWidth * p_85429_ != 0) { - this.width = p_85429_; - this.height = pWindowWidth; - this.eventHandler.resizeDisplay(); - } - info.cancel(); - } - - /** - * @author - * @reason - */ - @Overwrite - public int calculateScale(int pGuiScale, boolean bl) { - int i; - for (i = 1; i != pGuiScale && i < this.width && i < this.height && this.width / (i + 1) >= 320 && this.height / (i + 1) >= 240; ++i) { - - } - - if (bl && i % 2 != 0) { -// ++j; - } - - return i; - } - - - /** - * @author - * @reason - */ - @Overwrite - public void setGuiScale(double pScaleFactor) { - this.guiScale = pScaleFactor; - - int i = (int) ((double) this.width / pScaleFactor); - this.guiScaledWidth = (double) this.width / pScaleFactor > (double) i ? i + 1 : i; - int j = (int) ((double) this.height / pScaleFactor); - this.guiScaledHeight = (double) this.height / pScaleFactor > (double) j ? j + 1 : j; - } - - /** - * @author - * @reason - */ - @Overwrite - public int getWidth() { - return Minecraft.getInstance().getMainRenderTarget().viewWidth; - } - - /** - * @author - * @reason - */ - @Overwrite - public int getHeight() { - return Minecraft.getInstance().getMainRenderTarget().viewHeight; - } - -} diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/systems/RenderSystem.java.patch b/common/src/main/java/org/vivecraft/mixin/blaze3d/systems/RenderSystem.java.patch deleted file mode 100644 index b37b447bc..000000000 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/systems/RenderSystem.java.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- a/com/mojang/blaze3d/systems/RenderSystem.java -+++ b/com/mojang/blaze3d/systems/RenderSystem.java -@@ -899,7 +899,8 @@ - - public static void defaultBlendFunc() - { -- blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); -+ // VIVECRAFT: DestFactor of ONE_MINUS_SRC_ALPHA is really what we want here, because math -+ blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); - } - - @Deprecated diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/vertex/DefaultVertexFormat.java.patch b/common/src/main/java/org/vivecraft/mixin/blaze3d/vertex/DefaultVertexFormat.java.patch deleted file mode 100644 index fd313d2e7..000000000 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/vertex/DefaultVertexFormat.java.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- a/com/mojang/blaze3d/vertex/DefaultVertexFormat.java -+++ b/com/mojang/blaze3d/vertex/DefaultVertexFormat.java -@@ -36,7 +36,11 @@ - public static final VertexFormat POSITION_COLOR_TEX_LIGHTMAP = new VertexFormat(ImmutableMap.builder().put("Position", ELEMENT_POSITION).put("Color", ELEMENT_COLOR).put("UV0", ELEMENT_UV0).put("UV2", ELEMENT_UV2).build()); - public static final VertexFormat POSITION_TEX_LIGHTMAP_COLOR = new VertexFormat(ImmutableMap.builder().put("Position", ELEMENT_POSITION).put("UV0", ELEMENT_UV0).put("UV2", ELEMENT_UV2).put("Color", ELEMENT_COLOR).build()); - public static final VertexFormat POSITION_TEX_COLOR_NORMAL = new VertexFormat(ImmutableMap.builder().put("Position", ELEMENT_POSITION).put("UV0", ELEMENT_UV0).put("Color", ELEMENT_COLOR).put("Normal", ELEMENT_NORMAL).put("Padding", ELEMENT_PADDING).build()); -- -+ -+ //Vivecraft -+ public static final VertexFormat POSITION_TEX_LMAP_COLOR_NORMAL = new VertexFormat(ImmutableMap.builder().put("Position", ELEMENT_POSITION).put("UV0", ELEMENT_UV0).put("UV2", ELEMENT_UV2).put("Color", ELEMENT_COLOR).put("Normal", ELEMENT_NORMAL).put("Padding", ELEMENT_PADDING).build()); -+ // -+ - public static void updateVertexFormats() - { - if (Config.isShaders()) diff --git a/common/src/main/java/org/vivecraft/mixin/client/Camera.java.patch b/common/src/main/java/org/vivecraft/mixin/client/Camera.java.patch deleted file mode 100644 index 1b30ef566..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/Camera.java.patch +++ /dev/null @@ -1,43 +0,0 @@ ---- a/net/minecraft/client/Camera.java -+++ b/net/minecraft/client/Camera.java -@@ -21,17 +21,17 @@ - - public class Camera - { -- private boolean initialized; -- private BlockGetter level; -- private Entity entity; -+ protected boolean initialized; -+ protected BlockGetter level; -+ protected Entity entity; - private Vec3 position = Vec3.ZERO; - private final BlockPos.MutableBlockPos blockPosition = new BlockPos.MutableBlockPos(); -- private final Vector3f forwards = new Vector3f(0.0F, 0.0F, 1.0F); -- private final Vector3f up = new Vector3f(0.0F, 1.0F, 0.0F); -- private final Vector3f left = new Vector3f(1.0F, 0.0F, 0.0F); -- private float xRot; -- private float yRot; -- private final Quaternion rotation = new Quaternion(0.0F, 0.0F, 0.0F, 1.0F); -+ protected final Vector3f forwards = new Vector3f(0.0F, 0.0F, 1.0F); -+ protected final Vector3f up = new Vector3f(0.0F, 1.0F, 0.0F); -+ protected final Vector3f left = new Vector3f(1.0F, 0.0F, 0.0F); -+ protected float xRot; -+ protected float yRot; -+ protected final Quaternion rotation = new Quaternion(0.0F, 0.0F, 0.0F, 1.0F); - private boolean detached; - private float eyeHeight; - private float eyeHeightOld; -@@ -238,10 +238,10 @@ - return !this.initialized ? Blocks.AIR.defaultBlockState() : this.level.getBlockState(this.blockPosition); - } - -- public void setAnglesInternal(float yaw, float pitch) -+ public void setAnglesInternal(float p_setAnglesInternal_1_, float p_setAnglesInternal_2_) - { -- this.yRot = yaw; -- this.xRot = pitch; -+ this.yRot = p_setAnglesInternal_1_; -+ this.xRot = p_setAnglesInternal_2_; - } - - public BlockState getBlockAtCamera() diff --git a/common/src/main/java/org/vivecraft/mixin/client/ClientBrandRetriever.java.patch b/common/src/main/java/org/vivecraft/mixin/client/ClientBrandRetriever.java.patch deleted file mode 100644 index 9c4bcd72c..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/ClientBrandRetriever.java.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- a/net/minecraft/client/ClientBrandRetriever.java -+++ b/net/minecraft/client/ClientBrandRetriever.java -@@ -8,7 +8,7 @@ - - @DontObfuscate - public static String getClientModName() -- { -- return "vanilla"; -+ {//duh -+ return "vivecraft"; - } - } diff --git a/common/src/main/java/org/vivecraft/mixin/client/KeyboardHandler.java.patch b/common/src/main/java/org/vivecraft/mixin/client/KeyboardHandler.java.patch deleted file mode 100644 index 04a991aaa..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/KeyboardHandler.java.patch +++ /dev/null @@ -1,99 +0,0 @@ ---- a/net/minecraft/client/KeyboardHandler.java -+++ b/net/minecraft/client/KeyboardHandler.java -@@ -16,6 +16,7 @@ - import net.minecraft.client.gui.components.ChatComponent; - import net.minecraft.client.gui.components.EditBox; - import net.minecraft.client.gui.components.events.GuiEventListener; -+import net.minecraft.client.gui.screens.ChatScreen; - import net.minecraft.client.gui.screens.Screen; - import net.minecraft.client.gui.screens.SimpleOptionsSubScreen; - import net.minecraft.client.gui.screens.controls.KeyBindsScreen; -@@ -45,6 +46,9 @@ - import net.optifine.reflect.Reflector; - import net.optifine.shaders.Shaders; - import net.optifine.shaders.gui.GuiShaderOptions; -+import org.vivecraft.gameplay.screenhandlers.RadialHandler; -+import org.vivecraft.provider.ControllerType; -+import org.vivecraft.settings.VRHotkeys; - - public class KeyboardHandler - { -@@ -418,6 +422,29 @@ - { - if (pWindowPointer == this.minecraft.getWindow().getWindow()) - { -+ if (p_90895_ == 256 && pScanCode == 1) -+ { -+ if (org.vivecraft.gameplay.screenhandlers.KeyboardHandler.Showing) -+ { -+ org.vivecraft.gameplay.screenhandlers.KeyboardHandler.setOverlayShowing(false); -+ if(minecraft.screen instanceof ChatScreen) { -+ minecraft.screen.onClose(); -+ } -+ return; -+ } -+ -+ if (RadialHandler.isShowing()) -+ { -+ RadialHandler.setOverlayShowing(false, (ControllerType)null); -+ return; -+ } -+ } -+ -+ if (VRHotkeys.handleKeyboardInputs(p_90895_, pKey, pScanCode, pAction)) -+ { -+ return; -+ } -+ - if (this.debugCrashKeyTime > 0L) - { - if (!InputConstants.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), 67) || !InputConstants.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), 292)) -@@ -452,13 +479,15 @@ - if (Screen.hasControlDown()) - { - } -- -- Screenshot.grab(this.minecraft.gameDirectory, this.minecraft.getMainRenderTarget(), (p_90916_1_) -> -- { -- this.minecraft.execute(() -> { -- this.minecraft.gui.getChat().addMessage(p_90916_1_); -- }); -- }); -+ //Vivecraft dont do this here -+// Screenshot.grab(this.minecraft.gameDirectory, this.minecraft.getMainRenderTarget(), (p_90916_1_) -> -+// { -+// this.minecraft.execute(() -> { -+// this.minecraft.gui.getChat().addMessage(p_90916_1_); -+// }); -+// }); -+ this.minecraft.grabScreenShot = true; -+ // - return; - } - } -@@ -544,7 +573,7 @@ - } - } - -- if (this.minecraft.screen == null || this.minecraft.screen.passEvents) -+ if ((this.minecraft.screen == null || this.minecraft.screen.passEvents) && !InputConstants.isKeyDown(345)) - { - InputConstants.Key inputconstants$key = InputConstants.getKey(p_90895_, pKey); - -@@ -602,6 +631,7 @@ - if (p_90895_ == 290) - { - this.minecraft.options.hideGui = !this.minecraft.options.hideGui; -+ this.dataholder.vrSettings.saveOptions(); - } - } - -@@ -626,7 +656,7 @@ - } - } - -- private void charTyped(long pWindowPointer, int p_90891_, int pCodePoint) -+ public void charTyped(long pWindowPointer, int p_90891_, int pCodePoint) - { - if (pWindowPointer == this.minecraft.getWindow().getWindow()) - { diff --git a/common/src/main/java/org/vivecraft/mixin/client/Minecraft.java.patch b/common/src/main/java/org/vivecraft/mixin/client/Minecraft.java.patch deleted file mode 100644 index 8a2e669d2..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/Minecraft.java.patch +++ /dev/null @@ -1,2249 +0,0 @@ ---- a/net/minecraft/client/Minecraft.java -+++ b/net/minecraft/client/Minecraft.java -@@ -18,7 +18,9 @@ - import com.mojang.blaze3d.pipeline.TextureTarget; - import com.mojang.blaze3d.platform.DisplayData; - import com.mojang.blaze3d.platform.GlDebug; -+import com.mojang.blaze3d.platform.GlStateManager; - import com.mojang.blaze3d.platform.GlUtil; -+import com.mojang.blaze3d.platform.MemoryTracker; - import com.mojang.blaze3d.platform.Window; - import com.mojang.blaze3d.platform.WindowEventHandler; - import com.mojang.blaze3d.systems.RenderSystem; -@@ -38,19 +40,32 @@ - import java.io.IOException; - import java.io.InputStream; - import java.io.UncheckedIOException; -+import java.lang.reflect.Field; -+import java.lang.reflect.Method; - import java.net.Proxy; - import java.net.SocketAddress; -+import java.net.URL; -+import java.net.URLClassLoader; -+import java.nio.Buffer; - import java.nio.ByteBuffer; -+import java.nio.ByteOrder; -+import java.nio.FloatBuffer; - import java.nio.file.Path; - import java.nio.file.Paths; - import java.text.DecimalFormat; - import java.text.DecimalFormatSymbols; - import java.text.SimpleDateFormat; -+import java.util.ArrayDeque; -+import java.util.ArrayList; -+import java.util.Arrays; - import java.util.Collections; - import java.util.Date; -+import java.util.Deque; -+import java.util.Iterator; - import java.util.List; - import java.util.Locale; - import java.util.Queue; -+import java.util.Set; - import java.util.UUID; - import java.util.concurrent.CompletableFuture; - import java.util.concurrent.ExecutionException; -@@ -150,6 +165,7 @@ - import net.minecraft.client.searchtree.SearchRegistry; - import net.minecraft.client.server.IntegratedServer; - import net.minecraft.client.sounds.MusicManager; -+import net.minecraft.client.sounds.SoundEngine; - import net.minecraft.client.sounds.SoundManager; - import net.minecraft.client.tutorial.Tutorial; - import net.minecraft.commands.Commands; -@@ -234,6 +250,7 @@ - import net.minecraft.world.level.LevelSettings; - import net.minecraft.world.level.biome.Biome; - import net.minecraft.world.level.block.Block; -+import net.minecraft.world.level.block.Blocks; - import net.minecraft.world.level.block.RenderShape; - import net.minecraft.world.level.block.entity.BlockEntity; - import net.minecraft.world.level.block.entity.SkullBlockEntity; -@@ -246,14 +263,118 @@ - import net.minecraft.world.phys.BlockHitResult; - import net.minecraft.world.phys.EntityHitResult; - import net.minecraft.world.phys.HitResult; -+import net.minecraft.world.phys.Vec3; -+import net.optifine.Config; -+import net.optifine.reflect.Reflector; -+import net.optifine.shaders.Shaders; -+ -+import org.apache.commons.io.Charsets; - import org.apache.commons.io.FileUtils; - import org.apache.logging.log4j.LogManager; - import org.apache.logging.log4j.Logger; -+import org.lwjgl.opengl.ARBShaderObjects; -+import org.lwjgl.opengl.GL11; -+import org.lwjgl.opengl.GL30; - import org.lwjgl.util.tinyfd.TinyFileDialogs; -+import org.vivecraft.api.ErrorHelper; -+import org.vivecraft.api.NetworkHelper; -+import org.vivecraft.gameplay.VRPlayer; -+import org.vivecraft.gameplay.screenhandlers.GuiHandler; -+import org.vivecraft.gameplay.screenhandlers.RadialHandler; -+import org.vivecraft.gameplay.trackers.BackpackTracker; -+import org.vivecraft.gameplay.trackers.BowTracker; -+import org.vivecraft.gameplay.trackers.CameraTracker; -+import org.vivecraft.gameplay.trackers.ClimbTracker; -+import org.vivecraft.gameplay.trackers.CrawlTracker; -+import org.vivecraft.gameplay.trackers.EatingTracker; -+import org.vivecraft.gameplay.trackers.HorseTracker; -+import org.vivecraft.gameplay.trackers.InteractTracker; -+import org.vivecraft.gameplay.trackers.JumpTracker; -+import org.vivecraft.gameplay.trackers.RowTracker; -+import org.vivecraft.gameplay.trackers.RunTracker; -+import org.vivecraft.gameplay.trackers.SneakTracker; -+import org.vivecraft.gameplay.trackers.SwimTracker; -+import org.vivecraft.gameplay.trackers.SwingTracker; -+import org.vivecraft.gameplay.trackers.TeleportTracker; -+import org.vivecraft.gameplay.trackers.TelescopeTracker; -+import org.vivecraft.gameplay.trackers.VehicleTracker; -+import org.vivecraft.menuworlds.MenuWorldRenderer; -+import org.vivecraft.provider.MCVR; -+import org.vivecraft.provider.VRRenderer; -+import org.vivecraft.provider.openvr_jna.MCOpenVR; -+import org.vivecraft.provider.openvr_jna.OpenVRStereoRenderer; -+import org.vivecraft.provider.openvr_jna.VRInputAction; -+import org.vivecraft.provider.ovr_lwjgl.MC_OVR; -+import org.vivecraft.provider.ovr_lwjgl.OVR_StereoRenderer; -+import org.vivecraft.render.OpenGLdebugging; -+import org.vivecraft.render.PlayerModelController; -+import org.vivecraft.render.RenderConfigException; -+import org.vivecraft.render.RenderPass; -+import org.vivecraft.render.VRFirstPersonArmSwing; -+import org.vivecraft.render.VRShaders; -+import org.vivecraft.settings.VRHotkeys; -+import org.vivecraft.settings.VRSettings; -+import org.vivecraft.utils.LangHelper; -+import org.vivecraft.utils.Utils; -+import org.vivecraft.utils.math.Vector3; - --public class Minecraft extends ReentrantBlockableEventLoop implements WindowEventHandler -+public class Minecraft extends ReentrantBlockableEventLoop implements WindowEventHandler, net.minecraftforge.client.extensions.IForgeMinecraft - { - private static Minecraft instance; -+ public VRPlayer vrPlayer; -+ public MCVR vr; -+ public VRRenderer vrRenderer; -+ public BackpackTracker backpackTracker = new BackpackTracker(this); -+ public BowTracker bowTracker = new BowTracker(this); -+ public SwimTracker swimTracker = new SwimTracker(this); -+ public EatingTracker autoFood = new EatingTracker(this); -+ public JumpTracker jumpTracker = new JumpTracker(this); -+ public SneakTracker sneakTracker = new SneakTracker(this); -+ public ClimbTracker climbTracker = new ClimbTracker(this); -+ public RunTracker runTracker = new RunTracker(this); -+ public RowTracker rowTracker = new RowTracker(this); -+ public TeleportTracker teleportTracker = new TeleportTracker(this); -+ public SwingTracker swingTracker = new SwingTracker(this); -+ public HorseTracker horseTracker = new HorseTracker(this); -+ public VehicleTracker vehicleTracker = new VehicleTracker(this); -+ //public PhysicalGuiManager physicalGuiManager = new PhysicalGuiManager(this); -+ public InteractTracker interactTracker = new InteractTracker(this); -+ public CrawlTracker crawlTracker = new CrawlTracker(this); -+ public CameraTracker cameraTracker = new CameraTracker(this); -+ public ThreadGroup backgroundThreadGroup = new ThreadGroup("background"); -+ public final float PIOVER180 = ((float)Math.PI / 180F); -+ private boolean oculus = false; -+ public int lastShaderIndex = -1; -+ public Field fieldHwnd = null; -+ public Field fieldDisplay = null; -+ public Field fieldWindow = null; -+ public Field fieldResized = null; -+ public Method fieldResizedMethod = null; -+ public VRSettings vrSettings; -+ public long lastIntegratedServerLaunchCheck = 0L; -+ public boolean integratedServerLaunchInProgress = false; -+ public boolean grabScreenShot = false; -+ public boolean lastShowMouseNative = true; -+ public boolean enableWorldExport = false; -+ public SoundEngine sndManager = null; -+ public MenuWorldRenderer menuWorldRenderer; -+ private FloatBuffer matrixBuffer = MemoryTracker.create(16).asFloatBuffer(); -+ private FloatBuffer matrixBuffer2 = MemoryTracker.create(16).asFloatBuffer(); -+ private boolean firstInit = true; -+ public boolean showSplashScreen = true; -+ public long splashTimer1 = 0L; -+ public long splashTimer2 = 0L; -+ private RenderTarget splash; -+ private float splashFadeAlpha = 0.0F; -+ public Deque runTickTimeNanos = new ArrayDeque<>(); -+ public long medianRunTickTimeNanos = 0L; -+ public long frameIndex = 0L; -+ public ErrorHelper errorHelper; -+ public RenderPass currentPass; -+ private boolean lastClick; -+ public boolean resourcePacksChanged; -+ public int tickCounter; -+ public final String minecriftVerString = "Vivecraft 1.18.1 jrbudda-VR-1-a5"; - private static final Logger LOGGER = LogManager.getLogger(); - public static final boolean ON_OSX = Util.getPlatform() == Util.OS.OSX; - private static final int MAX_TICKS_PER_UPDATE = 10; -@@ -283,7 +404,7 @@ - public final DebugRenderer debugRenderer; - private final AtomicReference progressListener = new AtomicReference<>(); - public final Gui gui; -- public final Options options; -+ public Options options; - private final HotbarManager hotbarManager; - public final MouseHandler mouseHandler; - public final KeyboardHandler keyboardHandler; -@@ -303,7 +424,7 @@ - private final LanguageManager languageManager; - private final BlockColors blockColors; - private final ItemColors itemColors; -- private final RenderTarget mainRenderTarget; -+ public RenderTarget mainRenderTarget; - private final SoundManager soundManager; - private final MusicManager musicManager; - private final FontManager fontManager; -@@ -382,11 +503,20 @@ - private MetricsRecorder metricsRecorder = InactiveMetricsRecorder.INSTANCE; - private final ResourceLoadStateTracker reloadStateTracker = new ResourceLoadStateTracker(); - private String debugPath = "root"; -+ private float fov = 1.0F; -+ public float watereffect; -+ public float portaleffect; -+ public float pumpkineffect; -+ long mirroNotifyStart; -+ String mirrorNotifyText; -+ boolean mirrorNotifyClear; -+ long mirroNotifyLen; - - public Minecraft(GameConfig pGameConfig) - { - super("Client"); - instance = this; -+ Reflector.call(Reflector.ForgeHooksClient_invalidateLog4jThreadCache); - this.gameDirectory = pGameConfig.location.gameDirectory; - File file1 = pGameConfig.location.assetDirectory; - this.resourcePackDirectory = pGameConfig.location.resourcePackDirectory; -@@ -400,8 +530,6 @@ - this.minecraftSessionService = yggdrasilauthenticationservice.createMinecraftSessionService(); - this.userApiService = this.createUserApiService(yggdrasilauthenticationservice, pGameConfig); - this.user = pGameConfig.user.user; -- LOGGER.info("Setting user: {}", (Object)this.user.getName()); -- LOGGER.debug("(Session ID is {})", (Object)this.user.getSessionId()); - this.demo = pGameConfig.game.demo; - this.allowsMultiplayer = !pGameConfig.game.disableMultiplayer; - this.allowsChat = !pGameConfig.game.disableChat; -@@ -424,6 +552,23 @@ - KeybindComponent.setKeyResolver(KeyMapping::createNameSupplier); - this.fixerUpper = DataFixers.getDataFixer(); - this.toast = new ToastComponent(this); -+ if (!this.oculus) -+ { -+ this.vr = new MCOpenVR(this); -+ } -+ else -+ { -+ this.vr = new MC_OVR(this); -+ } -+ -+ VRSettings.initSettings(this, this.gameDirectory); -+ -+ if (!this.vrSettings.badStereoProviderPluginID.isEmpty()) -+ { -+ this.vrSettings.stereoProviderPluginID = this.vrSettings.badStereoProviderPluginID; -+ this.vrSettings.badStereoProviderPluginID = ""; -+ this.vrSettings.saveOptions(); -+ } - this.gameThread = Thread.currentThread(); - this.options = new Options(this, this.gameDirectory); - this.tutorial = new Tutorial(this, this.options); -@@ -441,6 +586,9 @@ - } - - Util.timeSource = RenderSystem.initBackendSystem(); -+ if(Reflector.getFieldValueBoolean(null, Reflector.ForgeConfig_Client_forceSystemNanoTime, false)) -+ Util.timeSource = System::nanoTime; -+ - this.virtualScreen = new VirtualScreen(this); - this.window = this.virtualScreen.newWindow(displaydata, this.options.fullscreenVideoModeString, this.createTitle()); - this.setWindowActive(true); -@@ -461,14 +609,19 @@ - - this.window.setFramerateLimit(this.options.framerateLimit); - this.mouseHandler = new MouseHandler(this); -- this.mouseHandler.setup(this.window.getWindow()); -+ //Forge -+ //this.mouseHandler.setup(this.window.getWindow()); -+ // - this.keyboardHandler = new KeyboardHandler(this); - this.keyboardHandler.setup(this.window.getWindow()); - RenderSystem.initRenderer(this.options.glDebugVerbosity, false); -- this.mainRenderTarget = new MainTarget(this.window.getWidth(), this.window.getHeight()); -+ this.mainRenderTarget = new MainTarget(this.window.getScreenWidth(), this.window.getScreenHeight()); - this.mainRenderTarget.setClearColor(0.0F, 0.0F, 0.0F, 0.0F); - this.mainRenderTarget.clear(ON_OSX); - this.resourceManager = new SimpleReloadableResourceManager(PackType.CLIENT_RESOURCES); -+ //Forge -+ Reflector.call(Reflector.ClientModLoader_begin, this, this.resourcePackRepository, this.resourceManager, this.clientPackSource); -+ // - this.resourcePackRepository.reload(); - this.options.loadSelectedResourcePacks(this.resourcePackRepository); - this.languageManager = new LanguageManager(this.options.languageCode); -@@ -486,6 +639,16 @@ - this.font = this.fontManager.createFont(); - this.resourceManager.registerReloadListener(this.fontManager.getReloadListener()); - this.selectMainFont(this.isEnforceUnicode()); -+ /** MINECRIFT */ -+ try -+ { -+ this.initMinecrift(); -+ } -+ catch (Exception exception) -+ { -+ exception.printStackTrace(); -+ } -+ /** END MINECRIFT */ - this.resourceManager.registerReloadListener(new GrassColorReloadListener()); - this.resourceManager.registerReloadListener(new FoliageColorReloadListener()); - this.window.setErrorSection("Startup"); -@@ -517,6 +680,9 @@ - this.createSearchTrees(); - this.resourceManager.registerReloadListener(this.searchRegistry); - this.particleEngine = new ParticleEngine(this.level, this.textureManager); -+ //Forge -+ Reflector.call(Reflector.call(Reflector.fml_ModLoader_get), Reflector.fml_ModLoader_postEvent, Reflector.newInstance(Reflector.ParticleFactoryRegisterEvent_Constructor)); -+ // - this.resourceManager.registerReloadListener(this.particleEngine); - this.paintingTextures = new PaintingTextureManager(this.textureManager); - this.resourceManager.registerReloadListener(this.paintingTextures); -@@ -524,7 +690,17 @@ - this.resourceManager.registerReloadListener(this.mobEffectTextures); - this.gpuWarnlistManager = new GpuWarnlistManager(); - this.resourceManager.registerReloadListener(this.gpuWarnlistManager); -- this.gui = new Gui(this); -+ -+ if (Reflector.ForgeIngameGui_Constructor.exists()) -+ { -+ this.gui = (Gui)Reflector.newInstance(Reflector.ForgeIngameGui_Constructor, this); -+ } -+ else -+ { -+ this.gui = new Gui(this); -+ } -+ -+ this.mouseHandler.setup(this.window.getWindow()); //Forge: Moved below ingameGUI setting to prevent NPEs in handeler. - this.debugRenderer = new DebugRenderer(this); - RenderSystem.setErrorCallback(this::onFullscreenError); - -@@ -548,17 +724,33 @@ - this.window.setWindowed(this.mainRenderTarget.width, this.mainRenderTarget.height); - TinyFileDialogs.tinyfd_messageBox("Minecraft", stringbuilder.toString(), "ok", "error", false); - } -- -+ -+ //Forge -+ Reflector.call(Reflector.call(Reflector.fml_ModLoader_get), Reflector.fml_ModLoader_postEvent, Reflector.newInstance(Reflector.RegisterClientReloadListenersEvent_Constructor,this.resourceManager)); -+ Reflector.call(Reflector.call(Reflector.fml_ModLoader_get), Reflector.fml_ModLoader_postEvent, Reflector.newInstance(Reflector.EntityRenderersEvent_RegisterLayerDefinitions_Constructor)); -+ Reflector.call(Reflector.call(Reflector.fml_ModLoader_get), Reflector.fml_ModLoader_postEvent, Reflector.newInstance(Reflector.EntityRenderersEvent_RegisterRenderers_Constructor)); -+ // -+ - this.window.updateVsync(this.options.enableVsync); - this.window.updateRawMouseInput(this.options.rawMouseInput); - this.window.setDefaultErrorCallback(); - this.resizeDisplay(); -+ //Vivecraft -+ this.menuWorldRenderer = new MenuWorldRenderer(); -+ this.vrSettings.firstRun = false; -+ this.vrSettings.saveOptions(); -+ // - this.gameRenderer.preloadUiShader(this.getClientPackSource().getVanillaPack()); - LoadingOverlay.registerTextures(this); - List list = this.resourcePackRepository.openAllSelected(); - this.reloadStateTracker.startReload(ResourceLoadStateTracker.ReloadReason.INITIAL, list); - this.setOverlay(new LoadingOverlay(this, this.resourceManager.createReload(Util.backgroundExecutor(), this, RESOURCE_RELOAD_INITIAL_TASK, list), (p_91245_) -> - { -+ if (this.vrRenderer.isInitialized()) -+ { -+ this.menuWorldRenderer.init(); -+ } -+ this.vr.postinit(); - Util.ifElse(p_91245_, this::rollbackResourcePacks, () -> { - if (SharedConstants.IS_RUNNING_IN_IDE) - { -@@ -566,17 +758,21 @@ - } - - this.reloadStateTracker.finishReload(); -+ //Forge -+ if (!Reflector.callBoolean(Reflector.ClientModLoader_completeModLoading)) -+ { -+ if (s != null) -+ { -+ ConnectScreen.startConnecting(new TitleScreen(), this, new ServerAddress(s, i), (ServerData)null); -+ } -+ else -+ { -+ this.setScreen(new TitleScreen(true)); -+ } -+ } -+ // - }); - }, false)); -- -- if (s != null) -- { -- ConnectScreen.startConnecting(new TitleScreen(), this, new ServerAddress(s, i), (ServerData)null); -- } -- else -- { -- this.setScreen(new TitleScreen(true)); -- } - } - - public void updateTitle() -@@ -642,25 +838,30 @@ - - private void rollbackResourcePacks(Throwable p_91240_) - { -- if (this.resourcePackRepository.getSelectedIds().size() > 1) -- { -- Component component; -- -- if (p_91240_ instanceof SimpleReloadableResourceManager.ResourcePackLoadingFailure) -- { -- component = new TextComponent(((SimpleReloadableResourceManager.ResourcePackLoadingFailure)p_91240_).getPack().getName()); -- } -- else -- { -- component = null; -- } -- -- this.clearResourcePacksOnError(p_91240_, component); -- } -- else -- { -- Util.throwAsRuntime(p_91240_); -- } -+ //Forge -+ if (this.resourcePackRepository.getSelectedPacks().stream().anyMatch((e) -> -+ { -+ return !e.isRequired(); -+ })) -+ // -+ { -+ Component component; -+ -+ if (p_91240_ instanceof SimpleReloadableResourceManager.ResourcePackLoadingFailure) -+ { -+ component = new TextComponent(((SimpleReloadableResourceManager.ResourcePackLoadingFailure)p_91240_).getPack().getName()); -+ } -+ else -+ { -+ component = null; -+ } -+ -+ this.clearResourcePacksOnError(p_91240_, component); -+ } -+ else -+ { -+ Util.throwAsRuntime(p_91240_); -+ } - } - - public void clearResourcePacksOnError(Throwable pThrowable, @Nullable Component pErrorMessage) -@@ -733,10 +934,10 @@ - LOGGER.fatal("Reported exception thrown!", (Throwable)reportedexception); - crash(reportedexception.getReport()); - } -- catch (Throwable throwable) -+ catch (Throwable throwable1) - { -- CrashReport crashreport = this.fillReport(new CrashReport("Unexpected error", throwable)); -- LOGGER.fatal("Unreported exception thrown!", throwable); -+ CrashReport crashreport = this.fillReport(new CrashReport("Unexpected error", throwable1)); -+ LOGGER.fatal("Unreported exception thrown!", throwable1); - this.emergencySave(); - crash(crashreport); - } -@@ -762,7 +963,9 @@ - }); - ReloadableIdSearchTree reloadableidsearchtree = new ReloadableIdSearchTree<>((p_91121_) -> - { -- return ItemTags.getAllTags().getMatchingTags(p_91121_.getItem()).stream(); -+ //Forge -+ return Reflector.ForgeItem_getTags.exists() ? ((Set)Reflector.call(p_91121_.getItem(), Reflector.ForgeItem_getTags)).stream() : ItemTags.getAllTags().getMatchingTags(p_91121_.getItem()).stream(); -+ // - }); - NonNullList nonnulllist = NonNullList.create(); - -@@ -848,17 +1051,43 @@ - if (pReport.getSaveFile() != null) - { - Bootstrap.realStdoutPrintln("#@!@# Game crashed! Crash report saved to: #@!@# " + pReport.getSaveFile()); -- System.exit(-1); -+ //Forge -+ if (Reflector.ServerLifecycleHooks_handleExit.exists()) -+ { -+ Reflector.call(Reflector.ServerLifecycleHooks_handleExit, -1); -+ } -+ else -+ { -+ System.exit(-1); -+ } -+ // - } - else if (pReport.saveToFile(file2)) - { - Bootstrap.realStdoutPrintln("#@!@# Game crashed! Crash report saved to: #@!@# " + file2.getAbsolutePath()); -- System.exit(-1); -+ //Forge -+ if (Reflector.ServerLifecycleHooks_handleExit.exists()) -+ { -+ Reflector.call(Reflector.ServerLifecycleHooks_handleExit, -1); -+ } -+ else -+ { -+ System.exit(-1); -+ } -+ // - } - else - { - Bootstrap.realStdoutPrintln("#@?@# Game crashed! Crash report could not be saved. #@?@#"); -- System.exit(-2); -+ -+ if (Reflector.ServerLifecycleHooks_handleExit.exists()) -+ { -+ Reflector.call(Reflector.ServerLifecycleHooks_handleExit, -2); -+ } -+ else -+ { -+ System.exit(-2); -+ } - } - } - -@@ -899,6 +1128,22 @@ - - this.setOverlay(new LoadingOverlay(this, this.resourceManager.createReload(Util.backgroundExecutor(), this, RESOURCE_RELOAD_INITIAL_TASK, list), (p_91252_) -> - { -+ //Vivecraft -+ if (this.menuWorldRenderer.isReady() && this.resourcePacksChanged) -+ { -+ try -+ { -+ this.menuWorldRenderer.destroy(); -+ this.menuWorldRenderer.prepare(); -+ } -+ catch (Exception exception) -+ { -+ exception.printStackTrace(); -+ } -+ } -+ -+ this.resourcePacksChanged = false; -+ // - Util.ifElse(p_91252_, this::rollbackResourcePacks, () -> { - this.levelRenderer.allChanged(); - this.reloadStateTracker.finishReload(); -@@ -1003,10 +1248,12 @@ - LOGGER.error("setScreen called from non-game thread"); - } - -- if (this.screen != null) -- { -- this.screen.removed(); -- } -+ //Forge -+ //if (this.screen != null) -+ //{ -+ // this.screen.removed(); -+ //} -+ // - - if (pGuiScreen == null && this.level == null) - { -@@ -1024,6 +1271,28 @@ - } - } - -+ //Forge -+ Reflector.call(Reflector.ForgeHooksClient_clearGuiLayers); -+ Screen screen = this.screen; -+ Object object = Reflector.newInstance(Reflector.ScreenOpenEvent_Constructor, pGuiScreen); -+ if (object != null) -+ { -+ if (Reflector.postForgeBusEvent(object)) -+ { -+ return; -+ } -+ -+ pGuiScreen = (Screen)Reflector.call(object, Reflector.ScreenOpenEvent_getScreen); -+ } -+ -+ if (screen != null && pGuiScreen != screen) -+ screen.removed(); -+ // -+ -+ // VIVECRAFT -+ GuiHandler.onScreenChanged(this.screen, pGuiScreen, true); -+ // VIVECRAFT -+ - this.screen = pGuiScreen; - BufferUploader.reset(); - -@@ -1086,6 +1355,14 @@ - { - Util.timeSource = System::nanoTime; - -+ try -+ { -+ this.vr.destroy(); -+ } -+ catch (Exception exception) -+ { -+ } -+ - if (this.delayedCrash == null) - { - System.exit(0); -@@ -1121,11 +1398,11 @@ - this.window.close(); - } - } -- -+ -+ //Mojang why would you name it this. This is runGameLoop - private void runTick(boolean pRenderLevel) - { - this.window.setErrorSection("Pre render"); -- long i = Util.getNanos(); - - if (this.window.shouldClose()) - { -@@ -1151,79 +1428,258 @@ - - if (pRenderLevel) - { -+ this.options.ofFastRender = false; -+ ++this.frameIndex; - int j = this.timer.advanceTime(Util.getMillis()); - this.profiler.push("scheduledExecutables"); - this.runAllTasks(); - this.profiler.pop(); -+ -+ try { -+ this.vrRenderer.setupRenderConfiguration(); -+ } -+ catch (RenderConfigException renderconfigexception) -+ { -+ this.screen = null; -+ GlStateManager._viewport(0, 0, this.window.getScreenWidth(), this.window.getScreenHeight()); -+ -+ if (this.overlay != null) -+ { -+ RenderSystem.clear(256, ON_OSX); -+ Matrix4f matrix4f = Matrix4f.orthographic((float)(this.window.getScreenWidth() / this.window.getGuiScale()), (float)(this.window.getScreenHeight() / this.window.getGuiScale()), 1000.0F, 3000.0F); -+ RenderSystem.setProjectionMatrix(matrix4f); -+ PoseStack p = new PoseStack(); -+ p.translate(0, 0, -2000); -+ this.overlay.render(p, 0, 0, 0.0F); -+ } -+ else -+ { -+ this.notifyMirror(LangHelper.get("vivecraft.messages.rendersetupfailed", renderconfigexception.error), true, 10000); -+ this.drawNotifyMirror(); -+ -+ if (this.frameIndex % 300L == 0L) -+ { -+ System.out.println(renderconfigexception.title + " " + renderconfigexception.error); -+ } -+ -+ try -+ { -+ Thread.sleep(10L); -+ } -+ catch (InterruptedException interruptedexception) -+ { -+ } -+ } -+ -+ this.window.updateDisplay(); -+ return; -+ } -+ catch (Exception exception2) -+ { -+ exception2.printStackTrace(); -+ } -+ -+ this.profiler.push("VR Poll/VSync"); -+ this.vr.poll(this.frameIndex); -+ this.profiler.pop(); -+ this.vrPlayer.postPoll(); - this.profiler.push("tick"); - - for (int k = 0; k < Math.min(10, j); ++k) - { - this.profiler.incrementCounter("clientTick"); -+ this.vrPlayer.preTick(); - this.tick(); -+ this.vrPlayer.postTick(); - } - - this.profiler.pop(); - } - -+ this.options.ofFastRender = false; -+ this.profiler.push("setupRenderConfiguration"); - this.mouseHandler.turnPlayer(); - this.window.setErrorSection("Render"); - this.profiler.push("sound"); - this.soundManager.updateSource(this.gameRenderer.getMainCamera()); - this.profiler.pop(); -- this.profiler.push("render"); -- PoseStack posestack = RenderSystem.getModelViewStack(); -- posestack.pushPose(); -- RenderSystem.applyModelViewMatrix(); -- RenderSystem.clear(16640, ON_OSX); -- this.mainRenderTarget.bindWrite(true); -+ try -+ { -+ this.checkGLError("pre render setup "); -+ this.vrRenderer.setupRenderConfiguration(); -+ this.checkGLError("post render setup "); -+ } -+ catch (Exception exception1) -+ { -+ exception1.printStackTrace(); -+ } -+ -+ float f = this.pause ? this.pausePartialTick : this.timer.partialTick; -+ this.profiler.popPush("preRender"); -+ this.vrPlayer.preRender(f); -+ this.profiler.popPush("2D"); -+ -+ //PoseStack posestack = RenderSystem.getModelViewStack(); -+ //posestack.pushPose(); -+ //RenderSystem.applyModelViewMatrix(); -+ //RenderSystem.clear(16640, ON_OSX); -+ //this.mainRenderTarget.bindWrite(true); - FogRenderer.setupNoFog(); -- this.profiler.push("display"); - RenderSystem.enableTexture(); - RenderSystem.enableCull(); -- this.profiler.pop(); -+ this.profiler.push("Gui"); -+ this.currentPass = RenderPass.GUI; -+ this.gameRenderer.getMainCamera().setup(this.level, this.getCameraEntity(), false, false, f); - - if (!this.noRender) - { -- this.profiler.popPush("gameRenderer"); -- this.gameRenderer.render(this.pause ? this.pausePartialTick : this.timer.partialTick, i, pRenderLevel); -- this.profiler.popPush("toasts"); -- this.toast.render(new PoseStack()); -- this.profiler.pop(); -+ Reflector.call(Reflector.BasicEventHooks_onRenderTickStart, f); - } - -- if (this.fpsPieResults != null) -+ GlStateManager._depthMask(true); -+ GlStateManager._colorMask(true, true, true, true); -+ this.mainRenderTarget = GuiHandler.guiFramebuffer; -+ this.mainRenderTarget.clear(Minecraft.ON_OSX); -+ this.mainRenderTarget.bindWrite(true); -+ this.gameRenderer.drawFramebufferNEW(f, pRenderLevel, new PoseStack()); -+ -+ if (org.vivecraft.gameplay.screenhandlers.KeyboardHandler.Showing && !this.vrSettings.physicalKeyboard) - { -- this.profiler.push("fpsPie"); -- this.renderFpsMeter(new PoseStack(), this.fpsPieResults); -- this.profiler.pop(); -+ this.mainRenderTarget = org.vivecraft.gameplay.screenhandlers.KeyboardHandler.Framebuffer; -+ this.mainRenderTarget.clear(Minecraft.ON_OSX); -+ this.mainRenderTarget.bindWrite(true); -+ this.gameRenderer.drawScreen(f, org.vivecraft.gameplay.screenhandlers.KeyboardHandler.UI, new PoseStack()); - } - -- this.profiler.push("blit"); -- this.mainRenderTarget.unbindWrite(); -- posestack.popPose(); -- posestack.pushPose(); -- RenderSystem.applyModelViewMatrix(); -- this.mainRenderTarget.blitToScreen(this.window.getWidth(), this.window.getHeight()); -- posestack.popPose(); -- RenderSystem.applyModelViewMatrix(); -- this.profiler.popPush("updateDisplay"); -- this.window.updateDisplay(); -+ if (RadialHandler.isShowing()) -+ { -+ this.mainRenderTarget = RadialHandler.Framebuffer; -+ this.mainRenderTarget.clear(Minecraft.ON_OSX); -+ this.mainRenderTarget.bindWrite(true); -+ this.gameRenderer.drawScreen(f, RadialHandler.UI, new PoseStack()); -+ } -+ -+ this.checkGLError("post 2d "); -+ VRHotkeys.updateMovingThirdPersonCam(); -+ this.profiler.popPush("sound"); -+ this.currentPass = RenderPass.CENTER; -+ this.soundManager.updateSource(this.gameRenderer.getMainCamera()); -+ this.profiler.pop(); - int i1 = this.getFramerateLimit(); - -- if ((double)i1 < Option.FRAMERATE_LIMIT.getMaxValue()) -+ if (!this.noRender) - { -- RenderSystem.limitDisplayFPS(i1); -+ List list = this.vrRenderer.getRenderPasses(); -+ -+ for (RenderPass renderpass : list) -+ { -+ this.currentPass = renderpass; -+ -+ switch (renderpass) -+ { -+ case LEFT: -+ case RIGHT: -+ this.mainRenderTarget = this.vrRenderer.framebufferVrRender; -+ break; -+ -+ case CENTER: -+ this.mainRenderTarget = this.vrRenderer.framebufferUndistorted; -+ break; -+ -+ case THIRD: -+ this.mainRenderTarget = this.vrRenderer.framebufferMR; -+ break; -+ -+ case SCOPEL: -+ this.mainRenderTarget = this.vrRenderer.telescopeFramebufferL; -+ break; -+ -+ case SCOPER: -+ this.mainRenderTarget = this.vrRenderer.telescopeFramebufferR; -+ break; -+ -+ case CAMERA: -+ this.mainRenderTarget = this.vrRenderer.cameraRenderFramebuffer; -+ } -+ -+ this.profiler.push("Eye:" + this.currentPass.ordinal()); -+ this.profiler.push("setup"); -+ this.mainRenderTarget.bindWrite(true); -+ this.profiler.pop(); -+ this.renderSingleView(renderpass.ordinal(), f, pRenderLevel); -+ this.profiler.pop(); -+ -+ if (this.grabScreenShot) -+ { -+ boolean flag; -+ -+ if (list.contains(RenderPass.CAMERA)) -+ { -+ flag = renderpass == RenderPass.CAMERA; -+ } -+ else if (list.contains(RenderPass.CENTER)) -+ { -+ flag = renderpass == RenderPass.CENTER; -+ } -+ else -+ { -+ flag = this.vrSettings.displayMirrorLeftEye ? renderpass == RenderPass.LEFT : renderpass == RenderPass.RIGHT; -+ } -+ -+ if (flag) -+ { -+ RenderTarget rendertarget = this.mainRenderTarget; -+ -+ if (renderpass == RenderPass.CAMERA) -+ { -+ rendertarget = this.vrRenderer.cameraFramebuffer; -+ } -+ -+ this.mainRenderTarget.unbindWrite(); -+ Utils.takeScreenshot(rendertarget); -+ this.window.updateDisplay(); -+ this.grabScreenShot = false; -+ } -+ } -+ } -+ -+ if (pRenderLevel) -+ { -+ this.vrPlayer.postRender(f); -+ this.profiler.push("Display/Reproject"); -+ -+ try -+ { -+ this.vrRenderer.endFrame(); -+ } -+ catch (Exception exception) -+ { -+ LOGGER.error(exception.toString()); -+ } -+ -+ this.profiler.pop(); -+ this.checkGLError("post submit "); -+ } -+ -+ if (!this.noRender) -+ { -+ Reflector.call(Reflector.BasicEventHooks_onRenderTickEnd, f); -+ } -+ -+ this.profiler.push("mirror"); -+ this.mainRenderTarget.unbindWrite(); -+ this.copyToMirror(); -+ this.drawNotifyMirror(); -+ this.checkGLError("post-mirror "); -+ this.profiler.pop(); - } - -- this.profiler.popPush("yield"); -- Thread.yield(); -- this.profiler.pop(); - this.window.setErrorSection("Post render"); -+ this.window.updateDisplay(); - ++this.frames; -- boolean flag = this.hasSingleplayerServer() && (this.screen != null && this.screen.isPauseScreen() || this.overlay != null && this.overlay.isPauseScreen()) && !this.singleplayerServer.isPublished(); -+ boolean flag1 = this.hasSingleplayerServer() && (this.screen != null && this.screen.isPauseScreen() || this.overlay != null && this.overlay.isPauseScreen()) && !this.singleplayerServer.isPublished(); - -- if (this.pause != flag) -+ if (this.pause != flag1) - { - if (this.pause) - { -@@ -1234,12 +1690,12 @@ - this.timer.partialTick = this.pausePartialTick; - } - -- this.pause = flag; -+ this.pause = flag1; - } - -- long l = Util.getNanos(); -- this.frameTimer.logFrameDuration(l - this.lastNanoTime); -- this.lastNanoTime = l; -+ long k = Util.getNanos(); -+ this.frameTimer.logFrameDuration(k - this.lastNanoTime); -+ this.lastNanoTime = k; - this.profiler.push("fpsUpdate"); - - while (Util.getMillis() >= this.lastTime + 1000L) -@@ -1249,7 +1705,6 @@ - this.lastTime += 1000L; - this.frames = 0; - } -- - this.profiler.pop(); - } - -@@ -1320,14 +1775,19 @@ - int i = this.window.calculateScale(this.options.guiScale, this.isEnforceUnicode()); - this.window.setGuiScale((double)i); - -+ if (this.vrRenderer != null) -+ { -+ this.vrRenderer.reinitFrameBuffers("Main Window Changed"); -+ } -+ - if (this.screen != null) - { - this.screen.resize(this, this.window.getGuiScaledWidth(), this.window.getGuiScaledHeight()); -+ //FORGE -+ Reflector.call(Reflector.ForgeHooksClient_resizeGuiLayers, this, this.window.getGuiScaledWidth(), this.window.getGuiScaledHeight()); -+ // - } - -- RenderTarget rendertarget = this.getMainRenderTarget(); -- rendertarget.resize(this.window.getWidth(), this.window.getHeight(), ON_OSX); -- this.gameRenderer.resize(this.window.getWidth(), this.window.getHeight()); - this.mouseHandler.setIgnoreFirstMove(); - } - -@@ -1338,7 +1798,7 @@ - - private int getFramerateLimit() - { -- return this.level != null || this.screen == null && this.overlay == null ? this.window.getFramerateLimit() : 60; -+ return this.level == null && (this.screen != null || this.overlay != null) ? 60 : this.window.getFramerateLimit(); - } - - public void emergencySave() -@@ -1555,6 +2015,17 @@ - } - } - -+//Vivecraft -+ public void drawProfiler() -+ { -+ if (this.fpsPieResults != null) -+ { -+ this.profiler.push("fpsPie"); -+ this.renderFpsMeter(new PoseStack(), this.fpsPieResults); -+ this.profiler.pop(); -+ } -+ } -+// - private void renderFpsMeter(PoseStack pPoseStack, ProfileResults pProfilerResult) - { - List list = pProfilerResult.getTimes(this.debugPath); -@@ -1711,19 +2182,47 @@ - { - BlockHitResult blockhitresult = (BlockHitResult)this.hitResult; - BlockPos blockpos = blockhitresult.getBlockPos(); -+ Object object = null; - -- if (!this.level.getBlockState(blockpos).isAir()) -+ if (!this.level.isEmptyBlock(blockpos)) - { -- Direction direction = blockhitresult.getDirection(); -+ //Forge -+ object = Reflector.call(Reflector.ForgeHooksClient_OnClickInput, 0, this.options.keyAttack, InteractionHand.MAIN_HAND); -+ -+ if (object != null && Reflector.callBoolean(object, Reflector.Event_isCanceled)) -+ { -+ if (Reflector.callBoolean(object, Reflector.ClickInputEvent_shouldSwingHand)) -+ { -+ this.particleEngine.addBlockHitEffects(blockpos, blockhitresult); -+ this.player.swingArm(InteractionHand.MAIN_HAND, VRFirstPersonArmSwing.Attack); -+ } - -+ return; -+ } -+ // -+ -+ Direction direction = blockhitresult.getDirection(); -+ //Forge - if (this.gameMode.continueDestroyBlock(blockpos, direction)) - { -- this.particleEngine.crack(blockpos, direction); -- this.player.swing(InteractionHand.MAIN_HAND); -+ if (object != null) -+ { -+ if (Reflector.callBoolean(object, Reflector.ClickInputEvent_shouldSwingHand)) -+ { -+ this.particleEngine.addBlockHitEffects(blockpos, blockhitresult); -+ this.player.swingArm(InteractionHand.MAIN_HAND, VRFirstPersonArmSwing.Attack); -+ } -+ } -+ else -+ { -+ this.particleEngine.crack(blockpos, direction); -+ this.player.swingArm(InteractionHand.MAIN_HAND, VRFirstPersonArmSwing.Attack); -+ } - } -+ // - } - } -- else -+ else if (this.vrSettings.seated) - { - this.gameMode.stopDestroyBlock(); - } -@@ -1745,42 +2244,59 @@ - } - else if (!this.player.isHandsBusy()) - { -- switch (this.hitResult.getType()) -+ Object object = Reflector.call(Reflector.ForgeHooksClient_OnClickInput, 0, this.options.keyAttack, InteractionHand.MAIN_HAND); -+ -+ if (object == null || !Reflector.callBoolean(object, Reflector.Event_isCanceled)) - { -- case ENTITY: -- this.gameMode.attack(this.player, ((EntityHitResult)this.hitResult).getEntity()); -- break; -+ switch (this.hitResult.getType()) -+ { -+ case ENTITY: -+ this.gameMode.attack(this.player, ((EntityHitResult)this.hitResult).getEntity()); -+ break; - -- case BLOCK: -- BlockHitResult blockhitresult = (BlockHitResult)this.hitResult; -- BlockPos blockpos = blockhitresult.getBlockPos(); -+ case BLOCK: -+ BlockHitResult blockhitresult = (BlockHitResult)this.hitResult; -+ BlockPos blockpos = blockhitresult.getBlockPos(); - -- if (!this.level.getBlockState(blockpos).isAir()) -- { -- this.gameMode.startDestroyBlock(blockpos, blockhitresult.getDirection()); -- break; -- } -+ if (!this.level.isEmptyBlock(blockpos)) -+ { -+ this.gameMode.startDestroyBlock(blockpos, blockhitresult.getDirection()); -+ break; -+ } - -- case MISS: -- if (this.gameMode.hasMissTime()) -- { -- this.missTime = 10; -- } -+ case MISS: -+ if (this.gameMode.hasMissTime()) -+ { -+ this.missTime = 10; -+ } - -- this.player.resetAttackStrengthTicker(); -+ this.player.resetAttackStrengthTicker(); -+ Reflector.call(Reflector.ForgeHooks_onEmptyLeftClick, this.player); -+ } - } - -- this.player.swing(InteractionHand.MAIN_HAND); -+ if (object == null || Reflector.callBoolean(object, Reflector.ClickInputEvent_shouldSwingHand)) -+ { -+ this.player.swing(InteractionHand.MAIN_HAND); -+ } - } - } - } - -- private void startUseItem() -+ public void startUseItem() - { -- if (!this.gameMode.isDestroying()) -+ if (!this.gameMode.isDestroying() || !this.vrSettings.seated) - { -- this.rightClickDelay = 4; -- -+ -+ if(vrSettings.rightclickDelay == VRSettings.RightClickDelay.VANILLA) -+ this.rightClickDelay = 4; -+ else if(vrSettings.rightclickDelay == VRSettings.RightClickDelay.SLOW) -+ this.rightClickDelay = 6; -+ else if(vrSettings.rightclickDelay == VRSettings.RightClickDelay.SLOWER) -+ this.rightClickDelay = 8; -+ else if(vrSettings.rightclickDelay == VRSettings.RightClickDelay.SLOWEST) -+ this.rightClickDelay = 10; -+ - if (!this.player.isHandsBusy()) - { - if (this.hitResult == null) -@@ -1790,80 +2306,108 @@ - - for (InteractionHand interactionhand : InteractionHand.values()) - { -- ItemStack itemstack = this.player.getItemInHand(interactionhand); -+ Object object = Reflector.call(Reflector.ForgeHooksClient_OnClickInput, 1, this.options.keyUse, interactionhand); - -- if (this.hitResult != null) -+ if (object != null && Reflector.callBoolean(object, Reflector.Event_isCanceled)) - { -- switch (this.hitResult.getType()) -+ if (Reflector.callBoolean(object, Reflector.ClickInputEvent_shouldSwingHand)) - { -- case ENTITY: -- EntityHitResult entityhitresult = (EntityHitResult)this.hitResult; -- Entity entity = entityhitresult.getEntity(); -+ this.player.swing(interactionhand); -+ } - -- if (!this.level.getWorldBorder().isWithinBounds(entity.blockPosition())) -- { -- return; -- } -+ return; -+ } - -- InteractionResult interactionresult = this.gameMode.interactAt(this.player, entity, entityhitresult, interactionhand); -+ ItemStack itemstack = this.player.getItemInHand(interactionhand); - -- if (!interactionresult.consumesAction()) -- { -- interactionresult = this.gameMode.interact(this.player, entity, interactionhand); -- } -+ if (vrSettings.seated || !TelescopeTracker.isTelescope(itemstack)) -+ { -+ NetworkHelper.sendActiveHand((byte)interactionhand.ordinal()); - -- if (interactionresult.consumesAction()) -- { -- if (interactionresult.shouldSwing()) -+ if (this.hitResult != null) -+ { -+ switch (this.hitResult.getType()) -+ { -+ case ENTITY: -+ //this.physicalGuiManager.preClickAction(); -+ EntityHitResult entityhitresult = (EntityHitResult)this.hitResult; -+ Entity entity = entityhitresult.getEntity(); -+ -+ if (!this.level.getWorldBorder().isWithinBounds(entity.blockPosition())) -+ { -+ return; -+ } -+ -+ InteractionResult interactionresult = this.gameMode.interactAt(this.player, entity, entityhitresult, interactionhand); -+ -+ if (!interactionresult.consumesAction()) - { -- this.player.swing(interactionhand); -+ interactionresult = this.gameMode.interact(this.player, entity, interactionhand); - } - -- return; -- } -+ if (interactionresult.consumesAction()) -+ { -+ if (interactionresult.shouldSwing() && (object == null || Reflector.callBoolean(object, Reflector.ClickInputEvent_shouldSwingHand))) -+ { -+ this.player.swingArm(interactionhand, VRFirstPersonArmSwing.Use); -+ } - -- break; -+ return; -+ } - -- case BLOCK: -- BlockHitResult blockhitresult = (BlockHitResult)this.hitResult; -- int i = itemstack.getCount(); -- InteractionResult interactionresult1 = this.gameMode.useItemOn(this.player, this.level, interactionhand, blockhitresult); -+ break; - -- if (interactionresult1.consumesAction()) -- { -- if (interactionresult1.shouldSwing()) -- { -- this.player.swing(interactionhand); -+ case BLOCK: -+ BlockHitResult blockhitresult = (BlockHitResult)this.hitResult; -+ int i = itemstack.getCount(); -+ InteractionResult interactionresult1 = this.gameMode.useItemOn(this.player, this.level, interactionhand, blockhitresult); - -- if (!itemstack.isEmpty() && (itemstack.getCount() != i || this.gameMode.hasInfiniteItems())) -+ if (interactionresult1.consumesAction()) -+ { -+ if (interactionresult1.shouldSwing()) - { -- this.gameRenderer.itemInHandRenderer.itemUsed(interactionhand); -+ if (object == null || Reflector.callBoolean(object, Reflector.ClickInputEvent_shouldSwingHand)) -+ { -+ this.player.swingArm(interactionhand, VRFirstPersonArmSwing.Use); -+ } -+ -+ if (!itemstack.isEmpty() && (itemstack.getCount() != i || this.gameMode.hasInfiniteItems())) -+ { -+ this.gameRenderer.itemInHandRenderer.itemUsed(interactionhand); -+ } - } -+ -+ return; - } - -- return; -- } -+ if (interactionresult1 == InteractionResult.FAIL) -+ { -+ return; -+ } -+ } -+ } - -- if (interactionresult1 == InteractionResult.FAIL) -- { -- return; -- } -- } -- } -+ //this.physicalGuiManager.preClickAction(); - -- if (!itemstack.isEmpty()) -- { -- InteractionResult interactionresult2 = this.gameMode.useItem(this.player, this.level, interactionhand); -+ if (itemstack.isEmpty() && (this.hitResult == null || this.hitResult.getType() == HitResult.Type.MISS)) -+ { -+ Reflector.call(Reflector.ForgeHooks_onEmptyClick, this.player, interactionhand); -+ } - -- if (interactionresult2.consumesAction()) -+ if (!itemstack.isEmpty()) - { -- if (interactionresult2.shouldSwing()) -+ InteractionResult interactionresult2 = this.gameMode.useItem(this.player, this.level, interactionhand); -+ -+ if (interactionresult2.consumesAction()) - { -- this.player.swing(interactionhand); -- } -+ if (interactionresult2.shouldSwing()) -+ { -+ this.player.swingArm(interactionhand, VRFirstPersonArmSwing.Use); -+ } - -- this.gameRenderer.itemInHandRenderer.itemUsed(interactionhand); -- return; -+ this.gameRenderer.itemInHandRenderer.itemUsed(interactionhand); -+ return; -+ } - } - } - } -@@ -1878,15 +2422,18 @@ - - public void tick() - { -+ ++this.tickCounter; -+ - if (this.rightClickDelay > 0) - { - --this.rightClickDelay; - } -- -+ //Forge -+ Reflector.call(Reflector.BasicEventHooks_onPreClientTick); -+ // - this.profiler.push("gui"); - this.gui.tick(this.pause); - this.profiler.pop(); -- this.gameRenderer.pick(1.0F); - this.tutorial.onLookAt(this.level, this.hitResult); - this.profiler.push("gameMode"); - -@@ -1896,11 +2443,7 @@ - } - - this.profiler.popPush("textures"); -- -- if (this.level != null) -- { -- this.textureManager.tick(); -- } -+ this.textureManager.tick(); - - if (this.screen == null && this.player != null) - { -@@ -1946,6 +2489,10 @@ - this.gui.clearCache(); - } - -+ this.profiler.popPush("vrProcessInputs"); -+ this.vr.processInputs(); -+ this.vr.processBindings(); -+ - if (this.overlay == null && (this.screen == null || this.screen.passEvents)) - { - this.profiler.popPush("Keybindings"); -@@ -1957,8 +2504,30 @@ - } - } - -+ this.profiler.popPush("vrInputActionsTick"); -+ -+ for (VRInputAction vrinputaction : this.vr.getInputActions()) -+ { -+ vrinputaction.tick(); -+ } -+ -+ if (this.vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY || this.vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON) -+ { -+ VRHotkeys.handleMRKeys(); -+ } -+ - if (this.level != null) - { -+ if (this.player != null) -+ { -+ this.vrPlayer.updateFreeMove(); -+ -+ if (this.vrPlayer.teleportWarningTimer >= 0 && --this.vrPlayer.teleportWarningTimer == 0) -+ { -+ this.gui.getChat().addMessage(new TranslatableComponent("vivecraft.messages.noserverplugin")); -+ } -+ } -+ - this.profiler.popPush("gameRenderer"); - - if (!this.pause) -@@ -1990,6 +2559,13 @@ - this.gameRenderer.shutdownEffect(); - } - -+ if (this.menuWorldRenderer != null) -+ { -+ this.menuWorldRenderer.tick(); -+ } -+ -+ PlayerModelController.getInstance().tick(); -+ - if (!this.pause) - { - this.musicManager.tick(); -@@ -2061,24 +2637,23 @@ - this.profiler.popPush("keyboard"); - this.keyboardHandler.tick(); - this.profiler.pop(); -+ //Forge -+ Reflector.call(Reflector.BasicEventHooks_onPostClientTick); -+ // - } - -- private boolean isMultiplayerServer() -+ public boolean isMultiplayerServer() - { - return !this.isLocalServer || this.singleplayerServer != null && this.singleplayerServer.isPublished(); - } - - private void handleKeybinds() - { -- for (; this.options.keyTogglePerspective.consumeClick(); this.levelRenderer.needsUpdate()) -+ while (this.options.keyTogglePerspective.consumeClick()) - { -- CameraType cameratype = this.options.getCameraType(); -- this.options.setCameraType(this.options.getCameraType().cycle()); -- -- if (cameratype.isFirstPerson() != this.options.getCameraType().isFirstPerson()) -- { -- this.gameRenderer.checkEntityPostEffect(this.options.getCameraType().isFirstPerson() ? this.getCameraEntity() : null); -- } -+ this.vrSettings.setOptionValue(VRSettings.VrOptions.MIRROR_DISPLAY); -+ this.notifyMirror(this.vrSettings.getButtonDisplayString(VRSettings.VrOptions.MIRROR_DISPLAY), false, 3000); -+ this.levelRenderer.needsUpdate(); - } - - while (this.options.keySmoothCamera.consumeClick()) -@@ -2157,7 +2732,7 @@ - { - if (!this.player.isSpectator() && this.player.drop(Screen.hasControlDown())) - { -- this.player.swing(InteractionHand.MAIN_HAND); -+ this.player.swingArm(InteractionHand.MAIN_HAND, VRFirstPersonArmSwing.Attack); - } - } - -@@ -2173,8 +2748,9 @@ - - if (this.player.isUsingItem()) - { -- if (!this.options.keyUse.isDown()) -+ if (!this.options.keyUse.isDown() && (!this.bowTracker.isActive(this.player) || this.vrSettings.seated) && !this.autoFood.isEating()) - { -+ NetworkHelper.sendActiveHand((byte)this.player.getUsedItemHand().ordinal()); - this.gameMode.releaseUsingItem(this.player); - } - -@@ -2192,9 +2768,21 @@ - } - else - { -- while (this.options.keyAttack.consumeClick()) -+ if (this.options.keyAttack.consumeClick() && this.screen == null) - { - this.startAttack(); -+ this.lastClick = true; -+ } -+ else if (!this.options.keyAttack.isDown()) -+ { -+ this.missTime = 0; -+ -+ if (this.lastClick) -+ { -+ this.gameMode.stopDestroyBlock(); -+ } -+ -+ this.lastClick = false; - } - - while (this.options.keyUse.consumeClick()) -@@ -2213,7 +2801,7 @@ - this.startUseItem(); - } - -- this.continueAttack(this.screen == null && this.options.keyAttack.isDown() && this.mouseHandler.isMouseGrabbed()); -+ this.continueAttack(this.screen == null && this.options.keyAttack.isDown()); - } - - public static DataPackConfig loadDataPacks(LevelStorageSource.LevelStorageAccess p_91134_) -@@ -2252,7 +2840,9 @@ - - public void loadLevel(String pLevelName) - { -- this.doLoadLevel(pLevelName, RegistryAccess.builtin(), Minecraft::loadDataPacks, Minecraft::loadWorldData, false, Minecraft.ExperimentalDialogType.BACKUP); -+ //Forge -+ this.doLoadLevel(pLevelName, RegistryAccess.builtin(), Minecraft::loadDataPacks, Minecraft::loadWorldData, false, Minecraft.ExperimentalDialogType.BACKUP, false); -+ // - } - - public void createLevel(String pLevelName, LevelSettings pLevelSettings, RegistryAccess.RegistryHolder pDynamicRegistries, WorldGenSettings pDimensionGeneratorSettings) -@@ -2269,10 +2859,10 @@ - }); - WorldGenSettings worldgensettings = dataresult.resultOrPartial(Util.prefix("Error reading worldgen settings after loading data packs: ", LOGGER::error)).orElse(pDimensionGeneratorSettings); - return new PrimaryLevelData(pLevelSettings, worldgensettings, dataresult.lifecycle()); -- }, false, Minecraft.ExperimentalDialogType.CREATE); -+ }, false, Minecraft.ExperimentalDialogType.CREATE, true); - } -- -- private void doLoadLevel(String pLevelName, RegistryAccess.RegistryHolder pDynamicRegistries, Function pLevelSaveToDatapackFunction, Function4 pQuadFunction, boolean pVanillaOnly, Minecraft.ExperimentalDialogType pSelectionType) -+ //Forge change sig -+ private void doLoadLevel(String pLevelName, RegistryAccess.RegistryHolder pDynamicRegistries, Function pLevelSaveToDatapackFunction, Function4 pQuadFunction, boolean pVanillaOnly, Minecraft.ExperimentalDialogType pSelectionType, boolean creating) - { - LevelStorageSource.LevelStorageAccess levelstoragesource$levelstorageaccess; - -@@ -2289,17 +2879,24 @@ - } - - Minecraft.ServerStem minecraft$serverstem; -- -+ //Forge -+ final RegistryAccess.RegistryHolder dyn_f; - try - { -- minecraft$serverstem = this.makeServerStem(pDynamicRegistries, pLevelSaveToDatapackFunction, pQuadFunction, pVanillaOnly, levelstoragesource$levelstorageaccess); -+ //minecraft$serverstem = this.makeServerStem(pDynamicRegistries, pLevelSaveToDatapackFunction, pQuadFunction, pVanillaOnly, levelstoragesource$levelstorageaccess); -+ Minecraft.ServerStem mgr = this.makeServerStem(pDynamicRegistries, pLevelSaveToDatapackFunction, pQuadFunction, pVanillaOnly, levelstoragesource$levelstorageaccess); -+ // We need to rebuild this if we're loading world, so that it gets all the information from AFTER we inject our mappings from the save. -+ dyn_f = creating ? pDynamicRegistries : RegistryAccess.builtin(); -+ minecraft$serverstem = creating ? mgr : this.makeServerStem(dyn_f, pLevelSaveToDatapackFunction, pQuadFunction, pVanillaOnly, levelstoragesource$levelstorageaccess); //Note this runs the injection again... which isn't good.. but hey.. we need a better spot to hook in. - } -+ // - catch (Exception exception) - { - LOGGER.warn("Failed to load datapacks, can't proceed with server load", (Throwable)exception); - this.setScreen(new DatapackLoadFailureScreen(() -> - { -- this.doLoadLevel(pLevelName, pDynamicRegistries, pLevelSaveToDatapackFunction, pQuadFunction, true, pSelectionType); -+ //Forge -+ this.doLoadLevel(pLevelName, pDynamicRegistries, pLevelSaveToDatapackFunction, pQuadFunction, true, pSelectionType, creating); - })); - - try -@@ -2325,7 +2922,9 @@ - - try - { -- levelstoragesource$levelstorageaccess.saveDataTag(pDynamicRegistries, worlddata); -+ //Forge -+ levelstoragesource$levelstorageaccess.saveDataTag(dyn_f, worlddata); -+ // - minecraft$serverstem.serverResources().updateGlobals(); - YggdrasilAuthenticationService yggdrasilauthenticationservice = new YggdrasilAuthenticationService(this.proxy); - MinecraftSessionService minecraftsessionservice = yggdrasilauthenticationservice.createMinecraftSessionService(); -@@ -2336,7 +2935,9 @@ - GameProfileCache.setUsesAuthentication(false); - this.singleplayerServer = MinecraftServer.spin((p_167898_) -> - { -- return new IntegratedServer(p_167898_, this, pDynamicRegistries, levelstoragesource$levelstorageaccess, minecraft$serverstem.packRepository(), minecraft$serverstem.serverResources(), worlddata, minecraftsessionservice, gameprofilerepository, gameprofilecache, (p_168000_) -> { -+ //Forge -+ return new IntegratedServer(p_167898_, this, dyn_f, levelstoragesource$levelstorageaccess, minecraft$serverstem.packRepository(), minecraft$serverstem.serverResources(), worlddata, minecraftsessionservice, gameprofilerepository, gameprofilecache, (p_168000_) -> { -+ // - StoringChunkProgressListener storingchunkprogresslistener = new StoringChunkProgressListener(p_168000_ + 0); - this.progressListener.set(storingchunkprogresslistener); - return ProcessorChunkProgressListener.createStarted(storingchunkprogresslistener, this.progressTasks::add); -@@ -2389,14 +2990,24 @@ - { - })); - connection.send(new ClientIntentionPacket(socketaddress.toString(), 0, ConnectionProtocol.LOGIN)); -- connection.send(new ServerboundHelloPacket(this.getUser().getGameProfile())); -+ -+ //Forge -+ com.mojang.authlib.GameProfile gameProfile = this.getUser().getGameProfile(); -+ if((Reflector.ForgeSession_hasCachedProperties.exists() && !Reflector.callBoolean(this.getUser(),Reflector.ForgeSession_hasCachedProperties))) { -+ gameProfile = minecraftSessionService.fillProfileProperties(gameProfile, true); //Forge: Fill profile properties upon game load. Fixes MC-52974. -+ Reflector.call(this.getUser(), Reflector.ForgeSession_setProperties, gameProfile.getProperties()); -+ } -+ connection.send(new ServerboundHelloPacket(gameProfile)); -+ // - this.pendingConnection = connection; - } - else - { - this.displayExperimentalConfirmationDialog(pSelectionType, pLevelName, flag, () -> - { -- this.doLoadLevel(pLevelName, pDynamicRegistries, pLevelSaveToDatapackFunction, pQuadFunction, pVanillaOnly, Minecraft.ExperimentalDialogType.NONE); -+ //Forge -+ this.doLoadLevel(pLevelName, dyn_f, pLevelSaveToDatapackFunction, pQuadFunction, pVanillaOnly, Minecraft.ExperimentalDialogType.NONE, creating); -+ // - }); - minecraft$serverstem.close(); - -@@ -2478,10 +3089,10 @@ - levelstoragesource$levelstorageaccess.close(); - } - } -- catch (IOException ioexception) -+ catch (IOException ioexception1) - { - SystemToast.onWorldDeleteFailure(this, pLevelName); -- LOGGER.error("Failed to delete world {}", pLevelName, ioexception); -+ LOGGER.error("Failed to delete world {}", pLevelName, ioexception1); - } - } - }, new TranslatableComponent("selectWorld.backupQuestion.experimental"), new TranslatableComponent("selectWorld.backupWarning.experimental"), CommonComponents.GUI_PROCEED, CommonComponents.GUI_CANCEL)); -@@ -2511,6 +3122,15 @@ - - public void setLevel(ClientLevel pLevelClient) - { -+ this.vrPlayer.setRoomOrigin(0.0D, 0.0D, 0.0D, true); -+ -+ //Forge -+ if (this.level != null) -+ { -+ Reflector.postForgeBusEvent(Reflector.newInstance(Reflector.WorldEvent_Unload_Constructor, this.level)); -+ } -+ // -+ - ProgressScreen progressscreen = new ProgressScreen(true); - progressscreen.progressStartNoAbort(new TranslatableComponent("connect.joining")); - this.updateScreenAndTick(progressscreen); -@@ -2548,12 +3168,18 @@ - IntegratedServer integratedserver = this.singleplayerServer; - this.singleplayerServer = null; - this.gameRenderer.resetData(); -+ //Forge -+ Reflector.call(Reflector.ClientHooks_firePlayerLogout, this.gameMode, this.player); -+ // - this.gameMode = null; - NarratorChatListener.INSTANCE.clear(); - this.updateScreenAndTick(pScreen); - - if (this.level != null) - { -+ //Forge -+ Reflector.postForgeBusEvent(Reflector.newInstance(Reflector.WorldEvent_Unload_Constructor, this.level)); -+ // - if (integratedserver != null) - { - this.profiler.push("waitForServer"); -@@ -2570,6 +3196,9 @@ - this.gui.onDisconnected(); - this.currentServer = null; - this.isLocalServer = false; -+ //Forge -+ Reflector.call(Reflector.ClientHooks_handleClientWorldClosing, this.level); -+ // - this.game.onLeaveGameSession(); - } - -@@ -2604,6 +3233,7 @@ - this.particleEngine.setLevel(pLevel); - this.blockEntityRenderDispatcher.setLevel(pLevel); - this.updateTitle(); -+ Reflector.call(Reflector.MinecraftForgeClient_clearRenderCache); - } - - public boolean allowsMultiplayer() -@@ -2679,6 +3309,19 @@ - { - if (this.hitResult != null && this.hitResult.getType() != HitResult.Type.MISS) - { -+ //Forge -+ Object object = Reflector.call(Reflector.ForgeHooksClient_OnClickInput, 2, this.options.keyPickItem, InteractionHand.MAIN_HAND); -+ -+ if (object != null && !Reflector.callBoolean(object, Reflector.Event_isCanceled)) -+ { -+ Reflector.call(Reflector.ForgeHooks_onPickBlock, this.hitResult, this.player, this.level); -+ } -+ -+ if (object != null) -+ { -+ return; -+ } -+ // - boolean flag = this.player.getAbilities().instabuild; - BlockEntity blockentity = null; - HitResult.Type hitresult$type = this.hitResult.getType(); -@@ -2767,6 +3410,8 @@ - } - } - } -+ -+ //this.physicalGuiManager.init(this.player); - } - - private ItemStack addCustomNbtData(ItemStack pStack, BlockEntity pTe) -@@ -3384,8 +4029,14 @@ - return this.renderBuffers; - } - -+ //Vanilla - private static Pack createClientPackAdapter(String p_167934_, Component p_167935_, boolean p_167936_, Supplier p_167937_, PackMetadataSection p_167938_, Pack.Position p_167939_, PackSource p_167940_) - { -+ return createClientPackAdapter(p_167934_, p_167935_, p_167936_, p_167937_, p_167938_, p_167939_, p_167940_, false); -+ } -+ //Forge change sig -+ private static Pack createClientPackAdapter(String p_167934_, Component p_167935_, boolean p_167936_, Supplier p_167937_, PackMetadataSection p_167938_, Pack.Position p_167939_, PackSource p_167940_, boolean hidden) -+ { - int i = p_167938_.getPackFormat(); - Supplier supplier = p_167937_; - -@@ -3398,8 +4049,12 @@ - { - supplier = adaptV4(supplier); - } -- -- return new Pack(p_167934_, p_167935_, p_167936_, supplier, p_167938_, PackType.CLIENT_RESOURCES, p_167939_, p_167940_); -+ //Forge -+ if(Reflector.ForgePack_Hidden.exists()) -+ return (Pack) Reflector.newInstance(Reflector.ForgePack_Constructor, p_167934_, p_167935_, p_167936_, supplier, p_167938_, PackType.CLIENT_RESOURCES, p_167939_, p_167940_, hidden); -+ else -+ return new Pack(p_167934_, p_167935_, p_167936_, supplier, p_167938_, PackType.CLIENT_RESOURCES, p_167939_, p_167940_); -+ // - } - - private static Supplier adaptV3(Supplier pResourcePackSupplier) -@@ -3484,6 +4139,566 @@ - public abstract boolean isChatAllowed(boolean p_168035_); - } - -+ public void printChatMessage(String msg) -+ { -+ if (this.level != null) -+ { -+ Component component = new TextComponent(msg); -+ this.gui.getChat().addMessage(component); -+ } -+ } -+ -+ private void copyToMirror() -+ { -+ // TODO: fix mixed reality... again -+ if (this.vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY) -+ this.vrSettings.displayMirrorMode = VRSettings.MirrorMode.CROPPED; -+ -+ if (this.vrSettings.displayMirrorMode == VRSettings.MirrorMode.OFF && this.vr.isHMDTracking()) -+ { -+ this.notifyMirror("Mirror is OFF", true, 1000); -+ } -+ else if (this.vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY) -+ { -+ if (VRShaders._DepthMask_shaderProgramId != 0) -+ { -+ this.doMixedRealityMirror(); -+ } -+ else -+ { -+ this.notifyMirror("Shader compile failed, see log", true, 10000); -+ } -+ } -+ else if (this.vrSettings.displayMirrorMode == VRSettings.MirrorMode.DUAL) -+ { -+ RenderTarget rendertarget = this.vrRenderer.framebufferEye0; -+ RenderTarget rendertarget1 = this.vrRenderer.framebufferEye1; -+ -+ if (rendertarget != null) -+ { -+ rendertarget.blitToScreen(0, this.window.getScreenWidth() / 2, this.window.getScreenHeight(), 0, true, 0.0F, 0.0F, false); -+ } -+ -+ if (rendertarget1 != null) -+ { -+ rendertarget1.blitToScreen(this.window.getScreenWidth() / 2, this.window.getScreenWidth() / 2, this.window.getScreenHeight(), 0, true, 0.0F, 0.0F, false); -+ } -+ } -+ else -+ { -+ float xcrop = 0.0F; -+ float ycrop = 0.0F; -+ boolean ar = false; -+ RenderTarget source = this.vrRenderer.framebufferEye0; -+ -+ if (this.vrSettings.displayMirrorMode == VRSettings.MirrorMode.FIRST_PERSON) -+ { -+ source = this.vrRenderer.framebufferUndistorted; -+ } -+ else if (this.vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON) -+ { -+ source = this.vrRenderer.framebufferMR; -+ } -+ else if (this.vrSettings.displayMirrorMode == VRSettings.MirrorMode.SINGLE || this.vrSettings.displayMirrorMode == VRSettings.MirrorMode.OFF) -+ { -+ if (!this.vrSettings.displayMirrorLeftEye) -+ source = this.vrRenderer.framebufferEye1; -+ } -+ else if (this.vrSettings.displayMirrorMode == VRSettings.MirrorMode.CROPPED) -+ { -+ if (!this.vrSettings.displayMirrorLeftEye) -+ source = this.vrRenderer.framebufferEye1; -+ -+ xcrop = 0.15F; -+ ycrop = 0.15F; -+ ar = true; -+ } -+ //Debug -+ //source = GuiHandler.guiFramebuffer; -+ //source = vrRenderer.telescopeFramebufferR; -+ // -+ if (source != null) -+ { -+ source.blitToScreen(0, this.window.getScreenWidth(), this.window.getScreenHeight(), 0, true, xcrop, ycrop, ar); -+ } -+ } -+ } -+ -+ private void doMixedRealityMirror() -+ { -+ boolean flag = Config.isShaders(); -+ boolean flag1 = this.vrSettings.mixedRealityUnityLike && this.vrSettings.mixedRealityAlphaMask; -+ -+ if (!flag1) -+ { -+ GlStateManager._clearColor((float)this.vrSettings.mixedRealityKeyColor.getRed() / 255.0F, (float)this.vrSettings.mixedRealityKeyColor.getGreen() / 255.0F, (float)this.vrSettings.mixedRealityKeyColor.getBlue() / 255.0F, 1.0F); -+ } -+ else -+ { -+ GlStateManager._clearColor(0.0F, 0.0F, 0.0F, 1.0F); -+ } -+ -+ GlStateManager.clear(16640); -+ Vec3 vec3 = this.vrPlayer.vrdata_room_pre.getHeadPivot().subtract(this.vrPlayer.vrdata_room_pre.getEye(RenderPass.THIRD).getPosition()); -+ com.mojang.math.Matrix4f matrix4f = this.vrPlayer.vrdata_room_pre.getEye(RenderPass.THIRD).getMatrix().transposed().toMCMatrix(); -+ Vector3 vector3 = this.vrPlayer.vrdata_room_pre.getEye(RenderPass.THIRD).getMatrix().transform(Vector3.forward()); -+ GlStateManager._glUseProgram(VRShaders._DepthMask_shaderProgramId); -+ this.gameRenderer.thirdPassProjectionMatrix.store(this.matrixBuffer); -+ ((Buffer)this.matrixBuffer).rewind(); -+ ARBShaderObjects.glUniformMatrix4fvARB(VRShaders._DepthMask_projectionMatrix, false, this.matrixBuffer); -+ matrix4f.store(this.matrixBuffer); -+ ((Buffer)this.matrixBuffer).rewind(); -+ ARBShaderObjects.glUniformMatrix4fvARB(VRShaders._DepthMask_viewMatrix, false, this.matrixBuffer); -+ ARBShaderObjects.glUniform1iARB(VRShaders._DepthMask_colorTexUniform, 1); -+ ARBShaderObjects.glUniform1iARB(VRShaders._DepthMask_depthTexUniform, 2); -+ ARBShaderObjects.glUniform3fARB(VRShaders._DepthMask_hmdViewPosition, (float)vec3.x, (float)vec3.y, (float)vec3.z); -+ ARBShaderObjects.glUniform3fARB(VRShaders._DepthMask_hmdPlaneNormal, -vector3.getX(), 0.0F, -vector3.getZ()); -+ ARBShaderObjects.glUniform3fARB(VRShaders._DepthMask_keyColorUniform, (float)this.vrSettings.mixedRealityKeyColor.getRed() / 255.0F, (float)this.vrSettings.mixedRealityKeyColor.getGreen() / 255.0F, (float)this.vrSettings.mixedRealityKeyColor.getBlue() / 255.0F); -+ ARBShaderObjects.glUniform1iARB(VRShaders._DepthMask_alphaModeUniform, flag1 ? 1 : 0); -+ GlStateManager._activeTexture(33985); -+ this.vrRenderer.framebufferMR.bindRead(); -+ GlStateManager._activeTexture(33986); -+ -+ if (flag && Shaders.dfb != null) -+ { -+ GlStateManager._bindTexture(Shaders.dfb.depthTextures.get(0)); -+ } -+ else -+ { -+ GlStateManager._bindTexture(this.vrRenderer.framebufferMR.getDepthBufferId()); -+ } -+ -+ GlStateManager._activeTexture(33984); -+ -+ for (int i = 0; i < (flag1 ? 3 : 2); ++i) -+ { -+ int j = this.window.getScreenWidth() / 2; -+ int k = this.window.getScreenHeight(); -+ int l = this.window.getScreenWidth() / 2 * i; -+ int i1 = 0; -+ -+ if (this.vrSettings.mixedRealityUnityLike) -+ { -+ j = this.window.getScreenWidth() / 2; -+ k = this.window.getScreenHeight() / 2; -+ -+ if (this.vrSettings.mixedRealityAlphaMask && i == 2) -+ { -+ l = this.window.getScreenWidth() / 2; -+ i1 = this.window.getScreenHeight() / 2; -+ } -+ else -+ { -+ l = 0; -+ i1 = this.window.getScreenHeight() / 2 * (1 - i); -+ } -+ } -+ -+ ARBShaderObjects.glUniform2fARB(VRShaders._DepthMask_resolutionUniform, (float)j, (float)k); -+ ARBShaderObjects.glUniform2fARB(VRShaders._DepthMask_positionUniform, (float)l, (float)i1); -+ ARBShaderObjects.glUniform1iARB(VRShaders._DepthMask_passUniform, i); -+ this.vrRenderer.framebufferMR.blitToScreen(l, j, k, i1, true, 0.0F, 0.0F, false); -+ } -+ -+ GlStateManager._glUseProgram(0); -+ -+ if (this.vrSettings.mixedRealityUnityLike) -+ { -+ if (this.vrSettings.mixedRealityUndistorted) -+ { -+ this.vrRenderer.framebufferUndistorted.blitToScreen(this.window.getScreenWidth() / 2, this.window.getScreenWidth() / 2, this.window.getScreenHeight() / 2, 0, true, 0.0F, 0.0F, false); -+ } -+ else -+ { -+ this.vrRenderer.framebufferEye0.blitToScreen(this.window.getScreenWidth() / 2, this.window.getScreenWidth() / 2, this.window.getScreenHeight() / 2, 0, true, 0.0F, 0.0F, false); -+ } -+ } -+ } -+ -+ private void checkGLError(String message) -+ { -+ Config.checkGlError(message); -+ } -+ -+ public void initMinecrift() throws Exception -+ { -+ this.vr.init(); -+ -+ if (!this.oculus) -+ { -+ this.vrRenderer = new OpenVRStereoRenderer(this.vr); -+ } -+ else -+ { -+ this.vrRenderer = new OVR_StereoRenderer(this.vr); -+ } -+ -+ this.vrPlayer = new VRPlayer(); -+ this.vrRenderer.lastGuiScale = this.options.guiScale; -+ this.vrPlayer.registerTracker(this.backpackTracker); -+ this.vrPlayer.registerTracker(this.bowTracker); -+ this.vrPlayer.registerTracker(this.climbTracker); -+ this.vrPlayer.registerTracker(this.autoFood); -+ this.vrPlayer.registerTracker(this.jumpTracker); -+ this.vrPlayer.registerTracker(this.rowTracker); -+ this.vrPlayer.registerTracker(this.runTracker); -+ this.vrPlayer.registerTracker(this.sneakTracker); -+ this.vrPlayer.registerTracker(this.swimTracker); -+ this.vrPlayer.registerTracker(this.swingTracker); -+ this.vrPlayer.registerTracker(this.interactTracker); -+ this.vrPlayer.registerTracker(this.teleportTracker); -+ this.vrPlayer.registerTracker(this.horseTracker); -+ this.vrPlayer.registerTracker(this.vehicleTracker); -+ //this.vrPlayer.registerTracker(this.physicalGuiManager); -+ this.vrPlayer.registerTracker(this.crawlTracker); -+ this.vrPlayer.registerTracker(this.cameraTracker); -+ } -+ -+ private static void sleepNanos(long nanoDelay) -+ { -+ long i = System.nanoTime() + nanoDelay; -+ -+ do -+ { -+ Thread.yield(); -+ } -+ while (System.nanoTime() < i); -+ } -+ -+ private void addRunTickTimeNanos(long runTickTime) -+ { -+ int i = 0; -+ this.medianRunTickTimeNanos = runTickTime; -+ -+ if (this.vrSettings.smoothRunTickCount < 1) -+ { -+ this.vrSettings.smoothRunTickCount = 1; -+ } -+ -+ if (this.vrSettings.smoothRunTickCount % 2 == 0) -+ { -+ ++this.vrSettings.smoothRunTickCount; -+ } -+ -+ this.runTickTimeNanos.addFirst(runTickTime); -+ -+ while (this.runTickTimeNanos.size() > this.vrSettings.smoothRunTickCount) -+ { -+ this.runTickTimeNanos.removeLast(); -+ } -+ -+ if (this.runTickTimeNanos.size() == this.vrSettings.smoothRunTickCount) -+ { -+ Long[] along = new Long[this.runTickTimeNanos.size()]; -+ -+ for (Iterator iterator = this.runTickTimeNanos.iterator(); iterator.hasNext(); ++i) -+ { -+ along[i] = (Long)iterator.next(); -+ } -+ -+ Arrays.sort((Object[])along); -+ this.medianRunTickTimeNanos = along[along.length / 2]; -+ } -+ } -+ -+ private long getMedianRunTickTimeNanos() -+ { -+ return this.medianRunTickTimeNanos; -+ } -+ -+ public void triggerYawTransition(boolean isPositive) -+ { -+ } -+ -+ public void print(String s) -+ { -+ s = s.replace("\n", "\n[Minecrift] "); -+ System.out.println("[Minecrift] " + s); -+ } -+ -+ private void renderSingleView(int eye, float nano, boolean renderworld) -+ { -+ GlStateManager._clearColor(0.0F, 0.0F, 0.0F, 1.0F); -+ GlStateManager.clear(16640); -+ GlStateManager._enableTexture(); -+ GlStateManager._enableDepthTest(); -+ this.profiler.push("updateCameraAndRender"); -+ this.gameRenderer.render(nano, System.nanoTime(), renderworld); -+ this.profiler.pop(); -+ this.checkGLError("post game render " + eye); -+ -+ if (this.currentPass == RenderPass.LEFT || this.currentPass == RenderPass.RIGHT) -+ { -+ this.profiler.push("postprocesseye"); -+ RenderTarget rendertarget = this.mainRenderTarget; -+ -+ if (this.vrSettings.useFsaa) -+ { -+ this.profiler.push("fsaa"); -+ this.vrRenderer.doFSAA(Config.isShaders()); -+ rendertarget = this.vrRenderer.fsaaLastPassResultFBO; -+ this.checkGLError("fsaa " + eye); -+ this.profiler.pop(); -+ } -+ -+ if (this.currentPass == RenderPass.LEFT) -+ { -+ this.vrRenderer.framebufferEye0.bindWrite(true); -+ } -+ else -+ { -+ this.vrRenderer.framebufferEye1.bindWrite(true); -+ } -+ -+ if (this.vrSettings.useFOVReduction && this.vrPlayer.getFreeMove()) -+ { -+ if (this.player != null && (Math.abs(this.player.zza) > 0.0F || Math.abs(this.player.xxa) > 0.0F)) -+ { -+ this.fov = (float)((double)this.fov - 0.05D); -+ -+ if (this.fov < this.vrSettings.fovReductionMin) -+ { -+ this.fov = this.vrSettings.fovReductionMin; -+ } -+ } -+ else -+ { -+ this.fov = (float)((double)this.fov + 0.01D); -+ -+ if ((double)this.fov > 0.8D) -+ { -+ this.fov = 0.8F; -+ } -+ } -+ } -+ else -+ { -+ this.fov = 1.0F; -+ } -+ -+ GlStateManager._glUseProgram(VRShaders._FOVReduction_shaderProgramId); -+ ARBShaderObjects.glUniform1iARB(VRShaders._FOVReduction_TextureUniform, 0); -+ ARBShaderObjects.glUniform1fARB(VRShaders._FOVReduction_OffsetUniform, this.vrSettings.fovRedutioncOffset); -+ float red = 0.0F; -+ float black = 0.0F; -+ float blue = 0.0F; -+ float time = (float)Util.getMillis() / 1000.0F; -+ -+ if (this.player != null && this.level != null) -+ { -+ if (this.gameRenderer.wasinwater != this.gameRenderer.inwater) -+ { -+ this.watereffect = 2.3F; -+ } -+ else -+ { -+ if (this.gameRenderer.inwater) -+ { -+ this.watereffect -= 0.008333334F; -+ } -+ else -+ { -+ this.watereffect -= 0.016666668F; -+ } -+ -+ if (this.watereffect < 0.0F) -+ { -+ this.watereffect = 0.0F; -+ } -+ } -+ -+ this.gameRenderer.wasinwater = this.gameRenderer.inwater; -+ -+ if (Config.isShaders()) -+ { -+ this.watereffect = 0.0F; -+ } -+ -+ if (this.gameRenderer.inportal) -+ { -+ this.portaleffect = 1.0F; -+ } -+ else -+ { -+ this.portaleffect -= 0.016666668F; -+ -+ if (this.portaleffect < 0.0F) -+ { -+ this.portaleffect = 0.0F; -+ } -+ } -+ -+ ItemStack itemstack = this.player.getInventory().getArmor(3); -+ -+ if (itemstack.getItem() == Blocks.CARVED_PUMPKIN.asItem() && (!itemstack.hasTag() || itemstack.getTag().getInt("CustomModelData") == 0)) -+ { -+ this.pumpkineffect = 1.0F; -+ } -+ -+ float hurtTimer = (float)this.player.hurtTime - nano; -+ float healthpercent = 1.0F - this.player.getHealth() / this.player.getMaxHealth(); -+ healthpercent = (healthpercent - 0.5F) * 0.75F; -+ -+ if (hurtTimer > 0.0F) -+ { //hurt flash -+ hurtTimer = hurtTimer / (float)this.player.hurtDuration; -+ hurtTimer = healthpercent + Mth.sin(hurtTimer * hurtTimer * hurtTimer * hurtTimer * (float)Math.PI) * 0.5F; -+ red = hurtTimer; -+ } -+ else -+ { //red due to low health -+ red = (float)((double)healthpercent * Math.abs(Math.sin((double)(2.5F * time) / ((double)(1.0F - healthpercent) + 0.1D)))); -+ -+ if (this.player.isCreative()) -+ { -+ red = 0.0F; -+ } -+ } -+ -+ float freeze = this.player.getPercentFrozen(); -+ if(freeze > 0 ){ -+ blue = red; -+ blue = Math.max(freeze / 2, blue); -+ red = 0; -+ } -+ -+ -+ if (this.player.isSleeping() && (double)black < 0.8D) -+ { -+ black = 0.8F; -+ } -+ -+ if (this.vr.isWalkingAbout && (double)black < 0.8D) -+ { -+ black = 0.5F; -+ } -+ } -+ else -+ { -+ this.watereffect = 0.0F; -+ this.portaleffect = 0.0F; -+ this.pumpkineffect = 0.0F; -+ } -+ -+ if (this.pumpkineffect > 0.0F) -+ { -+ ARBShaderObjects.glUniform1fARB(VRShaders._FOVReduction_RadiusUniform, 0.3F); -+ ARBShaderObjects.glUniform1fARB(VRShaders._FOVReduction_BorderUniform, 0.0F); -+ } -+ else -+ { -+ ARBShaderObjects.glUniform1fARB(VRShaders._FOVReduction_RadiusUniform, this.fov); -+ ARBShaderObjects.glUniform1fARB(VRShaders._FOVReduction_BorderUniform, 0.06F); -+ } -+ -+ ARBShaderObjects.glUniform1fARB(VRShaders._Overlay_HealthAlpha, red); -+ ARBShaderObjects.glUniform1fARB(VRShaders._Overlay_FreezeAlpha, blue); -+ ARBShaderObjects.glUniform1fARB(VRShaders._Overlay_BlackAlpha, black); -+ ARBShaderObjects.glUniform1fARB(VRShaders._Overlay_time, time); -+ ARBShaderObjects.glUniform1fARB(VRShaders._Overlay_waterAmplitude, this.watereffect); -+ ARBShaderObjects.glUniform1fARB(VRShaders._Overlay_portalAmplitutde, this.portaleffect); -+ ARBShaderObjects.glUniform1fARB(VRShaders._Overlay_pumpkinAmplitutde, this.pumpkineffect); -+ RenderPass renderpass = this.currentPass; -+ ARBShaderObjects.glUniform1iARB(VRShaders._Overlay_eye, this.currentPass == RenderPass.LEFT ? 1 : -1); -+ rendertarget.blitLegacy = true; -+ rendertarget.blitToScreen(this.vrRenderer.framebufferEye0.viewWidth, this.vrRenderer.framebufferEye0.viewHeight); -+ rendertarget.blitLegacy = false; -+ GlStateManager._glUseProgram(0); -+ this.checkGLError("post overlay" + eye); -+ this.profiler.pop(); -+ } -+ -+ if (this.currentPass == RenderPass.CAMERA) -+ { -+ this.profiler.push("cameracopy"); -+ this.vrRenderer.cameraFramebuffer.bindWrite(true); -+ GlStateManager._clearColor(0.0F, 0.0F, 0.0F, 1.0F); -+ GlStateManager.clear(16640); -+ this.vrRenderer.cameraRenderFramebuffer.blitToScreen(0, this.vrRenderer.cameraFramebuffer.viewWidth, this.vrRenderer.cameraFramebuffer.viewHeight, 0, true, 0.0F, 0.0F, false); -+ this.profiler.pop(); -+ } -+ } -+ -+ //Forge -+ public ItemColors getItemColors() -+ { -+ return this.itemColors; -+ } -+ -+ public SearchRegistry getSearchTreeManager() -+ { -+ return this.searchRegistry; -+ } -+ // -+ -+ public void loadClassPath() -+ { -+ File file1 = new File("../src/resources"); -+ -+ if (file1.exists() && file1.isDirectory()) -+ { -+ Method method = null; -+ -+ try -+ { -+ method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); -+ method.setAccessible(true); -+ method.invoke(ClassLoader.getSystemClassLoader(), file1.toURI().toURL()); -+ } -+ catch (Exception exception) -+ { -+ exception.printStackTrace(); -+ } -+ } -+ } -+ -+ public void notifyMirror(String text, boolean clear, int lengthMs) -+ { -+ this.mirroNotifyStart = System.currentTimeMillis(); -+ this.mirroNotifyLen = (long)lengthMs; -+ this.mirrorNotifyText = text; -+ this.mirrorNotifyClear = clear; -+ } -+ -+ public void drawNotifyMirror() -+ { -+ if (System.currentTimeMillis() < this.mirroNotifyStart + this.mirroNotifyLen) -+ { -+ RenderSystem.viewport(0, 0, this.window.getScreenWidth(), this.window.getScreenHeight()); -+ Matrix4f matrix4f = Matrix4f.orthographic(0.0F, (float)this.window.getScreenWidth(), 0.0F, (float)this.window.getScreenHeight(), 1000.0F, 3000.0F); -+ RenderSystem.setProjectionMatrix(matrix4f); -+ RenderSystem.getModelViewStack().setIdentity(); -+ RenderSystem.getModelViewStack().translate(0, 0, -2000); -+ RenderSystem.applyModelViewMatrix(); -+ PoseStack p = new PoseStack(); -+ p.scale(3, 3, 3); -+ RenderSystem.clear(256, ON_OSX); -+ -+ if (this.mirrorNotifyClear) -+ { -+ RenderSystem.clearColor(0,0,0,0); -+ RenderSystem.clear(16384, ON_OSX); -+ } -+ -+ int i = this.window.getScreenWidth() / 22; -+ ArrayList arraylist = new ArrayList<>(); -+ -+ if (this.mirrorNotifyText != null) -+ { -+ Utils.wordWrap(this.mirrorNotifyText, i, arraylist); -+ } -+ -+ int j = 1; -+ int k = 12; -+ -+ for (String s : arraylist) -+ { -+ this.font.draw(p, s, 1.0F, (float)j, 16777215); -+ j += 12; -+ } -+ } -+ } -+ - static enum ExperimentalDialogType - { - NONE, diff --git a/common/src/main/java/org/vivecraft/mixin/client/MinecraftMixin.java b/common/src/main/java/org/vivecraft/mixin/client/MinecraftMixin.java deleted file mode 100644 index 1ac9c269c..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/MinecraftMixin.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.vivecraft.mixin.client; - -import org.vivecraft.ClientDataHolder; -import net.minecraft.client.Minecraft; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.At.Shift; -import org.spongepowered.asm.mixin.injection.Constant; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyConstant; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.CommonDataHolder; -import org.vivecraft.render.PlayerModelController; - -@Mixin(Minecraft.class) -public abstract class MinecraftMixin { - - - @Shadow - protected abstract int getFramerateLimit(); - - @ModifyConstant(method = "createTitle", constant = @Constant(stringValue = "Minecraft")) - private String title(String s) { - return CommonDataHolder.getInstance().minecriftVerString; - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/sounds/SoundManager;tick(Z)V", shift = Shift.BEFORE), method = "tick()V", cancellable = true) - public void music(CallbackInfo info) { - PlayerModelController.getInstance().tick(); - } - - -} diff --git a/common/src/main/java/org/vivecraft/mixin/client/MinecraftVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client/MinecraftVRMixin.java deleted file mode 100644 index a3eb2cb7e..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/MinecraftVRMixin.java +++ /dev/null @@ -1,1388 +0,0 @@ -package org.vivecraft.mixin.client; - - -import com.mojang.blaze3d.pipeline.RenderTarget; -import com.mojang.blaze3d.platform.GlStateManager; -import com.mojang.blaze3d.platform.MemoryTracker; -import com.mojang.blaze3d.platform.Window; -import com.mojang.blaze3d.platform.WindowEventHandler; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Matrix4f; -import net.minecraft.Util; -import net.minecraft.client.CameraType; -import net.minecraft.client.CloudStatus; -import net.minecraft.client.KeyMapping; -import net.minecraft.client.Minecraft; -import net.minecraft.client.MouseHandler; -import net.minecraft.client.Option; -import net.minecraft.client.Options; -import net.minecraft.client.Timer; -import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.Gui; -import net.minecraft.client.gui.components.toasts.ToastComponent; -import net.minecraft.client.gui.screens.LoadingOverlay; -import net.minecraft.client.gui.screens.Overlay; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.multiplayer.MultiPlayerGameMode; -import net.minecraft.client.player.LocalPlayer; -import net.minecraft.client.renderer.FogRenderer; -import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.renderer.texture.TextureManager; -import net.minecraft.client.server.IntegratedServer; -import net.minecraft.client.sounds.SoundManager; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TranslatableComponent; -import net.minecraft.server.packs.repository.PackRepository; -import net.minecraft.util.FrameTimer; -import net.minecraft.util.Mth; -import net.minecraft.util.profiling.ProfileResults; -import net.minecraft.util.profiling.ProfilerFiller; -import net.minecraft.util.thread.ReentrantBlockableEventLoop; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.storage.LevelResource; -import net.minecraft.world.phys.HitResult; -import net.minecraft.world.phys.Vec3; -import org.lwjgl.glfw.GLFW; -import org.objectweb.asm.Opcodes; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.At.Shift; -import org.spongepowered.asm.mixin.injection.Group; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.*; -import org.vivecraft.extensions.GameRendererExtension; -import org.vivecraft.extensions.MinecraftExtension; -import org.vivecraft.extensions.PlayerExtension; -import org.vivecraft.extensions.RenderTargetExtension; -import org.vivecraft.api.ClientNetworkHelper; -import org.vivecraft.gameplay.VRPlayer; -import org.vivecraft.gameplay.screenhandlers.GuiHandler; -import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; -import org.vivecraft.gameplay.screenhandlers.RadialHandler; -import org.vivecraft.gameplay.trackers.TelescopeTracker; -import org.vivecraft.provider.openvr_jna.MCOpenVR; -import org.vivecraft.provider.openvr_jna.OpenVRStereoRenderer; -import org.vivecraft.provider.openvr_jna.VRInputAction; -import org.vivecraft.render.PlayerModelController; -import org.vivecraft.render.RenderConfigException; -import org.vivecraft.render.RenderPass; -import org.vivecraft.render.VRFirstPersonArmSwing; -import org.vivecraft.render.VRShaders; -import org.vivecraft.settings.VRHotkeys; -import org.vivecraft.settings.VRSettings; -import org.vivecraft.utils.LangHelper; -import org.vivecraft.utils.Utils; -import org.vivecraft.utils.math.Vector3; -//import org.vivecraft.provider.ovr_lwjgl.MC_OVR; -//import org.vivecraft.provider.ovr_lwjgl.OVR_StereoRenderer; -//import org.vivecraft.provider.ovr_lwjgl.OVR_StereoRenderer; - -import javax.annotation.Nullable; -import java.io.File; -import java.io.IOException; -import java.nio.FloatBuffer; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; -import java.util.Queue; -import java.util.concurrent.CompletableFuture; - -@Mixin(Minecraft.class) -public abstract class MinecraftVRMixin extends ReentrantBlockableEventLoop implements WindowEventHandler, MinecraftExtension { - - @Unique - private boolean lastClick; - @Unique - private ItemStack itemInHand; //Captured item - - public MinecraftVRMixin(String string) { - super(string); - } - - @Unique - private boolean oculus = false; - - @Unique - private long mirroNotifyStart; - - @Unique - private long mirroNotifyLen; - - @Unique - private boolean mirrorNotifyClear; - - @Unique - private String mirrorNotifyText; - - @Unique - private float fov = 1.0F; - - @Unique - private FloatBuffer matrixBuffer = MemoryTracker.create(16).asFloatBuffer(); - - @Shadow - protected int missTime; - - @Final - @Shadow - public Gui gui; - - @Shadow - @Final - public File gameDirectory; - - @Shadow - public Options options; - - @Shadow - public Screen screen; - - @Shadow - private ProfilerFiller profiler; - - @Shadow - @Final - private Window window; - - @Shadow - private Overlay overlay; - - @Final - @Shadow - public Font font; - - @Final - @Shadow - public static boolean ON_OSX; - - @Shadow - private boolean pause; - - @Shadow - private float pausePartialTick; - - @Final - @Shadow - private Timer timer; - - @Final - @Shadow - public GameRenderer gameRenderer; - - @Shadow - public ClientLevel level; - - @Shadow - public RenderTarget mainRenderTarget; - - @Final - @Shadow - private SoundManager soundManager; - - @Shadow - public boolean noRender; - - @Shadow - public LocalPlayer player; - - @Shadow - private ProfileResults fpsPieResults; - - @Shadow - private int rightClickDelay; - - @Shadow - public HitResult hitResult; - - @Shadow - public MultiPlayerGameMode gameMode; - - @Shadow - @Final - private PackRepository resourcePackRepository; - - @Shadow - private CompletableFuture pendingReload; - - @Shadow - @Final - private Queue progressTasks; - - @Shadow - @Final - public MouseHandler mouseHandler; - - @Shadow - @Final - private ToastComponent toast; - - @Shadow - private int frames; - - @Shadow - private IntegratedServer singleplayerServer; - - @Shadow - @Final - public FrameTimer frameTimer; - - @Shadow - private long lastNanoTime; - - @Shadow - private long lastTime; - - @Shadow - public String fpsString; - - @Final - @Shadow - private TextureManager textureManager; - - @Shadow - private static int fps; - - @Shadow - abstract void selectMainFont(boolean p_91337_); - - @Shadow - public abstract Entity getCameraEntity(); - - @Shadow - protected abstract void renderFpsMeter(PoseStack poseStack, ProfileResults fpsPieResults2); - - @Shadow - public abstract void clearResourcePacksOnError(Throwable throwable, @Nullable Component component); - - @Shadow - public abstract boolean hasSingleplayerServer(); - - @Shadow - protected abstract int getFramerateLimit(); - - @Shadow - public abstract void tick(); - - @Shadow - public abstract CompletableFuture reloadResourcePacks(); - - @Shadow - public abstract void stop(); - - @Shadow @Final public LevelRenderer levelRenderer; - - @Shadow private static Minecraft instance; - - @Shadow protected abstract boolean startAttack(); - - @Redirect(at = @At(value = "INVOKE", target = "Ljava/lang/Thread;currentThread()Ljava/lang/Thread;", remap = false), method = "(Lnet/minecraft/client/main/GameConfig;)V") - public Thread settings() { - if (!this.oculus) { - ClientDataHolder.getInstance().vr = new MCOpenVR((Minecraft) (Object) this, ClientDataHolder.getInstance()); - } else { - //DataHolder.getInstance().vr = new MC_OVR((Minecraft) (Object) this, DataHolder.getInstance()); - } - - VRSettings.initSettings((Minecraft) (Object) this, this.gameDirectory); - - if (!ClientDataHolder.getInstance().vrSettings.badStereoProviderPluginID.isEmpty()) { - ClientDataHolder.getInstance().vrSettings.stereoProviderPluginID = ClientDataHolder - .getInstance().vrSettings.badStereoProviderPluginID; - ClientDataHolder.getInstance().vrSettings.badStereoProviderPluginID = ""; - ClientDataHolder.getInstance().vrSettings.saveOptions(); - } - return Thread.currentThread(); - } - - @Redirect(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/Window;getWidth()I", ordinal = 0), method = "(Lnet/minecraft/client/main/GameConfig;)V") - public int mainWidth(Window w) { - return this.window.getScreenWidth(); - } - - @Redirect(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/Window;getHeight()I", ordinal = 0), method = "(Lnet/minecraft/client/main/GameConfig;)V") - public int mainHeight(Window w) { - return this.window.getScreenHeight(); - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;selectMainFont(Z)V"), method = "(Lnet/minecraft/client/main/GameConfig;)V") - public void minecrift(Minecraft mc, boolean b) { - this.selectMainFont(b); - try { - ClientDataHolder dh = ClientDataHolder.getInstance(); - dh.vr.init(); - - if (!this.oculus) { - dh.vrRenderer = new OpenVRStereoRenderer(dh.vr); - } else { - //dh.vrRenderer = new OVR_StereoRenderer(dh.vr); - } - - dh.vrPlayer = new VRPlayer(); - dh.vrRenderer.lastGuiScale = this.options.guiScale; - dh.vrPlayer.registerTracker(dh.backpackTracker); - dh.vrPlayer.registerTracker(dh.bowTracker); - dh.vrPlayer.registerTracker(dh.climbTracker); - dh.vrPlayer.registerTracker(dh.autoFood); - dh.vrPlayer.registerTracker(dh.jumpTracker); - dh.vrPlayer.registerTracker(dh.rowTracker); - dh.vrPlayer.registerTracker(dh.runTracker); - dh.vrPlayer.registerTracker(dh.sneakTracker); - dh.vrPlayer.registerTracker(dh.swimTracker); - dh.vrPlayer.registerTracker(dh.swingTracker); - dh.vrPlayer.registerTracker(dh.interactTracker); - dh.vrPlayer.registerTracker(dh.teleportTracker); - dh.vrPlayer.registerTracker(dh.horseTracker); - dh.vrPlayer.registerTracker(dh.vehicleTracker); - // this.vrPlayer.registerTracker(this.physicalGuiManager); - dh.vrPlayer.registerTracker(dh.crawlTracker); - dh.vrPlayer.registerTracker(dh.cameraTracker); - } catch (Exception exception) { - exception.printStackTrace(); - } - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;resizeDisplay()V"), method = "(Lnet/minecraft/client/main/GameConfig;)V") - public void resize(Minecraft mc) { - this.resizeDisplay(); - //DataHolder.getInstance().menuWorldRenderer = new MenuWorldRenderer(); - ClientDataHolder.getInstance().vrSettings.firstRun = false; - ClientDataHolder.getInstance().vrSettings.saveOptions(); - } - -// /** -// * @author -// * @reason -// */ -// @Overwrite -// private void rollbackResourcePacks(Throwable pThrowable) { -// if (this.resourcePackRepository.getSelectedPacks().stream().anyMatch(e -> !e.isRequired())) { -// TextComponent component; -// if (pThrowable instanceof SimpleReloadableResourceManager.ResourcePackLoadingFailure) { -// component = new TextComponent( -// ((SimpleReloadableResourceManager.ResourcePackLoadingFailure) pThrowable).getPack().getName()); -// } else { -// component = null; -// } -// -// this.clearResourcePacksOnError(pThrowable, component); -// } else { -// Util.throwAsRuntime(pThrowable); -// } -// } - - @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;delayedCrash:Ljava/util/function/Supplier;", shift = Shift.BEFORE), method = "destroy()V") - public void destroy(CallbackInfo info) { - try { - ClientDataHolder.getInstance().vr.destroy(); - } - catch (Exception exception) { - } - } - - @Inject(at = @At("HEAD"), method = "runTick(Z)V", cancellable = true) - public void replaceTick(boolean bl, CallbackInfo callback) { - if (Xplat.isModLoaded("sodium") || Xplat.isModLoaded("rubidium")) { - SodiumHelper.preRenderMinecraft(); - } - newRunTick(bl); - if (Xplat.isModLoaded("sodium") || Xplat.isModLoaded("rubidium")) { - SodiumHelper.postRenderMinecraft(); - } - callback.cancel(); - } - - //Replaces normal runTick - public void newRunTick(boolean bl) { - this.window.setErrorSection("Pre render"); - // long l = Util.getNanos(); - if (this.window.shouldClose()) { - this.stop(); - } - - if (this.pendingReload != null && !(this.overlay instanceof LoadingOverlay)) { - CompletableFuture completableFuture = this.pendingReload; - this.pendingReload = null; - this.reloadResourcePacks().thenRun(() -> { - completableFuture.complete(null); - }); - } - - Runnable completableFuture; - while ((completableFuture = (Runnable) this.progressTasks.poll()) != null) { - completableFuture.run(); - } - - int j; - if (bl) { - // v - ++ClientDataHolder.getInstance().frameIndex; - // - int i = this.timer.advanceTime(Util.getMillis()); - this.profiler.push("scheduledExecutables"); - this.runAllTasks(); - this.profiler.pop(); - // v - try { - ClientDataHolder.getInstance().vrRenderer.setupRenderConfiguration(); - } - catch (RenderConfigException renderconfigexception) { - this.screen = null; - GlStateManager._viewport(0, 0, this.window.getScreenWidth(), this.window.getScreenHeight()); - - if (this.overlay != null) { - RenderSystem.clear(256, ON_OSX); - Matrix4f matrix4f = Matrix4f.orthographic( - (float) (this.window.getScreenWidth() / this.window.getGuiScale()), - (float) (this.window.getScreenHeight() / this.window.getGuiScale()), 1000.0F, 3000.0F); - RenderSystem.setProjectionMatrix(matrix4f); - PoseStack p = new PoseStack(); - p.translate(0, 0, -2000); - this.overlay.render(p, 0, 0, 0.0F); - } - else { - if (MethodHolder.isKeyDown(GLFW.GLFW_KEY_Q)) { - System.out.println("Resetting VR status!"); - Path file = Xplat.getConfigPath("vivecraft-config.properties"); - - Properties properties = new Properties(); - properties.setProperty("vrStatus", "false"); - try { - properties.store(Files.newOutputStream(file), "This file stores if VR should be enabled."); - } catch (IOException e) { - throw new RuntimeException(e); - } - Minecraft.getInstance().stop(); - } - this.notifyMirror( - LangHelper.get("vivecraft.messages.rendersetupfailed", renderconfigexception.error), true, - 10000); - this.drawNotifyMirror(); - - if (ClientDataHolder.getInstance().frameIndex % 300L == 0L) { - System.out.println(renderconfigexception.title + " " + renderconfigexception.error); - } - - try { - Thread.sleep(10L); - } - catch (InterruptedException interruptedexception) { - } - } - - this.window.updateDisplay(); - return; - } catch (Exception exception2) { - exception2.printStackTrace(); - } - - this.profiler.push("VR Poll/VSync"); - ClientDataHolder.getInstance().vr.poll(ClientDataHolder.getInstance().frameIndex); - this.profiler.pop(); - ClientDataHolder.getInstance().vrPlayer.postPoll(); - // - this.profiler.push("tick"); - - for (j = 0; j < Math.min(10, i); ++j) { - this.profiler.incrementCounter("clientTick"); - // v - ClientDataHolder.getInstance().vrPlayer.preTick(); - // - this.tick(); - // v - ClientDataHolder.getInstance().vrPlayer.postTick(); - // - } - - this.profiler.pop(); - } - - // v - this.profiler.push("setupRenderConfiguration"); - // - this.mouseHandler.turnPlayer(); - this.window.setErrorSection("Render"); - this.profiler.push("sound"); - this.soundManager.updateSource(this.gameRenderer.getMainCamera()); - this.profiler.pop(); -// this.profiler.push("render"); -// PoseStack i = RenderSystem.getModelViewStack(); -// i.pushPose(); -// RenderSystem.applyModelViewMatrix(); -// RenderSystem.clear(16640, ON_OSX); -// this.mainRenderTarget.bindWrite(true); - - // v - try { - this.checkGLError("pre render setup "); - ClientDataHolder.getInstance().vrRenderer.setupRenderConfiguration(); - this.checkGLError("post render setup "); - } - catch (Exception exception1) { - exception1.printStackTrace(); - } - - float f = this.pause ? this.pausePartialTick : this.timer.partialTick; - this.profiler.popPush("preRender"); - ClientDataHolder.getInstance().vrPlayer.preRender(f); - this.profiler.popPush("2D"); - // - - FogRenderer.setupNoFog(); -// this.profiler.push("display"); - RenderSystem.enableTexture(); - RenderSystem.enableCull(); -// this.profiler.pop(); - - // v - this.profiler.push("Gui"); - ClientDataHolder.getInstance().currentPass = RenderPass.GUI; - this.gameRenderer.getMainCamera().setup(this.level, this.getCameraEntity(), false, false, f); - - // - - if (!this.noRender) { -// this.profiler.popPush("gameRenderer"); -// this.gameRenderer.render(this.pause ? this.pausePartialTick : this.timer.partialTick, l, bl); -// this.profiler.popPush("toasts"); -// this.toast.render(new PoseStack()); -// this.profiler.pop(); - Xevents.onRenderTickStart(this.pause ? this.pausePartialTick : this.timer.partialTick); - } - -// if (this.fpsPieResults != null) { -// this.profiler.push("fpsPie"); -// this.renderFpsMeter(new PoseStack(), this.fpsPieResults); -// this.profiler.pop(); -// } - - // v - GlStateManager._depthMask(true); - GlStateManager._colorMask(true, true, true, true); - this.mainRenderTarget = GuiHandler.guiFramebuffer; - this.mainRenderTarget.clear(Minecraft.ON_OSX); - this.mainRenderTarget.bindWrite(true); - ((GameRendererExtension) this.gameRenderer).drawFramebufferNEW(f, bl, new PoseStack()); - - if (KeyboardHandler.Showing - && !ClientDataHolder.getInstance().vrSettings.physicalKeyboard) { - this.mainRenderTarget = KeyboardHandler.Framebuffer; - this.mainRenderTarget.clear(Minecraft.ON_OSX); - this.mainRenderTarget.bindWrite(true); - ((GameRendererExtension) this.gameRenderer).drawScreen(f, - KeyboardHandler.UI, new PoseStack()); - } - // - -// this.profiler.push("blit"); -// this.mainRenderTarget.unbindWrite(); -// i.popPose(); -// i.pushPose(); -// RenderSystem.applyModelViewMatrix(); -// this.mainRenderTarget.blitToScreen(this.window.getWidth(), this.window.getHeight()); -// i.popPose(); -// RenderSystem.applyModelViewMatrix(); -// this.profiler.popPush("updateDisplay"); -// this.window.updateDisplay(); - - // v - if (RadialHandler.isShowing()) { - this.mainRenderTarget = RadialHandler.Framebuffer; - this.mainRenderTarget.clear(Minecraft.ON_OSX); - this.mainRenderTarget.bindWrite(true); - ((GameRendererExtension) this.gameRenderer).drawScreen(f, RadialHandler.UI, new PoseStack()); - } - - this.checkGLError("post 2d "); - VRHotkeys.updateMovingThirdPersonCam(); - this.profiler.popPush("sound"); - ClientDataHolder.getInstance().currentPass = RenderPass.CENTER; - this.soundManager.updateSource(this.gameRenderer.getMainCamera()); - this.profiler.pop(); - // - - j = this.getFramerateLimit(); -// if ((double) j < Option.FRAMERATE_LIMIT.getMaxValue()) { -// RenderSystem.limitDisplayFPS(j); -// } - - if (!this.noRender) { - List list = ClientDataHolder.getInstance().vrRenderer.getRenderPasses(); - - ClientDataHolder.getInstance().isFirstPass = true; - for (RenderPass renderpass : list) { - ClientDataHolder.getInstance().currentPass = renderpass; - - switch (renderpass) { - case LEFT: - case RIGHT: - this.mainRenderTarget = ClientDataHolder.getInstance().vrRenderer.framebufferVrRender; - break; - - case CENTER: - this.mainRenderTarget = ClientDataHolder.getInstance().vrRenderer.framebufferUndistorted; - break; - - case THIRD: - this.mainRenderTarget = ClientDataHolder.getInstance().vrRenderer.framebufferMR; - break; - - case SCOPEL: - this.mainRenderTarget = ClientDataHolder.getInstance().vrRenderer.telescopeFramebufferL; - break; - - case SCOPER: - this.mainRenderTarget = ClientDataHolder.getInstance().vrRenderer.telescopeFramebufferR; - break; - - case CAMERA: - this.mainRenderTarget = ClientDataHolder.getInstance().vrRenderer.cameraRenderFramebuffer; - } - - this.profiler.push("Eye:" + ClientDataHolder.getInstance().currentPass.ordinal()); - this.profiler.push("setup"); - this.mainRenderTarget.bindWrite(true); - this.profiler.pop(); - this.renderSingleView(renderpass, f, bl); - this.profiler.pop(); - - if (ClientDataHolder.getInstance().grabScreenShot) { - boolean flag; - - if (list.contains(RenderPass.CAMERA)) { - flag = renderpass == RenderPass.CAMERA; - } else if (list.contains(RenderPass.CENTER)) { - flag = renderpass == RenderPass.CENTER; - } else { - flag = ClientDataHolder.getInstance().vrSettings.displayMirrorLeftEye ? renderpass == RenderPass.LEFT - : renderpass == RenderPass.RIGHT; - } - - if (flag) { - RenderTarget rendertarget = this.mainRenderTarget; - - if (renderpass == RenderPass.CAMERA) { - rendertarget = ClientDataHolder.getInstance().vrRenderer.cameraFramebuffer; - } - - this.mainRenderTarget.unbindWrite(); - Utils.takeScreenshot(rendertarget); - this.window.updateDisplay(); - ClientDataHolder.getInstance().grabScreenShot = false; - } - } - - ClientDataHolder.getInstance().isFirstPass = false; - } - - if (bl) { - ClientDataHolder.getInstance().vrPlayer.postRender(f); - this.profiler.push("Display/Reproject"); - - try { - ClientDataHolder.getInstance().vrRenderer.endFrame(); - } catch (Exception exception) { - VRSettings.logger.error(exception.toString()); - } - - this.profiler.pop(); - this.checkGLError("post submit "); - } - - if (!this.noRender) { - Xevents.onRenderTickEnd(this.pause ? this.pausePartialTick : this.timer.partialTick); - } - - this.profiler.push("mirror"); - this.mainRenderTarget.unbindWrite(); - this.copyToMirror(); - this.drawNotifyMirror(); - this.checkGLError("post-mirror "); - this.profiler.pop(); - } - - // - -// this.profiler.popPush("yield"); -// Thread.yield(); -// this.profiler.pop(); - this.window.setErrorSection("Post render"); - - //v - this.window.updateDisplay(); - // - - ++this.frames; - boolean bl2 = this.hasSingleplayerServer() - && (this.screen != null && this.screen.isPauseScreen() - || this.overlay != null && this.overlay.isPauseScreen()) - && !this.singleplayerServer.isPublished(); - if (this.pause != bl2) { - if (this.pause) { - this.pausePartialTick = this.timer.partialTick; - } else { - this.timer.partialTick = this.pausePartialTick; - } - - this.pause = bl2; - } - - long m = Util.getNanos(); - this.frameTimer.logFrameDuration(m - this.lastNanoTime); - this.lastNanoTime = m; - this.profiler.push("fpsUpdate"); - - while (Util.getMillis() >= this.lastTime + 1000L) { - fps = this.frames; - this.fpsString = String.format("%d fps T: %s%s%s%s B: %d", fps, - (double) this.options.framerateLimit == Option.FRAMERATE_LIMIT.getMaxValue() ? "inf" - : this.options.framerateLimit, - this.options.enableVsync ? " vsync" : "", this.options.graphicsMode.toString(), - this.options.renderClouds == CloudStatus.OFF ? "" - : (this.options.renderClouds == CloudStatus.FAST ? " fast-clouds" : " fancy-clouds"), - this.options.biomeBlendRadius); - this.lastTime += 1000L; - this.frames = 0; - } - this.profiler.pop(); - } - - @Inject(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/Window;setGuiScale(D)V", shift = Shift.AFTER), method = "resizeDisplay()V") - public void reinitFrame(CallbackInfo info) { - if (ClientDataHolder.getInstance().vrRenderer != null) { - ClientDataHolder.getInstance().vrRenderer.reinitFrameBuffers("Main Window Changed"); - } - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getMainRenderTarget()Lcom/mojang/blaze3d/pipeline/RenderTarget;"), method = "resizeDisplay()V") - public RenderTarget removeRenderTarget(Minecraft mc) { - return null; - } - - @Redirect(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/pipeline/RenderTarget;resize(IIZ)V"), method = "resizeDisplay()V") - public void cancelResizeTarget(RenderTarget r, int w, int h, boolean b) { - return; - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;resize(II)V"), method = "resizeDisplay()V") - public void cancelResizeGame(GameRenderer r, int w, int h) { - return; - } - - public void drawProfiler() { - if (this.fpsPieResults != null) { - this.profiler.push("fpsPie"); - this.renderFpsMeter(new PoseStack(), this.fpsPieResults); - this.profiler.pop(); - } - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;swing(Lnet/minecraft/world/InteractionHand;)V"), method = "continueAttack(Z)V") - public void swingArmcontinueAttack(LocalPlayer player, InteractionHand hand) { - ((PlayerExtension) player).swingArm(InteractionHand.MAIN_HAND, VRFirstPersonArmSwing.Attack); - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/MultiPlayerGameMode;stopDestroyBlock()V"), method = "continueAttack(Z)V") - public void destroyseated(MultiPlayerGameMode gm) { - if (ClientDataHolder.getInstance().vrSettings.seated) { - this.gameMode.stopDestroyBlock(); - } - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/MultiPlayerGameMode;isDestroying()Z"), method = "startUseItem()V") - public boolean seatedCheck(MultiPlayerGameMode gameMode) { - return !(!gameMode.isDestroying() || !ClientDataHolder.getInstance().vrSettings.seated); - } - - @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;rightClickDelay:I", shift = Shift.AFTER, opcode = Opcodes.PUTFIELD), method = "startUseItem()V") - public void breakDelay(CallbackInfo info) { - if (ClientDataHolder.getInstance().vrSettings.rightclickDelay == VRSettings.RightClickDelay.VANILLA) - this.rightClickDelay = 4; - else if (ClientDataHolder.getInstance().vrSettings.rightclickDelay == VRSettings.RightClickDelay.SLOW) - this.rightClickDelay = 6; - else if (ClientDataHolder.getInstance().vrSettings.rightclickDelay == VRSettings.RightClickDelay.SLOWER) - this.rightClickDelay = 8; - else if (ClientDataHolder.getInstance().vrSettings.rightclickDelay == VRSettings.RightClickDelay.SLOWEST) - this.rightClickDelay = 10; - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;getItemInHand(Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/item/ItemStack;"), method = "startUseItem") - public ItemStack activeHand2(LocalPlayer instance, InteractionHand interactionHand) { - ItemStack itemInHand = instance.getItemInHand(interactionHand); - if (ClientDataHolder.getInstance().vrSettings.seated || !TelescopeTracker.isTelescope(itemInHand)) { - ClientNetworkHelper.sendActiveHand((byte) interactionHand.ordinal()); - } - this.itemInHand = itemInHand; - return itemInHand; - } - - @Redirect(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;hitResult:Lnet/minecraft/world/phys/HitResult;", ordinal = 1), method = "startUseItem") - public HitResult activeHand2(Minecraft instance) { - if (ClientDataHolder.getInstance().vrSettings.seated || !TelescopeTracker.isTelescope(itemInHand)){ - return instance.hitResult; - } - return null; - } - - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;swing(Lnet/minecraft/world/InteractionHand;)V"), method = "startUseItem") - public void swingUse(LocalPlayer instance, InteractionHand interactionHand) { - ((PlayerExtension)instance).swingArm(interactionHand, VRFirstPersonArmSwing.Use); - } - - @Inject(at = @At("HEAD"), method = "tick()V") - public void tick(CallbackInfo info) { - ++ClientDataHolder.getInstance().tickCounter; - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;pick(F)V"), method = "tick") - public void removePick(GameRenderer instance, float f) { - return; - } - - public void textures() { - this.textureManager.tick(); - } - - @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;overlay:Lnet/minecraft/client/gui/screens/Overlay;", shift = Shift.BEFORE), method = "tick") - public void vrInputs(CallbackInfo ci) { - this.profiler.popPush("vrProcessInputs"); - ClientDataHolder.getInstance().vr.processInputs(); - ClientDataHolder.getInstance().vr.processBindings(); - } - - @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;level:Lnet/minecraft/client/multiplayer/ClientLevel;", ordinal = 4, shift = Shift.BEFORE), method = "tick") - public void vrActions(CallbackInfo ci) { - this.profiler.popPush("vrInputActionsTick"); - - for (VRInputAction vrinputaction : ClientDataHolder.getInstance().vr.getInputActions()) { - vrinputaction.tick(); - } - - if (ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY || ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON) { - VRHotkeys.handleMRKeys(); - } - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/profiling/ProfilerFiller;popPush(Ljava/lang/String;)V", ordinal = 2, shift = Shift.BEFORE), method = "tick") - public void freeMove(CallbackInfo ci) { - if (this.player != null) { - ClientDataHolder.getInstance().vrPlayer.updateFreeMove(); - - if (ClientDataHolder.getInstance().vrPlayer.teleportWarningTimer >= 0 && --ClientDataHolder.getInstance().vrPlayer.teleportWarningTimer == 0) { - this.gui.getChat().addMessage(new TranslatableComponent("vivecraft.messages.noserverplugin")); - } - } - } - - - @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;pause:Z", ordinal = 5, shift = Shift.BEFORE), method = "tick()V") - public void tickmenu(CallbackInfo info) { -// if (DataHolder.getInstance().menuWorldRenderer != null) { -// DataHolder.getInstance().menuWorldRenderer.tick(); -// } - - PlayerModelController.getInstance().tick(); - - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Options;setCameraType(Lnet/minecraft/client/CameraType;)V"), method = "handleKeybinds") - public void vrMirrorOption(Options instance, CameraType cameraType) { - ClientDataHolder.getInstance().vrSettings.setOptionValue(VRSettings.VrOptions.MIRROR_DISPLAY); - this.notifyMirror(ClientDataHolder.getInstance().vrSettings.getButtonDisplayString(VRSettings.VrOptions.MIRROR_DISPLAY), false, 3000); - //this.levelRenderer.needsUpdate(); - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;checkEntityPostEffect(Lnet/minecraft/world/entity/Entity;)V"), method = "handleKeybinds") - public void noPosEffect(GameRenderer instance, Entity entity) { - return ; - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;swing(Lnet/minecraft/world/InteractionHand;)V"), method = "handleKeybinds()V") - public void swingArmhandleKeybinds(LocalPlayer instance, InteractionHand interactionHand) { - ((PlayerExtension) player).swingArm(InteractionHand.MAIN_HAND, VRFirstPersonArmSwing.Attack); - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/KeyMapping;isDown()Z", ordinal = 2), method = "handleKeybinds") - public boolean vrKeyuse(KeyMapping instance) { - return !(!instance.isDown() && (!ClientDataHolder.getInstance().bowTracker.isActive(this.player) || ClientDataHolder.getInstance().vrSettings.seated) && ! ClientDataHolder.getInstance().autoFood.isEating()); - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/MultiPlayerGameMode;releaseUsingItem(Lnet/minecraft/world/entity/player/Player;)V", shift = Shift.BEFORE), method = "handleKeybinds") - public void activeHand(CallbackInfo ci) { - ClientNetworkHelper.sendActiveHand((byte)this.player.getUsedItemHand().ordinal()); - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/KeyMapping;consumeClick()Z", ordinal = 13), method = "handleKeybinds") - public boolean notConsumeClick(KeyMapping instance) { - return false; - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/KeyMapping;consumeClick()Z", ordinal = 14, shift = Shift.BEFORE), method = "handleKeybinds") - public void attackDown(CallbackInfo ci) { - if (this.options.keyAttack.consumeClick() && this.screen == null){ - this.startAttack(); - this.lastClick = true; - } - else if (!this.options.keyAttack.isDown()) - { - this.missTime = 0; - - if (this.lastClick) { - this.gameMode.stopDestroyBlock(); - } - - this.lastClick = false; - } - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MouseHandler;isMouseGrabbed()Z"), method = "handleKeybinds") - public boolean alwaysGrapped(MouseHandler instance) { - return true; - } - - @Inject(at = @At("HEAD"), method = "setLevel(Lnet/minecraft/client/multiplayer/ClientLevel;)V") - public void roomScale(ClientLevel pLevelClient, CallbackInfo info) { - ClientDataHolder.getInstance().vrPlayer.setRoomOrigin(0.0D, 0.0D, 0.0D, true); - } - - @Group(name = "initMenuworld", min = 1, max = 1) - @Inject(at = @At("HEAD"), method = "method_24040", remap = false, expect = 0) - public void menuInitvarFabric(CallbackInfo ci) { - if (ClientDataHolder.getInstance().vrRenderer.isInitialized()) { - //DataHolder.getInstance().menuWorldRenderer.init(); - } - ClientDataHolder.getInstance().vr.postinit(); - } - @Group(name = "initMenuworld", min = 1, max = 1) - @Inject(at = @At("HEAD"), method = "lambda$new$2", remap = false, expect = 0) - public void menuInitvarForge(CallbackInfo ci) { - if (ClientDataHolder.getInstance().vrRenderer.isInitialized()) { - //DataHolder.getInstance().menuWorldRenderer.init(); - } - ClientDataHolder.getInstance().vr.postinit(); - } - - @Group(name = "reloadMenuworld", min = 1, max = 1) - @Inject(at = @At("HEAD"), method = "method_24228", remap = false, expect = 0) - public void reloadMenuworldFabric(CallbackInfo ci) { - reloadMenuworld(); - } - @Group(name = "reloadMenuworld", min = 1, max = 1) - @Inject(at = @At("HEAD"), method = "lambda$reloadResourcePacks$18", remap = false, expect = 0) - public void reloadMenuworldForge(CallbackInfo ci) { - reloadMenuworld(); - } - - private void reloadMenuworld() { - // if (DataHolder.getInstance().menuWorldRenderer.isReady() && DataHolder.getInstance().resourcePacksChanged) { -// try { -// DataHolder.getInstance().menuWorldRenderer.destroy(); -// DataHolder.getInstance().menuWorldRenderer.prepare(); -// } catch (Exception exception) { -// exception.printStackTrace(); -// } -// } - CommonDataHolder.getInstance().resourcePacksChanged = false; - } - - @Inject(at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;", shift = At.Shift.BEFORE, ordinal = 0), method = "setScreen(Lnet/minecraft/client/gui/screens/Screen;)V") - public void gui(Screen pGuiScreen, CallbackInfo info) { - GuiHandler.onScreenChanged(this.screen, pGuiScreen, true); - } - - - private void drawNotifyMirror() { - if (System.currentTimeMillis() < this.mirroNotifyStart + this.mirroNotifyLen) { - RenderSystem.viewport(0, 0, this.window.getScreenWidth(), this.window.getScreenHeight()); - Matrix4f matrix4f = Matrix4f.orthographic(0.0F, (float) this.window.getScreenWidth(), 0.0F, - (float) this.window.getScreenHeight(), 1000.0F, 3000.0F); - RenderSystem.setProjectionMatrix(matrix4f); - RenderSystem.getModelViewStack().pushPose(); - RenderSystem.getModelViewStack().setIdentity(); - RenderSystem.getModelViewStack().translate(0, 0, -2000); - RenderSystem.applyModelViewMatrix(); - PoseStack p = new PoseStack(); - p.scale(3, 3, 3); - RenderSystem.clear(256, ON_OSX); - - if (this.mirrorNotifyClear) { - RenderSystem.clearColor(0, 0, 0, 0); - RenderSystem.clear(16384, ON_OSX); - } - - int i = this.window.getScreenWidth() / 22; - ArrayList arraylist = new ArrayList<>(); - - if (this.mirrorNotifyText != null) { - Utils.wordWrap(this.mirrorNotifyText, i, arraylist); - } - - int j = 1; - int k = 12; - - for (String s : arraylist) { - this.font.draw(p, s, 1.0F, (float) j, 16777215); - j += 12; - } - RenderSystem.getModelViewStack().popPose(); - } - } - - @Override - public void notifyMirror(String text, boolean clear, int lengthMs) { - this.mirroNotifyStart = System.currentTimeMillis(); - this.mirroNotifyLen = (long) lengthMs; - this.mirrorNotifyText = text; - this.mirrorNotifyClear = clear; - } - - private void checkGLError(String string) { - // TODO optifine - if (GlStateManager._getError() != 0) { - System.err.println(string); - } - - } - - private void renderSingleView(RenderPass eye, float nano, boolean renderworld) { - GlStateManager._clearColor(0.0F, 0.0F, 0.0F, 1.0F); - GlStateHelper.clear(16384); - GlStateManager._enableTexture(); - GlStateManager._enableDepthTest(); - this.profiler.push("updateCameraAndRender"); - this.gameRenderer.render(nano, System.nanoTime(), renderworld); - this.profiler.pop(); - this.checkGLError("post game render " + eye.name()); - - if (ClientDataHolder.getInstance().currentPass == RenderPass.LEFT - || ClientDataHolder.getInstance().currentPass == RenderPass.RIGHT) { - this.profiler.push("postprocesseye"); - RenderTarget rendertarget = this.mainRenderTarget; - - if (ClientDataHolder.getInstance().vrSettings.useFsaa) { - GlStateManager._clearColor(RenderSystem.getShaderFogColor()[0], RenderSystem.getShaderFogColor()[1], RenderSystem.getShaderFogColor()[2], RenderSystem.getShaderFogColor()[3]); - if (eye == RenderPass.LEFT) { - ClientDataHolder.getInstance().vrRenderer.framebufferEye0.bindWrite(true); - } else { - ClientDataHolder.getInstance().vrRenderer.framebufferEye1.bindWrite(true); - } - GlStateHelper.clear(16384); - this.profiler.push("fsaa"); - // DataHolder.getInstance().vrRenderer.doFSAA(Config.isShaders()); TODO - ClientDataHolder.getInstance().vrRenderer.doFSAA(eye, false); - rendertarget = ClientDataHolder.getInstance().vrRenderer.fsaaLastPassResultFBO; - this.checkGLError("fsaa " + eye.name()); - this.profiler.pop(); - } - - if (eye == RenderPass.LEFT) { - ClientDataHolder.getInstance().vrRenderer.framebufferEye0.bindWrite(true); - } else { - ClientDataHolder.getInstance().vrRenderer.framebufferEye1.bindWrite(true); - } - - if (ClientDataHolder.getInstance().vrSettings.useFOVReduction - && ClientDataHolder.getInstance().vrPlayer.getFreeMove()) { - if (this.player != null && (Math.abs(this.player.zza) > 0.0F || Math.abs(this.player.xxa) > 0.0F)) { - this.fov = (float) ((double) this.fov - 0.05D); - - if (this.fov < ClientDataHolder.getInstance().vrSettings.fovReductionMin) { - this.fov = ClientDataHolder.getInstance().vrSettings.fovReductionMin; - } - } else { - this.fov = (float) ((double) this.fov + 0.01D); - - if ((double) this.fov > 0.8D) { - this.fov = 0.8F; - } - } - } else { - this.fov = 1.0F; - } - - VRShaders._FOVReduction_OffsetUniform.set( - ClientDataHolder.getInstance().vrSettings.fovRedutioncOffset); - float red = 0.0F; - float black = 0.0F; - float blue = 0.0F; - float time = (float) Util.getMillis() / 1000.0F; - - if (this.player != null && this.level != null) { - if (((GameRendererExtension) this.gameRenderer) - .isInWater() != ((GameRendererExtension) this.gameRenderer).isInWater()) { - ClientDataHolder.getInstance().watereffect = 2.3F; - } else { - if (((GameRendererExtension) this.gameRenderer).isInWater()) { - ClientDataHolder.getInstance().watereffect -= 0.008333334F; - } else { - ClientDataHolder.getInstance().watereffect -= 0.016666668F; - } - - if (ClientDataHolder.getInstance().watereffect < 0.0F) { - ClientDataHolder.getInstance().watereffect = 0.0F; - } - } - - ((GameRendererExtension) this.gameRenderer) - .setWasInWater(((GameRendererExtension) this.gameRenderer).isInWater()); - - if (Xplat - .isModLoaded("iris") || Xplat.isModLoaded("oculus")) { - if (!IrisHelper.hasWaterEffect()) { - ClientDataHolder.getInstance().watereffect = 0.0F; - } - } - - if (((GameRendererExtension) this.gameRenderer).isInPortal()) { - ClientDataHolder.getInstance().portaleffect = 1.0F; - } else { - ClientDataHolder.getInstance().portaleffect -= 0.016666668F; - - if (ClientDataHolder.getInstance().portaleffect < 0.0F) { - ClientDataHolder.getInstance().portaleffect = 0.0F; - } - } - - ItemStack itemstack = this.player.getInventory().getArmor(3); - - if (itemstack.getItem() == Blocks.CARVED_PUMPKIN.asItem() - && (!itemstack.hasTag() || itemstack.getTag().getInt("CustomModelData") == 0)) { - ClientDataHolder.getInstance().pumpkineffect = 1.0F; - } - - float hurtTimer = (float) this.player.hurtTime - nano; - float healthpercent = 1.0F - this.player.getHealth() / this.player.getMaxHealth(); - healthpercent = (healthpercent - 0.5F) * 0.75F; - - if (hurtTimer > 0.0F) { // hurt flash - hurtTimer = hurtTimer / (float) this.player.hurtDuration; - hurtTimer = healthpercent - + Mth.sin(hurtTimer * hurtTimer * hurtTimer * hurtTimer * (float) Math.PI) * 0.5F; - red = hurtTimer; - } else if (ClientDataHolder.getInstance().vrSettings.low_health_indicator){ // red due to low health - red = (float) ((double) healthpercent - * Math.abs(Math.sin((double) (2.5F * time) / ((double) (1.0F - healthpercent) + 0.1D)))); - - if (this.player.isCreative()) { - red = 0.0F; - } - } - - float freeze = this.player.getPercentFrozen(); - if (freeze > 0) { - blue = red; - blue = Math.max(freeze / 2, blue); - red = 0; - } - - if (this.player.isSleeping() && (double) black < 0.8D) { - black = 0.8F; - } - - if (ClientDataHolder.getInstance().vr.isWalkingAbout && (double) black < 0.8D) { - black = 0.5F; - } - } else { - ClientDataHolder.getInstance().watereffect = 0.0F; - ClientDataHolder.getInstance().portaleffect = 0.0F; - ClientDataHolder.getInstance().pumpkineffect = 0.0F; - } - - if (ClientDataHolder.getInstance().pumpkineffect > 0.0F) { - VRShaders._FOVReduction_RadiusUniform.set(0.3F); - VRShaders._FOVReduction_BorderUniform.set(0.0F); - } else { - VRShaders._FOVReduction_RadiusUniform.set(this.fov); - VRShaders._FOVReduction_BorderUniform.set(0.06F); - } - - VRShaders._Overlay_HealthAlpha.set(red); - VRShaders._Overlay_FreezeAlpha.set(blue); - VRShaders._Overlay_BlackAlpha.set(black); - VRShaders._Overlay_time.set(time); - VRShaders._Overlay_waterAmplitude.set(ClientDataHolder.getInstance().watereffect); - VRShaders._Overlay_portalAmplitutde.set(ClientDataHolder.getInstance().portaleffect); - VRShaders._Overlay_pumpkinAmplitutde.set( - ClientDataHolder.getInstance().pumpkineffect); - RenderPass renderpass = ClientDataHolder.getInstance().currentPass; - - VRShaders._Overlay_eye.set( - ClientDataHolder.getInstance().currentPass == RenderPass.LEFT ? 1 : -1); - ((RenderTargetExtension) rendertarget).blitFovReduction(VRShaders.fovReductionShader, ClientDataHolder.getInstance().vrRenderer.framebufferEye0.viewWidth, - ClientDataHolder.getInstance().vrRenderer.framebufferEye0.viewHeight); - GlStateManager._glUseProgram(0); - this.checkGLError("post overlay" + eye); - this.profiler.pop(); - } - - if (ClientDataHolder.getInstance().currentPass == RenderPass.CAMERA) { - this.profiler.push("cameracopy"); - ClientDataHolder.getInstance().vrRenderer.cameraFramebuffer.bindWrite(true); - GlStateManager._clearColor(0.0F, 0.0F, 0.0F, 1.0F); - GlStateHelper.clear(16640); - ((RenderTargetExtension) ClientDataHolder.getInstance().vrRenderer.cameraRenderFramebuffer).blitToScreen(0, - ClientDataHolder.getInstance().vrRenderer.cameraFramebuffer.viewWidth, - ClientDataHolder.getInstance().vrRenderer.cameraFramebuffer.viewHeight, 0, true, 0.0F, 0.0F, false); - this.profiler.pop(); - } - } - - private void copyToMirror() { - // TODO: fix mixed reality... again - if (ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.OFF - && ClientDataHolder.getInstance().vr.isHMDTracking()) { - this.notifyMirror("Mirror is OFF", true, 1000); - } else if (ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY) { - if (VRShaders.depthMaskShader != null) { - this.doMixedRealityMirror(); - } else { - this.notifyMirror("Shader compile failed, see log", true, 10000); - } - } else if (ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.DUAL) { - RenderTarget rendertarget = ClientDataHolder.getInstance().vrRenderer.framebufferEye0; - RenderTarget rendertarget1 = ClientDataHolder.getInstance().vrRenderer.framebufferEye1; - - if (rendertarget != null) { - ((RenderTargetExtension) rendertarget).blitToScreen(0, this.window.getScreenWidth() / 2, - this.window.getScreenHeight(), 0, true, 0.0F, 0.0F, false); - } - - if (rendertarget1 != null) { - ((RenderTargetExtension) rendertarget1).blitToScreen(this.window.getScreenWidth() / 2, - this.window.getScreenWidth() / 2, this.window.getScreenHeight(), 0, true, 0.0F, 0.0F, false); - } - } else { - float xcrop = 0.0F; - float ycrop = 0.0F; - boolean ar = false; - RenderTarget source = ClientDataHolder.getInstance().vrRenderer.framebufferEye0; - - if (ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.FIRST_PERSON) { - source = ClientDataHolder.getInstance().vrRenderer.framebufferUndistorted; - } else if (ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON) { - source = ClientDataHolder.getInstance().vrRenderer.framebufferMR; - } else if (ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.GUI) { - source = GuiHandler.guiFramebuffer; - } else if (ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.SINGLE - || ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.OFF) { - if (!ClientDataHolder.getInstance().vrSettings.displayMirrorLeftEye) - source = ClientDataHolder.getInstance().vrRenderer.framebufferEye1; - } else if (ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.CROPPED) { - if (!ClientDataHolder.getInstance().vrSettings.displayMirrorLeftEye) - source = ClientDataHolder.getInstance().vrRenderer.framebufferEye1; - - xcrop = 0.15F; - ycrop = 0.15F; - ar = true; - } - // Debug - // source = GuiHandler.guiFramebuffer; - // source = DataHolder.getInstance().vrRenderer.telescopeFramebufferR; - // - if (source != null) { - ((RenderTargetExtension) source).blitToScreen(0, this.window.getScreenWidth(), - this.window.getScreenHeight(), 0, true, xcrop, ycrop, ar); - } - } - } - - private void doMixedRealityMirror() { -// boolean flag = Config.isShaders(); - boolean flag = false; - boolean flag1 = ClientDataHolder.getInstance().vrSettings.mixedRealityUnityLike - && ClientDataHolder.getInstance().vrSettings.mixedRealityAlphaMask; - - if (!flag1) { - GlStateManager._clearColor( - (float) ClientDataHolder.getInstance().vrSettings.mixedRealityKeyColor.getRed() / 255.0F, - (float) ClientDataHolder.getInstance().vrSettings.mixedRealityKeyColor.getGreen() / 255.0F, - (float) ClientDataHolder.getInstance().vrSettings.mixedRealityKeyColor.getBlue() / 255.0F, 1.0F); - } else { - GlStateManager._clearColor(0.0F, 0.0F, 0.0F, 1.0F); - } - - GlStateHelper.clear(16640); - Vec3 vec3 = ClientDataHolder.getInstance().vrPlayer.vrdata_room_pre.getHeadPivot() - .subtract(ClientDataHolder.getInstance().vrPlayer.vrdata_room_pre.getEye(RenderPass.THIRD).getPosition()); - Matrix4f matrix4f = ClientDataHolder.getInstance().vrPlayer.vrdata_room_pre.getEye(RenderPass.THIRD) - .getMatrix().transposed().toMCMatrix(); - Vector3 vector3 = ClientDataHolder.getInstance().vrPlayer.vrdata_room_pre.getEye(RenderPass.THIRD).getMatrix() - .transform(Vector3.forward()); - VRShaders._DepthMask_projectionMatrix.set(((GameRendererExtension) this.gameRenderer).getThirdPassProjectionMatrix()); - VRShaders._DepthMask_viewMatrix.set(matrix4f); - VRShaders._DepthMask_hmdViewPosition.set((float) vec3.x, (float) vec3.y, - (float) vec3.z); - VRShaders._DepthMask_hmdPlaneNormal.set( -vector3.getX(), 0.0F, -vector3.getZ()); - VRShaders._DepthMask_keyColorUniform.set( - (float) ClientDataHolder.getInstance().vrSettings.mixedRealityKeyColor.getRed() / 255.0F, - (float) ClientDataHolder.getInstance().vrSettings.mixedRealityKeyColor.getGreen() / 255.0F, - (float) ClientDataHolder.getInstance().vrSettings.mixedRealityKeyColor.getBlue() / 255.0F); - VRShaders._DepthMask_alphaModeUniform.set(flag1 ? 1 : 0); - GlStateManager._activeTexture(33985); - RenderSystem.setShaderTexture(0, ClientDataHolder.getInstance().vrRenderer.framebufferMR.getColorTextureId()); - GlStateManager._activeTexture(33986); - -// if (flag && Shaders.dfb != null) { TODO -// GlStateManager._bindTexture(Shaders.dfb.depthTextures.get(0)); -// } else { - RenderSystem.setShaderTexture(1, ClientDataHolder.getInstance().vrRenderer.framebufferMR.getDepthTextureId()); - -// } - - GlStateManager._activeTexture(33984); - - for (int i = 0; i < (flag1 ? 3 : 2); ++i) { - int j = this.window.getScreenWidth() / 2; - int k = this.window.getScreenHeight(); - int l = this.window.getScreenWidth() / 2 * i; - int i1 = 0; - - if (ClientDataHolder.getInstance().vrSettings.mixedRealityUnityLike) { - j = this.window.getScreenWidth() / 2; - k = this.window.getScreenHeight() / 2; - - if (ClientDataHolder.getInstance().vrSettings.mixedRealityAlphaMask && i == 2) { - l = this.window.getScreenWidth() / 2; - i1 = this.window.getScreenHeight() / 2; - } else { - l = 0; - i1 = this.window.getScreenHeight() / 2 * (1 - i); - } - } - - VRShaders._DepthMask_resolutionUniform.set((float) j, (float) k); - VRShaders._DepthMask_positionUniform.set((float) l, (float) i1); - VRShaders._DepthMask_passUniform.set(i); - ((RenderTargetExtension) ClientDataHolder.getInstance().vrRenderer.framebufferMR).blitToScreen(VRShaders.depthMaskShader, l, j, k, i1, true, - 0.0F, 0.0F, false); - } - - GlStateManager._glUseProgram(0); - - if (ClientDataHolder.getInstance().vrSettings.mixedRealityUnityLike) { - if (ClientDataHolder.getInstance().vrSettings.mixedRealityUndistorted) { - ((RenderTargetExtension) ClientDataHolder.getInstance().vrRenderer.framebufferUndistorted).blitToScreen( - this.window.getScreenWidth() / 2, this.window.getScreenWidth() / 2, - this.window.getScreenHeight() / 2, 0, true, 0.0F, 0.0F, false); - } else { - ((RenderTargetExtension) ClientDataHolder.getInstance().vrRenderer.framebufferEye0).blitToScreen( - this.window.getScreenWidth() / 2, this.window.getScreenWidth() / 2, - this.window.getScreenHeight() / 2, 0, true, 0.0F, 0.0F, false); - } - } - } - -} diff --git a/common/src/main/java/org/vivecraft/mixin/client/MouseHandler.java.patch b/common/src/main/java/org/vivecraft/mixin/client/MouseHandler.java.patch deleted file mode 100644 index 9748a0512..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/MouseHandler.java.patch +++ /dev/null @@ -1,241 +0,0 @@ ---- a/net/minecraft/client/MouseHandler.java -+++ b/net/minecraft/client/MouseHandler.java -@@ -9,6 +9,7 @@ - import net.minecraft.client.gui.screens.Screen; - import net.minecraft.util.Mth; - import net.minecraft.util.SmoothDouble; -+import net.optifine.reflect.Reflector; - import org.lwjgl.glfw.GLFWDropCallback; - - public class MouseHandler -@@ -31,13 +32,14 @@ - private double accumulatedScroll; - private double lastMouseEventTime = Double.MIN_VALUE; - private boolean mouseGrabbed; -+ private boolean butts = true; - - public MouseHandler(Minecraft pMinecraft) - { - this.minecraft = pMinecraft; - } - -- private void onPress(long pWindowPointer, int p_91532_, int pButton, int pAction) -+ public void onPress(long pWindowPointer, int p_91532_, int pButton, int pAction) - { - if (pWindowPointer == this.minecraft.getWindow().getWindow()) - { -@@ -82,6 +84,11 @@ - this.activeButton = -1; - } - -+ if (Reflector.callBoolean(Reflector.ForgeHooksClient_onRawMouseClicked, p_91532_, pButton, pAction)) -+ { -+ return; -+ } -+ - boolean[] aboolean = new boolean[] {false}; - - if (this.minecraft.getOverlay() == null) -@@ -104,15 +111,47 @@ - screen.afterMouseAction(); - Screen.wrapScreenError(() -> - { -- aboolean[0] = screen.mouseClicked(d0, d1, i); -- }, "mouseClicked event handler", screen.getClass().getCanonicalName()); -+ if (Reflector.ForgeHooksClient_onGuiMouseClickedPre.exists()) -+ { -+ aboolean[0] = Reflector.callBoolean(Reflector.ForgeHooksClient_onGuiMouseClickedPre, this.minecraft.screen, d0, d1, i); -+ -+ if (!aboolean[0]) -+ { -+ aboolean[0] = this.minecraft.screen.mouseClicked(d0, d1, i); -+ } -+ -+ if (!aboolean[0]) -+ { -+ aboolean[0] = Reflector.callBoolean(Reflector.ForgeHooksClient_onGuiMouseClickedPost, this.minecraft.screen, d0, d1, i); -+ } -+ } -+ else { -+ aboolean[0] = this.minecraft.screen.mouseClicked(d0, d1, i); -+ } -+ }, "mouseClicked event handler", this.minecraft.screen.getClass().getCanonicalName()); - } - else - { - Screen.wrapScreenError(() -> - { -- aboolean[0] = screen.mouseReleased(d0, d1, i); -- }, "mouseReleased event handler", screen.getClass().getCanonicalName()); -+ if (Reflector.ForgeHooksClient_onGuiMouseReleasedPre.exists()) -+ { -+ aboolean[0] = Reflector.callBoolean(Reflector.ForgeHooksClient_onGuiMouseReleasedPre, this.minecraft.screen, d0, d1, i); -+ -+ if (!aboolean[0]) -+ { -+ aboolean[0] = this.minecraft.screen.mouseReleased(d0, d1, i); -+ } -+ -+ if (!aboolean[0]) -+ { -+ aboolean[0] = Reflector.callBoolean(Reflector.ForgeHooksClient_onGuiMouseReleasedPost, this.minecraft.screen, d0, d1, i); -+ } -+ } -+ else { -+ aboolean[0] = this.minecraft.screen.mouseReleased(d0, d1, i); -+ } -+ }, "mouseReleased event handler", this.minecraft.screen.getClass().getCanonicalName()); - } - } - } -@@ -136,7 +175,7 @@ - - if (flag) - { -- if (this.minecraft.player.isSpectator() && i == 2) -+ if (this.minecraft.player != null && this.minecraft.player.isSpectator() && i == 2) - { - this.minecraft.gui.getSpectatorGui().onMouseMiddleClick(); - } -@@ -146,10 +185,12 @@ - } - } - } -+ -+ Reflector.call(Reflector.ForgeHooksClient_fireMouseInput, p_91532_, pButton, pAction); - } - } - -- private void onScroll(long pWindowPointer, double p_91528_, double pXOffset) -+ public void onScroll(long pWindowPointer, double p_91528_, double pXOffset) - { - if (pWindowPointer == Minecraft.getInstance().getWindow().getWindow()) - { -@@ -161,6 +202,19 @@ - { - double d1 = this.xpos * (double)this.minecraft.getWindow().getGuiScaledWidth() / (double)this.minecraft.getWindow().getScreenWidth(); - double d2 = this.ypos * (double)this.minecraft.getWindow().getGuiScaledHeight() / (double)this.minecraft.getWindow().getScreenHeight(); -+ -+ if (Reflector.callBoolean(Reflector.ForgeHooksClient_onGuiMouseScrollPre, this, this.minecraft.screen, d0)) -+ { -+ return; -+ } -+ -+ if (this.minecraft.screen.mouseScrolled(d1, d2, d0)) -+ { -+ return; -+ } -+ -+ Reflector.callBoolean(Reflector.ForgeHooksClient_onGuiMouseScrollPost, this, this.minecraft.screen, d0); -+ - this.minecraft.screen.mouseScrolled(d1, d2, d0); - this.minecraft.screen.afterMouseAction(); - } -@@ -181,6 +235,11 @@ - - this.accumulatedScroll -= (double)f1; - -+ if (Reflector.callBoolean(Reflector.ForgeHooksClient_onMouseScroll, this, d0)) -+ { -+ return; -+ } -+ - if (this.minecraft.player.isSpectator()) - { - if (this.minecraft.gui.getSpectatorGui().isMenuActive()) -@@ -242,7 +301,7 @@ - }); - } - -- private void onMove(long pWindowPointer, double p_91563_, double pXpos) -+ public void onMove(long pWindowPointer, double p_91563_, double pXpos) - { - if (pWindowPointer == Minecraft.getInstance().getWindow().getWindow()) - { -@@ -270,7 +329,13 @@ - double d3 = (pXpos - this.ypos) * (double)this.minecraft.getWindow().getGuiScaledHeight() / (double)this.minecraft.getWindow().getScreenHeight(); - Screen.wrapScreenError(() -> - { -- screen.mouseDragged(d0, d1, this.activeButton, d2, d3); -+ if (!Reflector.callBoolean(Reflector.ForgeHooksClient_onGuiMouseDragPre, this.minecraft.screen, d0, d1, this.activeButton, d2, d3)) -+ { -+ if (!screen.mouseDragged(d0, d1, this.activeButton, d2, d3)) -+ { -+ Reflector.call(Reflector.ForgeHooksClient_onGuiMouseDragPost, this.minecraft.screen, d0, d1, this.activeButton, d2, d3); -+ } -+ } - }, "mouseDragged event handler", screen.getClass().getCanonicalName()); - } - -@@ -294,6 +359,9 @@ - - public void turnPlayer() - { -+ //Vivecraft -+ if(butts) return; -+ // - double d0 = Blaze3D.getTime(); - double d1 = d0 - this.lastMouseEventTime; - this.lastMouseEventTime = d0; -@@ -376,6 +444,21 @@ - return this.ypos; - } - -+ public boolean isMiddleDown() -+ { -+ return this.isMiddlePressed; -+ } -+ -+ public double getXVelocity() -+ { -+ return this.accumulatedDX; -+ } -+ -+ public double getYVelocity() -+ { -+ return this.accumulatedDY; -+ } -+ - public void setIgnoreFirstMove() - { - this.ignoreFirstMove = true; -@@ -388,9 +471,13 @@ - - public void grabMouse() - { -- if (this.minecraft.isWindowActive()) -+ if (!this.dataholder.vrSettings.seated) - { -- if (!this.mouseGrabbed) -+ this.mouseGrabbed = true; -+ } -+ else -+ { -+ if (this.minecraft.isWindowActive() && !this.mouseGrabbed) - { - if (!Minecraft.ON_OSX) - { -@@ -410,12 +497,19 @@ - - public void releaseMouse() - { -- if (this.mouseGrabbed) -+ if (!this.dataholder.vrSettings.seated) - { - this.mouseGrabbed = false; -- this.xpos = (double)(this.minecraft.getWindow().getScreenWidth() / 2); -- this.ypos = (double)(this.minecraft.getWindow().getScreenHeight() / 2); -- InputConstants.grabOrReleaseMouse(this.minecraft.getWindow().getWindow(), 212993, this.xpos, this.ypos); -+ } -+ else -+ { -+ if (this.mouseGrabbed) -+ { -+ this.mouseGrabbed = false; -+ this.xpos = (double)(this.minecraft.getWindow().getScreenWidth() / 2); -+ this.ypos = (double)(this.minecraft.getWindow().getScreenHeight() / 2); -+ InputConstants.grabOrReleaseMouse(this.minecraft.getWindow().getWindow(), 212993, this.xpos, this.ypos); -+ } - } - } - diff --git a/common/src/main/java/org/vivecraft/mixin/client/MouseHandlerVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client/MouseHandlerVRMixin.java deleted file mode 100644 index c1877f0ff..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/MouseHandlerVRMixin.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.vivecraft.mixin.client; - -import net.minecraft.client.player.LocalPlayer; -import org.vivecraft.ClientDataHolder; -import net.minecraft.client.Minecraft; -import net.minecraft.client.MouseHandler; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.*; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(MouseHandler.class) -public class MouseHandlerVRMixin { - - @Shadow - private boolean isMiddlePressed; - @Shadow - private double accumulatedDX; - @Shadow - private double accumulatedDY; - - @Shadow private boolean mouseGrabbed; - @Final - @Shadow - private Minecraft minecraft; - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;mouseScrolled(DDD)Z", shift = At.Shift.BEFORE), method = "onScroll", cancellable = true) - public void cancelScroll(long g, double h, double f, CallbackInfo ci) { - if (this.minecraft.screen.mouseScrolled(g, h, f)) { - ci.cancel(); - } - } - - @Redirect(method = "onPress", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;isSpectator()Z")) - private boolean checkNull(LocalPlayer instance) { - return instance != null && instance.isSpectator(); - } - - @Inject(at = @At("HEAD"), method = "turnPlayer", cancellable = true) - public void noTurn(CallbackInfo ci) { - ci.cancel(); - } - - public boolean isMiddleDown() { - return this.isMiddlePressed; - } - - public double getXVelocity() { - return this.accumulatedDX; - } - - public double getYVelocity() { - return this.accumulatedDY; - } - - @Inject(at = @At("HEAD"), method = "grabMouse", cancellable = true) - public void seated(CallbackInfo ci) { - if (!ClientDataHolder.getInstance().vrSettings.seated) { - this.mouseGrabbed = true; - ci.cancel(); - } - } - - @Inject(at = @At(value = "HEAD"), method = "releaseMouse", cancellable = true) - public void grabMouse(CallbackInfo ci) { - if (!ClientDataHolder.getInstance().vrSettings.seated) { - this.mouseGrabbed = false; - ci.cancel(); - } - } -} diff --git a/common/src/main/java/org/vivecraft/mixin/client/Option.java.patch b/common/src/main/java/org/vivecraft/mixin/client/Option.java.patch deleted file mode 100644 index 411b4b069..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/Option.java.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- a/net/minecraft/client/Option.java -+++ b/net/minecraft/client/Option.java -@@ -435,6 +435,9 @@ - p_193661_0_.graphicsMode = p_193661_2_; - p_193661_0_.updateRenderClouds(); - minecraft.levelRenderer.allChanged(); -+ //Vivecraft -+ minecraft.vrRenderer.reinitFrameBuffers("gfx setting change"); -+ // - } - }).setTooltip((p_193632_0_) -> - { diff --git a/common/src/main/java/org/vivecraft/mixin/client/OptionVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client/OptionVRMixin.java deleted file mode 100644 index 927679d8d..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/OptionVRMixin.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.vivecraft.mixin.client; - -import org.spongepowered.asm.mixin.injection.Group; -import org.vivecraft.ClientDataHolder; -import net.minecraft.client.*; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - - -@Mixin(Option.class) -public abstract class OptionVRMixin { - - @Group(name = "reinitFrameBuffers", min = 1, max = 1) - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;allChanged()V", remap = true), method = "method_32552", remap = false, expect = 0) - private static void reinitFabric(Options options, Option option, GraphicsStatus graphicsStatus, CallbackInfo ci) { - ClientDataHolder.getInstance().vrRenderer.reinitFrameBuffers("gfx setting change"); - } - - @Group(name = "reinitFrameBuffers", min = 1, max = 1) - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;allChanged()V",remap = true), method = "m_193661_", remap = false, expect = 0) - private static void reinitForge(Options options, Option option, GraphicsStatus graphicsStatus, CallbackInfo ci) { - ClientDataHolder.getInstance().vrRenderer.reinitFrameBuffers("gfx setting change"); - } - -} diff --git a/common/src/main/java/org/vivecraft/mixin/client/Options.java.patch b/common/src/main/java/org/vivecraft/mixin/client/Options.java.patch deleted file mode 100644 index 0a0903f55..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/Options.java.patch +++ /dev/null @@ -1,751 +0,0 @@ ---- a/net/minecraft/client/Options.java -+++ b/net/minecraft/client/Options.java -@@ -202,6 +202,7 @@ - public float fovEffectScale = 1.0F; - public double gamma; - public int guiScale; -+ public int guiScaleUser; - public ParticleStatus particles = ParticleStatus.ALL; - public NarratorStatus narratorStatus = NarratorStatus.OFF; - public String languageCode = "en_us"; -@@ -214,7 +215,7 @@ - public boolean ofSmoothFps = false; - public boolean ofSmoothWorld = Config.isSingleProcessor(); - public boolean ofLazyChunkLoading = Config.isSingleProcessor(); -- public boolean ofRenderRegions = false; -+ public boolean ofRenderRegions = true; - public boolean ofSmartAnimations = false; - public double ofAoLevel = 1.0D; - public int ofAaLevel = 0; -@@ -251,7 +252,7 @@ - public boolean ofFastRender = false; - public boolean ofDynamicFov = true; - public boolean ofAlternateBlocks = true; -- public int ofDynamicLights = 3; -+ public int ofDynamicLights = 2; - public boolean ofCustomEntityModels = true; - public boolean ofCustomGuis = true; - public boolean ofShowGlErrors = true; -@@ -331,6 +332,7 @@ - this.ofKeyBindZoom = new KeyMapping("of.key.zoom", 67, "key.categories.misc"); - this.keyMappings = ArrayUtils.add(this.keyMappings, this.ofKeyBindZoom); - KeyUtils.fixKeyConflicts(this.keyMappings, new KeyMapping[] {this.ofKeyBindZoom}); -+ this.keyMappings = this.minecraft.vr.initializeBindings(this.keyMappings); - this.renderDistance = 8; - this.load(); - Config.initGameSettings(this); -@@ -398,7 +400,9 @@ - this.renderDistance = (int)Mth.clamp((double)p_168428_.process("renderDistance", this.renderDistance), Option.RENDER_DISTANCE.getMinValue(), Option.RENDER_DISTANCE.getMaxValue()); - this.simulationDistance = (int)Mth.clamp((double)p_168428_.process("simulationDistance", this.simulationDistance), Option.SIMULATION_DISTANCE.getMinValue(), Option.SIMULATION_DISTANCE.getMaxValue()); - this.entityDistanceScaling = p_168428_.process("entityDistanceScaling", this.entityDistanceScaling); -- this.guiScale = p_168428_.process("guiScale", this.guiScale); -+ //Vivecraft -+ this.guiScaleUser = p_168428_.process("guiScale", this.guiScaleUser); -+ // - this.particles = p_168428_.process("particles", this.particles, ParticleStatus::byId, ParticleStatus::getId); - this.framerateLimit = p_168428_.process("maxFps", this.framerateLimit); - -@@ -834,9 +838,9 @@ - - printwriter.close(); - } -- catch (Exception exception1) -+ catch (Exception exception) - { -- LOGGER.error("Failed to save options", (Throwable)exception1); -+ LOGGER.error("Failed to save options", (Throwable)exception); - } - - this.saveOptions = false; -@@ -904,22 +908,22 @@ - return this.useNativeTransport; - } - -- public void setOptionFloatValueOF(Option option, double val) -+ public void setOptionFloatValueOF(Option p_setOptionFloatValueOF_1_, double p_setOptionFloatValueOF_2_) - { -- if (option == Option.CLOUD_HEIGHT) -+ if (p_setOptionFloatValueOF_1_ == Option.CLOUD_HEIGHT) - { -- this.ofCloudsHeight = val; -+ this.ofCloudsHeight = p_setOptionFloatValueOF_2_; - } - -- if (option == Option.AO_LEVEL) -+ if (p_setOptionFloatValueOF_1_ == Option.AO_LEVEL) - { -- this.ofAoLevel = val; -+ this.ofAoLevel = p_setOptionFloatValueOF_2_; - this.minecraft.levelRenderer.allChanged(); - } - -- if (option == Option.AA_LEVEL) -+ if (p_setOptionFloatValueOF_1_ == Option.AA_LEVEL) - { -- int i = (int)val; -+ int i = (int)p_setOptionFloatValueOF_2_; - - if (i > 0 && Config.isShaders()) - { -@@ -935,60 +939,61 @@ - - this.ofAaLevel = i; - this.ofAaLevel = Config.limit(this.ofAaLevel, 0, 16); -+ this.ofAaLevel = 0; - } - -- if (option == Option.AF_LEVEL) -+ if (p_setOptionFloatValueOF_1_ == Option.AF_LEVEL) - { -- int j = (int)val; -+ int j = (int)p_setOptionFloatValueOF_2_; - this.ofAfLevel = j; - this.ofAfLevel = Config.limit(this.ofAfLevel, 1, 16); - this.minecraft.delayTextureReload(); - Shaders.uninit(); - } - -- if (option == Option.MIPMAP_TYPE) -+ if (p_setOptionFloatValueOF_1_ == Option.MIPMAP_TYPE) - { -- int k = (int)val; -+ int k = (int)p_setOptionFloatValueOF_2_; - this.ofMipmapType = Config.limit(k, 0, 3); - this.updateMipmaps(); - } - } - -- public double getOptionFloatValueOF(Option settingOption) -+ public double getOptionFloatValueOF(Option p_getOptionFloatValueOF_1_) - { -- if (settingOption == Option.CLOUD_HEIGHT) -+ if (p_getOptionFloatValueOF_1_ == Option.CLOUD_HEIGHT) - { - return this.ofCloudsHeight; - } -- else if (settingOption == Option.AO_LEVEL) -+ else if (p_getOptionFloatValueOF_1_ == Option.AO_LEVEL) - { - return this.ofAoLevel; - } -- else if (settingOption == Option.AA_LEVEL) -+ else if (p_getOptionFloatValueOF_1_ == Option.AA_LEVEL) - { - return (double)this.ofAaLevel; - } -- else if (settingOption == Option.AF_LEVEL) -+ else if (p_getOptionFloatValueOF_1_ == Option.AF_LEVEL) - { - return (double)this.ofAfLevel; - } -- else if (settingOption == Option.MIPMAP_TYPE) -+ else if (p_getOptionFloatValueOF_1_ == Option.MIPMAP_TYPE) - { - return (double)this.ofMipmapType; - } -- else if (settingOption == Option.FRAMERATE_LIMIT) -+ else if (p_getOptionFloatValueOF_1_ != Option.FRAMERATE_LIMIT) - { -- return (double)this.framerateLimit == Option.FRAMERATE_LIMIT.getMaxValue() && this.enableVsync ? 0.0D : (double)this.framerateLimit; -+ return (double)Float.MAX_VALUE; - } - else - { -- return (double)Float.MAX_VALUE; -+ return (double)this.framerateLimit == Option.FRAMERATE_LIMIT.getMaxValue() && this.enableVsync ? 0.0D : (double)this.framerateLimit; - } - } - -- public void setOptionValueOF(Option par1EnumOptions, int par2) -+ public void setOptionValueOF(Option p_setOptionValueOF_1_, int p_setOptionValueOF_2_) - { -- if (par1EnumOptions == Option.FOG_FANCY) -+ if (p_setOptionValueOF_1_ == Option.FOG_FANCY) - { - switch (this.ofFogType) - { -@@ -1001,7 +1006,7 @@ - } - } - -- if (par1EnumOptions == Option.FOG_START) -+ if (p_setOptionValueOF_1_ == Option.FOG_START) - { - this.ofFogStart += 0.2F; - -@@ -1011,18 +1016,18 @@ - } - } - -- if (par1EnumOptions == Option.SMOOTH_FPS) -+ if (p_setOptionValueOF_1_ == Option.SMOOTH_FPS) - { - this.ofSmoothFps = !this.ofSmoothFps; - } - -- if (par1EnumOptions == Option.SMOOTH_WORLD) -+ if (p_setOptionValueOF_1_ == Option.SMOOTH_WORLD) - { - this.ofSmoothWorld = !this.ofSmoothWorld; - Config.updateThreadPriorities(); - } - -- if (par1EnumOptions == Option.CLOUDS) -+ if (p_setOptionValueOF_1_ == Option.CLOUDS) - { - ++this.ofClouds; - -@@ -1034,13 +1039,13 @@ - this.updateRenderClouds(); - } - -- if (par1EnumOptions == Option.TREES) -+ if (p_setOptionValueOF_1_ == Option.TREES) - { - this.ofTrees = nextValue(this.ofTrees, OF_TREES_VALUES); - this.minecraft.levelRenderer.allChanged(); - } - -- if (par1EnumOptions == Option.RAIN) -+ if (p_setOptionValueOF_1_ == Option.RAIN) - { - ++this.ofRain; - -@@ -1050,7 +1055,7 @@ - } - } - -- if (par1EnumOptions == Option.ANIMATED_WATER) -+ if (p_setOptionValueOF_1_ == Option.ANIMATED_WATER) - { - ++this.ofAnimatedWater; - -@@ -1065,7 +1070,7 @@ - } - } - -- if (par1EnumOptions == Option.ANIMATED_LAVA) -+ if (p_setOptionValueOF_1_ == Option.ANIMATED_LAVA) - { - ++this.ofAnimatedLava; - -@@ -1080,92 +1085,92 @@ - } - } - -- if (par1EnumOptions == Option.ANIMATED_FIRE) -+ if (p_setOptionValueOF_1_ == Option.ANIMATED_FIRE) - { - this.ofAnimatedFire = !this.ofAnimatedFire; - } - -- if (par1EnumOptions == Option.ANIMATED_PORTAL) -+ if (p_setOptionValueOF_1_ == Option.ANIMATED_PORTAL) - { - this.ofAnimatedPortal = !this.ofAnimatedPortal; - } - -- if (par1EnumOptions == Option.ANIMATED_REDSTONE) -+ if (p_setOptionValueOF_1_ == Option.ANIMATED_REDSTONE) - { - this.ofAnimatedRedstone = !this.ofAnimatedRedstone; - } - -- if (par1EnumOptions == Option.ANIMATED_EXPLOSION) -+ if (p_setOptionValueOF_1_ == Option.ANIMATED_EXPLOSION) - { - this.ofAnimatedExplosion = !this.ofAnimatedExplosion; - } - -- if (par1EnumOptions == Option.ANIMATED_FLAME) -+ if (p_setOptionValueOF_1_ == Option.ANIMATED_FLAME) - { - this.ofAnimatedFlame = !this.ofAnimatedFlame; - } - -- if (par1EnumOptions == Option.ANIMATED_SMOKE) -+ if (p_setOptionValueOF_1_ == Option.ANIMATED_SMOKE) - { - this.ofAnimatedSmoke = !this.ofAnimatedSmoke; - } - -- if (par1EnumOptions == Option.VOID_PARTICLES) -+ if (p_setOptionValueOF_1_ == Option.VOID_PARTICLES) - { - this.ofVoidParticles = !this.ofVoidParticles; - } - -- if (par1EnumOptions == Option.WATER_PARTICLES) -+ if (p_setOptionValueOF_1_ == Option.WATER_PARTICLES) - { - this.ofWaterParticles = !this.ofWaterParticles; - } - -- if (par1EnumOptions == Option.PORTAL_PARTICLES) -+ if (p_setOptionValueOF_1_ == Option.PORTAL_PARTICLES) - { - this.ofPortalParticles = !this.ofPortalParticles; - } - -- if (par1EnumOptions == Option.POTION_PARTICLES) -+ if (p_setOptionValueOF_1_ == Option.POTION_PARTICLES) - { - this.ofPotionParticles = !this.ofPotionParticles; - } - -- if (par1EnumOptions == Option.FIREWORK_PARTICLES) -+ if (p_setOptionValueOF_1_ == Option.FIREWORK_PARTICLES) - { - this.ofFireworkParticles = !this.ofFireworkParticles; - } - -- if (par1EnumOptions == Option.DRIPPING_WATER_LAVA) -+ if (p_setOptionValueOF_1_ == Option.DRIPPING_WATER_LAVA) - { - this.ofDrippingWaterLava = !this.ofDrippingWaterLava; - } - -- if (par1EnumOptions == Option.ANIMATED_TERRAIN) -+ if (p_setOptionValueOF_1_ == Option.ANIMATED_TERRAIN) - { - this.ofAnimatedTerrain = !this.ofAnimatedTerrain; - } - -- if (par1EnumOptions == Option.ANIMATED_TEXTURES) -+ if (p_setOptionValueOF_1_ == Option.ANIMATED_TEXTURES) - { - this.ofAnimatedTextures = !this.ofAnimatedTextures; - } - -- if (par1EnumOptions == Option.RAIN_SPLASH) -+ if (p_setOptionValueOF_1_ == Option.RAIN_SPLASH) - { - this.ofRainSplash = !this.ofRainSplash; - } - -- if (par1EnumOptions == Option.LAGOMETER) -+ if (p_setOptionValueOF_1_ == Option.LAGOMETER) - { - this.ofLagometer = !this.ofLagometer; - } - -- if (par1EnumOptions == Option.SHOW_FPS) -+ if (p_setOptionValueOF_1_ == Option.SHOW_FPS) - { - this.ofShowFps = !this.ofShowFps; - } - -- if (par1EnumOptions == Option.AUTOSAVE_TICKS) -+ if (p_setOptionValueOF_1_ == Option.AUTOSAVE_TICKS) - { - int i = 900; - this.ofAutoSaveTicks = Math.max(this.ofAutoSaveTicks / i * i, i); -@@ -1177,7 +1182,7 @@ - } - } - -- if (par1EnumOptions == Option.BETTER_GRASS) -+ if (p_setOptionValueOF_1_ == Option.BETTER_GRASS) - { - ++this.ofBetterGrass; - -@@ -1189,7 +1194,7 @@ - this.minecraft.levelRenderer.allChanged(); - } - -- if (par1EnumOptions == Option.CONNECTED_TEXTURES) -+ if (p_setOptionValueOF_1_ == Option.CONNECTED_TEXTURES) - { - ++this.ofConnectedTextures; - -@@ -1208,27 +1213,27 @@ - } - } - -- if (par1EnumOptions == Option.WEATHER) -+ if (p_setOptionValueOF_1_ == Option.WEATHER) - { - this.ofWeather = !this.ofWeather; - } - -- if (par1EnumOptions == Option.SKY) -+ if (p_setOptionValueOF_1_ == Option.SKY) - { - this.ofSky = !this.ofSky; - } - -- if (par1EnumOptions == Option.STARS) -+ if (p_setOptionValueOF_1_ == Option.STARS) - { - this.ofStars = !this.ofStars; - } - -- if (par1EnumOptions == Option.SUN_MOON) -+ if (p_setOptionValueOF_1_ == Option.SUN_MOON) - { - this.ofSunMoon = !this.ofSunMoon; - } - -- if (par1EnumOptions == Option.VIGNETTE) -+ if (p_setOptionValueOF_1_ == Option.VIGNETTE) - { - ++this.ofVignette; - -@@ -1238,7 +1243,7 @@ - } - } - -- if (par1EnumOptions == Option.CHUNK_UPDATES) -+ if (p_setOptionValueOF_1_ == Option.CHUNK_UPDATES) - { - ++this.ofChunkUpdates; - -@@ -1248,12 +1253,12 @@ - } - } - -- if (par1EnumOptions == Option.CHUNK_UPDATES_DYNAMIC) -+ if (p_setOptionValueOF_1_ == Option.CHUNK_UPDATES_DYNAMIC) - { - this.ofChunkUpdatesDynamic = !this.ofChunkUpdatesDynamic; - } - -- if (par1EnumOptions == Option.TIME) -+ if (p_setOptionValueOF_1_ == Option.TIME) - { - ++this.ofTime; - -@@ -1263,119 +1268,119 @@ - } - } - -- if (par1EnumOptions == Option.PROFILER) -+ if (p_setOptionValueOF_1_ == Option.PROFILER) - { - this.ofProfiler = !this.ofProfiler; - } - -- if (par1EnumOptions == Option.BETTER_SNOW) -+ if (p_setOptionValueOF_1_ == Option.BETTER_SNOW) - { - this.ofBetterSnow = !this.ofBetterSnow; - this.minecraft.levelRenderer.allChanged(); - } - -- if (par1EnumOptions == Option.SWAMP_COLORS) -+ if (p_setOptionValueOF_1_ == Option.SWAMP_COLORS) - { - this.ofSwampColors = !this.ofSwampColors; - CustomColors.updateUseDefaultGrassFoliageColors(); - this.minecraft.levelRenderer.allChanged(); - } - -- if (par1EnumOptions == Option.RANDOM_ENTITIES) -+ if (p_setOptionValueOF_1_ == Option.RANDOM_ENTITIES) - { - this.ofRandomEntities = !this.ofRandomEntities; - RandomEntities.update(); - } - -- if (par1EnumOptions == Option.CUSTOM_FONTS) -+ if (p_setOptionValueOF_1_ == Option.CUSTOM_FONTS) - { - this.ofCustomFonts = !this.ofCustomFonts; - FontUtils.reloadFonts(); - } - -- if (par1EnumOptions == Option.CUSTOM_COLORS) -+ if (p_setOptionValueOF_1_ == Option.CUSTOM_COLORS) - { - this.ofCustomColors = !this.ofCustomColors; - CustomColors.update(); - this.minecraft.levelRenderer.allChanged(); - } - -- if (par1EnumOptions == Option.CUSTOM_ITEMS) -+ if (p_setOptionValueOF_1_ == Option.CUSTOM_ITEMS) - { - this.ofCustomItems = !this.ofCustomItems; - this.minecraft.delayTextureReload(); - } - -- if (par1EnumOptions == Option.CUSTOM_SKY) -+ if (p_setOptionValueOF_1_ == Option.CUSTOM_SKY) - { - this.ofCustomSky = !this.ofCustomSky; - CustomSky.update(); - } - -- if (par1EnumOptions == Option.SHOW_CAPES) -+ if (p_setOptionValueOF_1_ == Option.SHOW_CAPES) - { - this.ofShowCapes = !this.ofShowCapes; - } - -- if (par1EnumOptions == Option.NATURAL_TEXTURES) -+ if (p_setOptionValueOF_1_ == Option.NATURAL_TEXTURES) - { - this.ofNaturalTextures = !this.ofNaturalTextures; - NaturalTextures.update(); - this.minecraft.levelRenderer.allChanged(); - } - -- if (par1EnumOptions == Option.EMISSIVE_TEXTURES) -+ if (p_setOptionValueOF_1_ == Option.EMISSIVE_TEXTURES) - { - this.ofEmissiveTextures = !this.ofEmissiveTextures; - this.minecraft.delayTextureReload(); - } - -- if (par1EnumOptions == Option.FAST_MATH) -+ if (p_setOptionValueOF_1_ == Option.FAST_MATH) - { - this.ofFastMath = !this.ofFastMath; - Mth.fastMath = this.ofFastMath; - } - -- if (par1EnumOptions == Option.FAST_RENDER) -+ if (p_setOptionValueOF_1_ == Option.FAST_RENDER) - { - this.ofFastRender = !this.ofFastRender; - } - -- if (par1EnumOptions == Option.LAZY_CHUNK_LOADING) -+ if (p_setOptionValueOF_1_ == Option.LAZY_CHUNK_LOADING) - { - this.ofLazyChunkLoading = !this.ofLazyChunkLoading; - } - -- if (par1EnumOptions == Option.RENDER_REGIONS) -+ if (p_setOptionValueOF_1_ == Option.RENDER_REGIONS) - { - this.ofRenderRegions = !this.ofRenderRegions; - this.minecraft.levelRenderer.allChanged(); - } - -- if (par1EnumOptions == Option.SMART_ANIMATIONS) -+ if (p_setOptionValueOF_1_ == Option.SMART_ANIMATIONS) - { - this.ofSmartAnimations = !this.ofSmartAnimations; - this.minecraft.levelRenderer.allChanged(); - } - -- if (par1EnumOptions == Option.DYNAMIC_FOV) -+ if (p_setOptionValueOF_1_ == Option.DYNAMIC_FOV) - { - this.ofDynamicFov = !this.ofDynamicFov; - } - -- if (par1EnumOptions == Option.ALTERNATE_BLOCKS) -+ if (p_setOptionValueOF_1_ == Option.ALTERNATE_BLOCKS) - { - this.ofAlternateBlocks = !this.ofAlternateBlocks; - this.minecraft.levelRenderer.allChanged(); - } - -- if (par1EnumOptions == Option.DYNAMIC_LIGHTS) -+ if (p_setOptionValueOF_1_ == Option.DYNAMIC_LIGHTS) - { - this.ofDynamicLights = nextValue(this.ofDynamicLights, OF_DYNAMIC_LIGHTS); - DynamicLights.removeLights(this.minecraft.levelRenderer); - } - -- if (par1EnumOptions == Option.SCREENSHOT_SIZE) -+ if (p_setOptionValueOF_1_ == Option.SCREENSHOT_SIZE) - { - ++this.ofScreenshotSize; - -@@ -1385,34 +1390,34 @@ - } - } - -- if (par1EnumOptions == Option.CUSTOM_ENTITY_MODELS) -+ if (p_setOptionValueOF_1_ == Option.CUSTOM_ENTITY_MODELS) - { - this.ofCustomEntityModels = !this.ofCustomEntityModels; - this.minecraft.delayTextureReload(); - } - -- if (par1EnumOptions == Option.CUSTOM_GUIS) -+ if (p_setOptionValueOF_1_ == Option.CUSTOM_GUIS) - { - this.ofCustomGuis = !this.ofCustomGuis; - CustomGuis.update(); - } - -- if (par1EnumOptions == Option.SHOW_GL_ERRORS) -+ if (p_setOptionValueOF_1_ == Option.SHOW_GL_ERRORS) - { - this.ofShowGlErrors = !this.ofShowGlErrors; - } - -- if (par1EnumOptions == Option.HELD_ITEM_TOOLTIPS) -+ if (p_setOptionValueOF_1_ == Option.HELD_ITEM_TOOLTIPS) - { - this.heldItemTooltips = !this.heldItemTooltips; - } - -- if (par1EnumOptions == Option.ADVANCED_TOOLTIPS) -+ if (p_setOptionValueOF_1_ == Option.ADVANCED_TOOLTIPS) - { - this.advancedItemTooltips = !this.advancedItemTooltips; - } - -- if (par1EnumOptions == Option.CHAT_BACKGROUND) -+ if (p_setOptionValueOF_1_ == Option.CHAT_BACKGROUND) - { - if (this.ofChatBackground == 0) - { -@@ -1428,7 +1433,7 @@ - } - } - -- if (par1EnumOptions == Option.CHAT_SHADOW) -+ if (p_setOptionValueOF_1_ == Option.CHAT_SHADOW) - { - this.ofChatShadow = !this.ofChatShadow; - } -@@ -2341,16 +2346,19 @@ - this.ofKeyBindZoom.setKey(InputConstants.getKey(astring[1])); - } - } -- catch (Exception exception1) -+ catch (Exception exception) - { - Config.dbg("Skipping bad option: " + s); -- exception1.printStackTrace(); -+ exception.printStackTrace(); - } - } - - KeyUtils.fixKeyConflicts(this.keyMappings, new KeyMapping[] {this.ofKeyBindZoom}); - KeyMapping.resetMapping(); - bufferedreader.close(); -+ this.ofFastRender = false; -+ this.ofAaLevel = 0; -+ this.ofAfLevel = 1; - } - catch (Exception exception11) - { -@@ -2435,10 +2443,10 @@ - printwriter.println("key_" + this.ofKeyBindZoom.getName() + ":" + this.ofKeyBindZoom.saveString()); - printwriter.close(); - } -- catch (Exception exception1) -+ catch (Exception exception) - { - Config.warn("Failed to save options"); -- exception1.printStackTrace(); -+ exception.printStackTrace(); - } - } - -@@ -2500,7 +2508,7 @@ - this.renderClouds = CloudStatus.FANCY; - this.fov = 70.0D; - this.gamma = 0.0D; -- this.guiScale = 0; -+ this.guiScaleUser = 0; - this.particles = ParticleStatus.ALL; - this.heldItemTooltips = true; - this.forceUnicodeFont = false; -@@ -2514,7 +2522,7 @@ - Config.updateAvailableProcessors(); - this.ofSmoothWorld = Config.isSingleProcessor(); - this.ofLazyChunkLoading = false; -- this.ofRenderRegions = false; -+ this.ofRenderRegions = true; - this.ofFastMath = false; - this.ofFastRender = false; - this.ofDynamicFov = true; -@@ -2597,61 +2605,61 @@ - this.minecraft.delayTextureReload(); - } - -- public void setAllAnimations(boolean flag) -+ public void setAllAnimations(boolean p_setAllAnimations_1_) - { -- int i = flag ? 0 : 2; -+ int i = p_setAllAnimations_1_ ? 0 : 2; - this.ofAnimatedWater = i; - this.ofAnimatedLava = i; -- this.ofAnimatedFire = flag; -- this.ofAnimatedPortal = flag; -- this.ofAnimatedRedstone = flag; -- this.ofAnimatedExplosion = flag; -- this.ofAnimatedFlame = flag; -- this.ofAnimatedSmoke = flag; -- this.ofVoidParticles = flag; -- this.ofWaterParticles = flag; -- this.ofRainSplash = flag; -- this.ofPortalParticles = flag; -- this.ofPotionParticles = flag; -- this.ofFireworkParticles = flag; -- this.particles = flag ? ParticleStatus.ALL : ParticleStatus.MINIMAL; -- this.ofDrippingWaterLava = flag; -- this.ofAnimatedTerrain = flag; -- this.ofAnimatedTextures = flag; -+ this.ofAnimatedFire = p_setAllAnimations_1_; -+ this.ofAnimatedPortal = p_setAllAnimations_1_; -+ this.ofAnimatedRedstone = p_setAllAnimations_1_; -+ this.ofAnimatedExplosion = p_setAllAnimations_1_; -+ this.ofAnimatedFlame = p_setAllAnimations_1_; -+ this.ofAnimatedSmoke = p_setAllAnimations_1_; -+ this.ofVoidParticles = p_setAllAnimations_1_; -+ this.ofWaterParticles = p_setAllAnimations_1_; -+ this.ofRainSplash = p_setAllAnimations_1_; -+ this.ofPortalParticles = p_setAllAnimations_1_; -+ this.ofPotionParticles = p_setAllAnimations_1_; -+ this.ofFireworkParticles = p_setAllAnimations_1_; -+ this.particles = p_setAllAnimations_1_ ? ParticleStatus.ALL : ParticleStatus.MINIMAL; -+ this.ofDrippingWaterLava = p_setAllAnimations_1_; -+ this.ofAnimatedTerrain = p_setAllAnimations_1_; -+ this.ofAnimatedTextures = p_setAllAnimations_1_; - } - -- private static int nextValue(int val, int[] vals) -+ private static int nextValue(int p_nextValue_0_, int[] p_nextValue_1_) - { -- int i = indexOf(val, vals); -+ int i = indexOf(p_nextValue_0_, p_nextValue_1_); - - if (i < 0) - { -- return vals[0]; -+ return p_nextValue_1_[0]; - } - else - { - ++i; - -- if (i >= vals.length) -+ if (i >= p_nextValue_1_.length) - { - i = 0; - } - -- return vals[i]; -+ return p_nextValue_1_[i]; - } - } - -- private static int limit(int val, int[] vals) -+ private static int limit(int p_limit_0_, int[] p_limit_1_) - { -- int i = indexOf(val, vals); -- return i < 0 ? vals[0] : val; -+ int i = indexOf(p_limit_0_, p_limit_1_); -+ return i < 0 ? p_limit_1_[0] : p_limit_0_; - } - -- private static int indexOf(int val, int[] vals) -+ private static int indexOf(int p_indexOf_0_, int[] p_indexOf_1_) - { -- for (int i = 0; i < vals.length; ++i) -+ for (int i = 0; i < p_indexOf_1_.length; ++i) - { -- if (vals[i] == val) -+ if (p_indexOf_1_[i] == p_indexOf_0_) - { - return i; - } diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/systems/RenderSystemAccessor.java b/common/src/main/java/org/vivecraft/mixin/client/blaze3d/RenderSystemAccessor.java similarity index 91% rename from common/src/main/java/org/vivecraft/mixin/blaze3d/systems/RenderSystemAccessor.java rename to common/src/main/java/org/vivecraft/mixin/client/blaze3d/RenderSystemAccessor.java index 2e37ff4c4..ca7aca29b 100644 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/systems/RenderSystemAccessor.java +++ b/common/src/main/java/org/vivecraft/mixin/client/blaze3d/RenderSystemAccessor.java @@ -1,4 +1,4 @@ -package org.vivecraft.mixin.blaze3d.systems; +package org.vivecraft.mixin.client.blaze3d; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.math.Vector3f; diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/RenderTargetMixin.java b/common/src/main/java/org/vivecraft/mixin/client/blaze3d/RenderTargetMixin.java similarity index 82% rename from common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/RenderTargetMixin.java rename to common/src/main/java/org/vivecraft/mixin/client/blaze3d/RenderTargetMixin.java index db5c1839e..d1d36ff1c 100644 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/pipeline/RenderTargetMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client/blaze3d/RenderTargetMixin.java @@ -1,13 +1,9 @@ -package org.vivecraft.mixin.blaze3d.pipeline; +package org.vivecraft.mixin.client.blaze3d; import com.mojang.blaze3d.pipeline.RenderTarget; -import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.TextureUtil; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.BufferUploader; -import com.mojang.blaze3d.vertex.Tesselator; -import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.vertex.*; import com.mojang.math.Matrix4f; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.ShaderInstance; @@ -15,12 +11,10 @@ import org.lwjgl.opengl.GL30; import org.spongepowered.asm.mixin.Debug; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.*; -import org.vivecraft.extensions.RenderTargetExtension; -import org.vivecraft.mixin.blaze3d.systems.RenderSystemAccessor; +import org.vivecraft.client.extensions.RenderTargetExtension; @Debug(export = true) @Mixin(RenderTarget.class) @@ -29,16 +23,12 @@ public abstract class RenderTargetMixin implements RenderTargetExtension { @Unique private int texid = -1; @Unique - public String name = "Default"; - @Unique private boolean linearFilter; @Unique private boolean useStencil = false; @Shadow public int frameBufferId; @Shadow - protected int depthBufferId; - @Shadow public boolean useDepth; @Shadow public int width; @@ -60,33 +50,11 @@ public abstract class RenderTargetMixin implements RenderTargetExtension { public abstract void checkStatus(); @Shadow public abstract void setFilterMode(int i); + @Shadow + private void _bindWrite(boolean b){}; @Shadow public abstract void unbindWrite(); - /** - * @author - * @reason - */ - @Overwrite - public void blitToScreen(int pWidth, int pHeight, boolean p_83960_) { - this.blitToScreen(0, pWidth, pHeight, 0, p_83960_, 0.0F, 0.0F, false); - } - - @Override - public int getDepthBufferId() { - return depthBufferId; - } - - @Override - public void setName(String name) { - this.name=name; - } - - @Override - public String getName() { - return name; - } - @Override public void setUseStencil(boolean useStencil){ this.useStencil = useStencil; @@ -101,13 +69,13 @@ public boolean getUseStencil(){ public void clearWithColor(float r, float g, float b, float a, boolean isMac) { RenderSystem.assertOnRenderThreadOrInit(); this._bindWrite(true); - GlStateManager._clearColor(r, g, b, a); + RenderSystem.clearColor(r, g, b, a); int i = 16384; if (this.useDepth) { - GlStateManager._clearDepth(1.0); + RenderSystem.clearDepth(1.0); i |= 0x100; } - GlStateManager._clear(i, isMac); + RenderSystem.clear(i, isMac); this.unbindWrite(); } @@ -125,10 +93,6 @@ public void isLinearFilter(boolean linearFilter){ public String toString() { StringBuilder stringbuilder = new StringBuilder(); stringbuilder.append("\n"); - if (this.name != null) { - - stringbuilder.append("Name: " + this.name).append("\n"); - } stringbuilder.append("Size: " + this.viewWidth + " x " + this.viewHeight).append("\n"); stringbuilder.append("FB ID: " + this.frameBufferId).append("\n"); stringbuilder.append("Tex ID: " + this.colorTextureId).append("\n"); @@ -229,20 +193,6 @@ public int modifyGlFramebufferTexture2DAttachment(int attachment) { return useStencil ? GL30.GL_DEPTH_STENCIL_ATTACHMENT : attachment; } - /** - * @author - * @reason - */ - @Overwrite - private void _bindWrite(boolean bl) { - RenderSystem.assertOnGameThreadOrInit(); - GlStateManager._glBindFramebuffer(36160, this.frameBufferId); - if (bl) { - GlStateManager._viewport(0, 0, this.viewWidth, this.viewHeight); - } - } - - public void blitToScreen(ShaderInstance instance, int left, int width, int height, int top, boolean disableBlend, float xCropFactor, float yCropFactor, boolean keepAspect) { RenderSystem.assertOnGameThreadOrInit(); @@ -259,11 +209,11 @@ public void blitToScreen(ShaderInstance instance, int left, int width, int heigh @Override public void blitFovReduction(ShaderInstance instance, int width, int height) { RenderSystem.assertOnRenderThread(); - GlStateManager._colorMask(true, true, true, false); - GlStateManager._disableDepthTest(); - GlStateManager._depthMask(false); - GlStateManager._viewport(0, 0, width, height); - GlStateManager._disableBlend(); + RenderSystem.colorMask(true, true, true, false); + RenderSystem.disableDepthTest(); + RenderSystem.depthMask(false); + RenderSystem.viewport(0, 0, width, height); + RenderSystem.disableBlend(); Minecraft minecraft = Minecraft.getInstance(); RenderSystem.setShaderTexture(0, this.colorTextureId); if (instance == null) { @@ -291,26 +241,35 @@ public void blitFovReduction(ShaderInstance instance, int width, int height) { Tesselator tesselator = RenderSystem.renderThreadTesselator(); BufferBuilder bufferBuilder = tesselator.getBuilder(); bufferBuilder.begin(VertexFormat.Mode.QUADS, instance.getVertexFormat()); - bufferBuilder.vertex(0.0, g, 0.0).uv(0.0f, 0.0f).color(255, 255, 255, 255).endVertex(); - bufferBuilder.vertex(f, g, 0.0).uv(h, 0.0f).color(255, 255, 255, 255).endVertex(); - bufferBuilder.vertex(f, 0.0, 0.0).uv(h, k).color(255, 255, 255, 255).endVertex(); - bufferBuilder.vertex(0.0, 0.0, 0.0).uv(0.0f, k).color(255, 255, 255, 255).endVertex(); + if (instance.getVertexFormat() == DefaultVertexFormat.POSITION_TEX) { + bufferBuilder.vertex(0.0, g, 0.0).uv(0.0f, 0.0f).endVertex(); + bufferBuilder.vertex(f, g, 0.0).uv(h, 0.0f).endVertex(); + bufferBuilder.vertex(f, 0.0, 0.0).uv(h, k).endVertex(); + bufferBuilder.vertex(0.0, 0.0, 0.0).uv(0.0f, k).endVertex(); + } else if (instance.getVertexFormat() == DefaultVertexFormat.POSITION_TEX_COLOR) { + bufferBuilder.vertex(0.0, g, 0.0).uv(0.0f, 0.0f).color(255, 255, 255, 255).endVertex(); + bufferBuilder.vertex(f, g, 0.0).uv(h, 0.0f).color(255, 255, 255, 255).endVertex(); + bufferBuilder.vertex(f, 0.0, 0.0).uv(h, k).color(255, 255, 255, 255).endVertex(); + bufferBuilder.vertex(0.0, 0.0, 0.0).uv(0.0f, k).color(255, 255, 255, 255).endVertex(); + } else { + throw new IllegalStateException("Unexpected vertex format " + instance.getVertexFormat()); + } bufferBuilder.end(); BufferUploader._endInternal(bufferBuilder); instance.clear(); - GlStateManager._depthMask(true); - GlStateManager._colorMask(true, true, true, true); + RenderSystem.depthMask(true); + RenderSystem.colorMask(true, true, true, true); } private void _blitToScreen(ShaderInstance instance, int left, int width, int height, int top, boolean bl, float xCropFactor, float yCropFactor, boolean keepAspect) { RenderSystem.assertOnGameThreadOrInit(); - GlStateManager._colorMask(true, true, true, false); - GlStateManager._disableDepthTest(); - GlStateManager._depthMask(false); - GlStateManager._viewport(left, top, width, height); + RenderSystem.colorMask(true, true, true, false); + RenderSystem.disableDepthTest(); + RenderSystem.depthMask(false); + RenderSystem.viewport(left, top, width, height); if (bl) { - GlStateManager._disableBlend(); + RenderSystem.disableBlend(); } Minecraft minecraft = Minecraft.getInstance(); @@ -380,8 +339,8 @@ private void _blitToScreen(ShaderInstance instance, int left, int width, int hei BufferUploader._endInternal(bufferbuilder); instance.clear(); - GlStateManager._depthMask(true); - GlStateManager._colorMask(true, true, true, true); + RenderSystem.depthMask(true); + RenderSystem.colorMask(true, true, true, true); } } diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/Gui.java.patch b/common/src/main/java/org/vivecraft/mixin/client/gui/Gui.java.patch deleted file mode 100644 index c35e36685..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/Gui.java.patch +++ /dev/null @@ -1,340 +0,0 @@ ---- a/net/minecraft/client/gui/Gui.java -+++ b/net/minecraft/client/gui/Gui.java -@@ -7,10 +7,12 @@ - import com.mojang.blaze3d.platform.GlStateManager; - import com.mojang.blaze3d.systems.RenderSystem; - import com.mojang.blaze3d.vertex.BufferBuilder; -+import com.mojang.blaze3d.vertex.BufferUploader; - import com.mojang.blaze3d.vertex.DefaultVertexFormat; - import com.mojang.blaze3d.vertex.PoseStack; - import com.mojang.blaze3d.vertex.Tesselator; - import com.mojang.blaze3d.vertex.VertexFormat; -+import com.mojang.blaze3d.vertex.VertexFormat.Mode; - import com.mojang.datafixers.util.Pair; - import com.mojang.math.Vector3f; - import java.util.Collection; -@@ -69,6 +71,7 @@ - import net.minecraft.world.entity.player.Player; - import net.minecraft.world.food.FoodData; - import net.minecraft.world.item.ItemStack; -+import net.minecraft.world.item.Items; - import net.minecraft.world.level.GameType; - import net.minecraft.world.level.Level; - import net.minecraft.world.level.block.Blocks; -@@ -94,7 +97,7 @@ - private static final ResourceLocation VIGNETTE_LOCATION = new ResourceLocation("textures/misc/vignette.png"); - private static final ResourceLocation WIDGETS_LOCATION = new ResourceLocation("textures/gui/widgets.png"); - private static final ResourceLocation PUMPKIN_BLUR_LOCATION = new ResourceLocation("textures/misc/pumpkinblur.png"); -- private static final ResourceLocation SPYGLASS_SCOPE_LOCATION = new ResourceLocation("textures/misc/spyglass_scope.png"); -+ public static final ResourceLocation SPYGLASS_SCOPE_LOCATION = new ResourceLocation("textures/misc/spyglass_scope.png"); - private static final ResourceLocation POWDER_SNOW_OUTLINE_LOCATION = new ResourceLocation("textures/misc/powder_snow_outline.png"); - private static final Component DEMO_EXPIRED_TEXT = new TranslatableComponent("demo.demoExpired"); - private static final Component SAVING_TEXT = new TranslatableComponent("menu.savingLevel"); -@@ -142,7 +145,9 @@ - private float lastAutosaveIndicatorValue; - private final Map> chatListeners = Maps.newHashMap(); - private float scopeScale; -- -+ //Vivecraft -+ public boolean showPlayerList; -+ - public Gui(Minecraft pMinecraft) - { - this.minecraft = pMinecraft; -@@ -175,6 +180,8 @@ - this.titleFadeOutTime = 20; - } - -+ boolean nope = false; -+ boolean yup = false; - public void render(PoseStack pPoseStack, float pPartialTick) - { - this.screenWidth = this.minecraft.getWindow().getGuiScaledWidth(); -@@ -182,7 +189,7 @@ - Font font = this.getFont(); - RenderSystem.enableBlend(); - -- if (Config.isVignetteEnabled()) -+ if (nope) //no vignette - { - this.renderVignette(this.minecraft.getCameraEntity()); - } -@@ -196,7 +203,7 @@ - float f = this.minecraft.getDeltaFrameTime(); - this.scopeScale = Mth.lerp(0.5F * f, this.scopeScale, 1.125F); - -- if (this.minecraft.options.getCameraType().isFirstPerson()) -+ if (nope) //none of this - { - if (this.minecraft.player.isScoping()) - { -@@ -214,14 +221,15 @@ - } - } - -- if (this.minecraft.player.getTicksFrozen() > 0) -+ if (nope) - { -+ //i dunno what this is but it cant be good in VR - this.renderTextureOverlay(POWDER_SNOW_OUTLINE_LOCATION, this.minecraft.player.getPercentFrozen()); - } - - float f2 = Mth.lerp(pPartialTick, this.minecraft.player.oPortalTime, this.minecraft.player.portalTime); - -- if (f2 > 0.0F && !this.minecraft.player.hasEffect(MobEffects.CONFUSION)) -+ if (nope) - { - this.renderPortalOverlay(f2); - } -@@ -241,7 +249,7 @@ - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, GUI_ICONS_LOCATION); - RenderSystem.enableBlend(); -- this.renderCrosshair(pPoseStack); -+ if(nope)this.renderCrosshair(pPoseStack); - RenderSystem.setShader(GameRenderer::getPositionTexShader); - GlStateManager.enableAlphaTest(); - RenderSystem.defaultBlendFunc(); -@@ -418,7 +426,27 @@ - { - this.displayScoreboardSidebar(pPoseStack, objective1); - } -- -+ -+ //TODO: what is this block and is it needed. -+// if (mc.currentScreen != null) { -+// // VIVECRAFT: Dimming effect when in background -+// float brightness = 0.5F; -+// GlStateManager.enableBlend(); -+// RenderSystem.blendFuncSeparate(SourceFactor.ZERO, DestFactor.ONE, SourceFactor.ZERO, DestFactor.SRC_ALPHA); -+// GlStateManager.disableTexture(); -+// GlStateManager.depthMask(false); -+// Tessellator tessellator = Tessellator.getInstance(); -+// BufferBuilder bufferbuilder = tessellator.getBuffer(); -+// bufferbuilder.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); -+// bufferbuilder.pos(0.0D, mc.currentScreen.height, 990.0D).color(0.0F, 0.0F, 0.0F, brightness).endVertex(); -+// bufferbuilder.pos(mc.currentScreen.width, mc.currentScreen.height, 990.0D).color(0.0F, 0.0F, 0.0F, brightness).endVertex(); -+// bufferbuilder.pos(mc.currentScreen.width, 0.0D, 990.0D).color(0.0F, 0.0F, 0.0F, brightness).endVertex(); -+// bufferbuilder.pos(0.0D, 0.0D, 990.0D).color(0.0F, 0.0F, 0.0F, brightness).endVertex(); -+// tessellator.draw(); -+// GlStateManager.depthMask(true); -+// GlStateManager.enableTexture(); -+// } -+ - RenderSystem.enableBlend(); - RenderSystem.defaultBlendFunc(); - pPoseStack.pushPose(); -@@ -428,17 +456,17 @@ - this.minecraft.getProfiler().pop(); - pPoseStack.popPose(); - objective1 = scoreboard.getDisplayObjective(0); -- -- if (this.minecraft.options.keyPlayerList.isDown() && (!this.minecraft.isLocalServer() || this.minecraft.player.connection.getOnlinePlayers().size() > 1 || objective1 != null)) -+ //Vivecraft -+ if (!this.minecraft.options.keyPlayerList.isDown() && !this.showPlayerList || this.minecraft.isLocalServer() && this.minecraft.player.connection.getOnlinePlayers().size() <= 1 && objective1 == null) - { -- this.tabList.setVisible(true); -- this.tabList.render(pPoseStack, this.screenWidth, scoreboard, objective1); -+ this.tabList.setVisible(false); - } - else - { -- this.tabList.setVisible(false); -+ this.tabList.setVisible(true); -+ this.tabList.render(pPoseStack, this.screenWidth, scoreboard, objective1); - } -- -+ // - this.renderSavingIndicator(pPoseStack); - } - -@@ -458,6 +486,7 @@ - - private void renderCrosshair(PoseStack pPoseStack) - { -+ if (nope) return; - Options options = this.minecraft.options; - - if (options.getCameraType().isFirstPerson() && (this.minecraft.gameMode.getPlayerMode() != GameType.SPECTATOR || this.canRenderCrosshairForSpectator(this.minecraft.hitResult))) -@@ -670,12 +699,36 @@ - this.setBlitOffset(-90); - this.blit(pPoseStack, i - 91, this.screenHeight - 22, 0, 0, 182, 22); - this.blit(pPoseStack, i - 91 - 1 + player.getInventory().selected * 20, this.screenHeight - 22 - 1, 0, 22, 24, 22); -- -- if (!itemstack.isEmpty()) -+ -+ //Vivecraft - render hotbar context selection. -+ if (this.minecraft.interactTracker.hotbar >= 0 && this.minecraft.interactTracker.hotbar < 9 && player.getInventory().selected != this.minecraft.interactTracker.hotbar) -+ { -+ RenderSystem.setShaderColor(0.0F, 1.0F, 0.0F, 1.0F); -+ this.blit(pPoseStack, i - 91 - 1 + this.minecraft.interactTracker.hotbar * 20, this.screenHeight - 22 - 1, 0, 22, 24, 22); -+ RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); -+ } -+ -+ //Vivecraft - touch hotbar offhand-slot-swap -+ if (!itemstack.isEmpty() || this.dataholder.vrSettings.vrTouchHotbar) - { - if (humanoidarm == HumanoidArm.LEFT) - { -- this.blit(pPoseStack, i - 91 - 29, this.screenHeight - 23, 24, 22, 29, 24); -+ if (this.minecraft.interactTracker.hotbar == 9) -+ { -+ RenderSystem.setShaderColor(0.0F, 0.0F, 1.0F, 1.0F); -+ this.blit(pPoseStack, i - 91 - 29, this.screenHeight - 23, 24, 22, 29, 24); -+ RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); -+ } -+ else -+ { -+ this.blit(pPoseStack, i - 91 - 29, this.screenHeight - 23, 24, 22, 29, 24); -+ } -+ } -+ else if (this.minecraft.interactTracker.hotbar == 9) -+ { -+ RenderSystem.setShaderColor(0.0F, 0.0F, 1.0F, 1.0F); -+ this.blit(pPoseStack, i + 91, this.screenHeight - 23, 53, 22, 29, 24); -+ RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - } - else - { -@@ -736,6 +789,7 @@ - } - - RenderSystem.disableBlend(); -+ this.renderViveHudIcons(pPoseStack); - } - } - -@@ -1251,6 +1305,7 @@ - - private void renderTextureOverlay(ResourceLocation pTextureLocation, float pAlpha) - { -+ if (yup) return; - RenderSystem.disableDepthTest(); - RenderSystem.depthMask(false); - RenderSystem.defaultBlendFunc(); -@@ -1272,6 +1327,7 @@ - - private void renderSpyglassOverlay(float p_168676_) - { -+ if (yup) return; - RenderSystem.disableDepthTest(); - RenderSystem.depthMask(false); - RenderSystem.defaultBlendFunc(); -@@ -1330,6 +1386,7 @@ - - private void renderVignette(Entity pEntity) - { -+ if (yup) return; - if (!Config.isVignetteEnabled()) - { - RenderSystem.enableDepthTest(); -@@ -1386,6 +1443,7 @@ - - private void renderPortalOverlay(float pTimeInPortal) - { -+ if (yup) return; - if (pTimeInPortal < 1.0F) - { - pTimeInPortal *= pTimeInPortal; -@@ -1719,4 +1777,101 @@ - return gui$hearttype; - } - } -+ -+ private void renderViveHudIcons(PoseStack matrixstack) -+ { -+ if (this.minecraft.getCameraEntity() instanceof Player) -+ { -+ int i = this.minecraft.getWindow().getGuiScaledWidth(); -+ int j = this.minecraft.getWindow().getGuiScaledHeight(); -+ Font font = this.minecraft.gui.getFont(); -+ Player player = (Player)this.minecraft.getCameraEntity(); -+ int k = 0; -+ MobEffect mobeffect = null; -+ -+ if (player.isSprinting()) -+ { -+ mobeffect = MobEffects.MOVEMENT_SPEED; -+ } -+ -+ if (player.isVisuallySwimming()) -+ { -+ mobeffect = MobEffects.DOLPHINS_GRACE; -+ } -+ -+ if (player.isShiftKeyDown()) -+ { -+ mobeffect = MobEffects.BLINDNESS; -+ } -+ -+ if (player.isFallFlying()) -+ { -+ k = -1; -+ } -+ -+ if (this.minecraft.crawlTracker.crawling) -+ { -+ k = -2; -+ } -+ -+ int l = this.minecraft.getWindow().getGuiScaledWidth() / 2 - 109; -+ int i1 = this.minecraft.getWindow().getGuiScaledHeight() - 39; -+ -+ if (k == -1) -+ { -+ this.minecraft.getItemRenderer().renderGuiItem(new ItemStack(Items.ELYTRA), l, i1); -+ mobeffect = null; -+ } -+ else if (k == -2) -+ { -+ if (player.isShiftKeyDown()) -+ { -+ l -= 19; -+ } -+ else -+ { -+ mobeffect = null; -+ } -+ -+ this.minecraft.getItemRenderer().renderGuiItem(new ItemStack(Items.RABBIT_FOOT), l, i1); -+ } -+ -+ if (mobeffect != null) -+ { -+ TextureAtlasSprite textureatlassprite = this.minecraft.getMobEffectTextures().get(mobeffect); -+ RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); -+ RenderSystem.setShaderTexture(0, textureatlassprite.atlas().location()); -+ GuiComponent.blit(matrixstack, l, i1, 0, 18, 18, textureatlassprite); -+ } -+ } -+ } -+ -+ public void drawMouseMenuQuad(int mouseX, int mouseY) -+ { -+ RenderSystem.enableBlend(); -+ GlStateManager.enableAlphaTest(); -+ RenderSystem.disableDepthTest(); -+ //uhhhh //RenderSystem.disableLighting(); -+ RenderSystem.setShader(GameRenderer::getPositionTexShader); -+ RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); -+ RenderSystem.setShaderTexture(0, Screen.GUI_ICONS_LOCATION); -+ float f = 16.0F * this.dataholder.vrSettings.menuCrosshairScale; -+ RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.ONE_MINUS_DST_COLOR, GlStateManager.DestFactor.ZERO, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE); -+ this.drawCentredTexturedModalRect(mouseX, mouseY, f, f, 0, 0, 15, 15); -+ RenderSystem.disableBlend(); -+ } -+ -+ public void drawCentredTexturedModalRect(int centreX, int centreY, float width, float height, int u, int v, int texWidth, int texHeight) -+ { -+ float f = 0.00390625F; -+ float f1 = 0.00390625F; -+ BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); -+ bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION_TEX); -+ bufferbuilder.vertex((double)((float)centreX - width / 2.0F), (double)((float)centreY + height / 2.0F), (double)this.getBlitOffset()).uv((float)(u + 0) * f, (float)(v + texHeight) * f1).endVertex(); -+ bufferbuilder.vertex((double)((float)centreX + width / 2.0F), (double)((float)centreY + height / 2.0F), (double)this.getBlitOffset()).uv((float)(u + texWidth) * f, (float)(v + texHeight) * f1).endVertex(); -+ bufferbuilder.vertex((double)((float)centreX + width / 2.0F), (double)((float)centreY - height / 2.0F), (double)this.getBlitOffset()).uv((float)(u + texWidth) * f, (float)(v + 0) * f1).endVertex(); -+ bufferbuilder.vertex((double)((float)centreX - width / 2.0F), (double)((float)centreY - height / 2.0F), (double)this.getBlitOffset()).uv((float)(u + 0) * f, (float)(v + 0) * f1).endVertex(); -+ bufferbuilder.end(); -+ BufferUploader.end(bufferbuilder); -+ } - } diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/GuiComponent.java.patch b/common/src/main/java/org/vivecraft/mixin/client/gui/GuiComponent.java.patch deleted file mode 100644 index c265f38b0..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/GuiComponent.java.patch +++ /dev/null @@ -1,21 +0,0 @@ ---- a/net/minecraft/client/gui/GuiComponent.java -+++ b/net/minecraft/client/gui/GuiComponent.java -@@ -199,6 +199,10 @@ - private static void innerBlit(Matrix4f pMatrix, int pX1, int pX2, int pY1, int pY2, int pBlitOffset, float pMinU, float pMaxU, float pMinV, float pMaxV) - { - RenderSystem.setShader(GameRenderer::getPositionTexShader); -+ //Vivecraft -+ RenderSystem.enableBlend(); -+ RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); -+ // - BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); - bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); - bufferbuilder.vertex(pMatrix, (float)pX1, (float)pY2, (float)pBlitOffset).uv(pMinU, pMaxV).endVertex(); -@@ -207,6 +211,7 @@ - bufferbuilder.vertex(pMatrix, (float)pX1, (float)pY1, (float)pBlitOffset).uv(pMinU, pMinV).endVertex(); - bufferbuilder.end(); - BufferUploader.end(bufferbuilder); -+ RenderSystem.disableBlend(); - } - - public int getBlitOffset() diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/NoSodiumGuiVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client/gui/NoSodiumGuiVRMixin.java deleted file mode 100644 index af4f7eabb..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/NoSodiumGuiVRMixin.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.vivecraft.mixin.client.gui; - -import net.minecraft.client.gui.Gui; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(Gui.class) -public class NoSodiumGuiVRMixin { - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;useFancyGraphics()Z"), method = "render") - public boolean noVignette() { - return false; - } -} diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/components/Button.java.patch b/common/src/main/java/org/vivecraft/mixin/client/gui/components/Button.java.patch deleted file mode 100644 index 98198e7a4..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/components/Button.java.patch +++ /dev/null @@ -1,27 +0,0 @@ ---- a/net/minecraft/client/gui/components/Button.java -+++ b/net/minecraft/client/gui/components/Button.java -@@ -5,10 +5,11 @@ - import net.minecraft.client.gui.narration.NarratedElementType; - import net.minecraft.client.gui.narration.NarrationElementOutput; - import net.minecraft.network.chat.Component; -+import net.minecraft.network.chat.TextComponent; - - public class Button extends AbstractButton - { -- public static final Button.OnTooltip NO_TOOLTIP = (p_93740_, p_93741_, p_93742_, p_93743_) -> -+ public static final Button.OnTooltip NO_TOOLTIP = (button, matrixStack, mouseX, mouseY) -> - { - }; - protected final Button.OnPress onPress; -@@ -55,6 +56,11 @@ - }); - } - -+ public Button(int p_i1309_1_, int p_i1309_2_, int p_i1309_3_, int p_i1309_4_, String p_i1309_5_, Button.OnPress p_i1309_6_) -+ { -+ this(p_i1309_1_, p_i1309_2_, p_i1309_3_, p_i1309_4_, new TextComponent(p_i1309_5_), p_i1309_6_, NO_TOOLTIP); -+ } -+ - public interface OnPress - { - void onPress(Button pButton); diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/components/EditBox.java.patch b/common/src/main/java/org/vivecraft/mixin/client/gui/components/EditBox.java.patch deleted file mode 100644 index 0c0654d0d..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/components/EditBox.java.patch +++ /dev/null @@ -1,92 +0,0 @@ ---- a/net/minecraft/client/gui/components/EditBox.java -+++ b/net/minecraft/client/gui/components/EditBox.java -@@ -20,6 +20,7 @@ - import net.minecraft.client.gui.components.events.GuiEventListener; - import net.minecraft.client.gui.narration.NarratedElementType; - import net.minecraft.client.gui.narration.NarrationElementOutput; -+import net.minecraft.client.gui.screens.InBedChatScreen; - import net.minecraft.client.gui.screens.Screen; - import net.minecraft.client.renderer.GameRenderer; - import net.minecraft.network.chat.Component; -@@ -28,6 +29,7 @@ - import net.minecraft.network.chat.TranslatableComponent; - import net.minecraft.util.FormattedCharSequence; - import net.minecraft.util.Mth; -+import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; - - public class EditBox extends AbstractWidget implements Widget, GuiEventListener - { -@@ -58,9 +60,9 @@ - @Nullable - private Consumer responder; - private Predicate filter = Objects::nonNull; -- private BiFunction formatter = (p_94147_, p_94148_) -> -+ private BiFunction formatter = (p_195610_0_, p_195610_1_) -> - { -- return FormattedCharSequence.forward(p_94147_, Style.EMPTY); -+ return FormattedCharSequence.forward(p_195610_0_, Style.EMPTY); - }; - - public EditBox(Font pFont, int pX, int pY, int pWidth, int pHeight, Component p_94119_) -@@ -458,11 +460,19 @@ - { - boolean flag = pMouseX >= (double)this.x && pMouseX < (double)(this.x + this.width) && p_94126_ >= (double)this.y && p_94126_ < (double)(this.y + this.height); - -- if (this.canLoseFocus) -+ // Vivecraft - allow focusing unfocused textbox -+ if (this.canLoseFocus || !this.isFocused()) - { - this.setFocus(flag); - } - -+ //Vivecraft -+ if (flag) -+ { -+ KeyboardHandler.setOverlayShowing(true); -+ } -+ // -+ - if (this.isFocused() && flag && pMouseY == 0) - { - int i = Mth.floor(pMouseX) - this.x; -@@ -519,6 +529,12 @@ - String s1 = flag ? s.substring(0, j) : s; - j1 = this.font.drawShadow(pPoseStack, this.formatter.apply(s1, this.displayPos), (float)l, (float)i1, i2); - } -+ //Vivecraft -+ else if (!Minecraft.getInstance().vrSettings.seated && !KeyboardHandler.Showing) -+ { -+ this.font.drawShadow(pPoseStack, "Click to open keyboard", (float)l, (float)i1, this.textColorUneditable); -+ } -+ // - - boolean flag2 = this.cursorPos < this.value.length() || this.value.length() >= this.getMaxLength(); - int k1 = j1; -@@ -663,6 +679,17 @@ - if (pFocused) - { - this.frame = 0; -+ //Vivecraft -+ if (Minecraft.getInstance().screen instanceof InBedChatScreen) -+ { -+ return; -+ } -+ -+ if (Minecraft.getInstance().vrSettings.autoOpenKeyboard) -+ { -+ KeyboardHandler.setOverlayShowing(true); -+ } -+ // - } - } - -@@ -717,7 +744,8 @@ - - public void setCanLoseFocus(boolean pCanLoseFocus) - { -- this.canLoseFocus = pCanLoseFocus; -+ //Vivecraft - I don't care what you think. -+ this.canLoseFocus = false; - } - - public boolean isVisible() diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/components/events/ContainerEventHandler.java.patch b/common/src/main/java/org/vivecraft/mixin/client/gui/components/events/ContainerEventHandler.java.patch deleted file mode 100644 index d09ce45e3..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/components/events/ContainerEventHandler.java.patch +++ /dev/null @@ -1,81 +0,0 @@ ---- a/net/minecraft/client/gui/components/events/ContainerEventHandler.java -+++ b/net/minecraft/client/gui/components/events/ContainerEventHandler.java -@@ -6,6 +6,7 @@ - import java.util.function.BooleanSupplier; - import java.util.function.Supplier; - import javax.annotation.Nullable; -+import net.minecraft.client.Minecraft; - - public interface ContainerEventHandler extends GuiEventListener - { -@@ -47,9 +48,9 @@ - default boolean mouseReleased(double pMouseX, double p_94723_, int pMouseY) - { - this.setDragging(false); -- return this.getChildAt(pMouseX, p_94723_).filter((p_94708_) -> -+ return this.getChildAt(pMouseX, p_94723_).filter((listener) -> - { -- return p_94708_.mouseReleased(pMouseX, p_94723_, pMouseY); -+ return listener.mouseReleased(pMouseX, p_94723_, pMouseY); - }).isPresent(); - } - -@@ -64,9 +65,9 @@ - - default boolean mouseScrolled(double pMouseX, double p_94687_, double pMouseY) - { -- return this.getChildAt(pMouseX, p_94687_).filter((p_94693_) -> -+ return this.getChildAt(pMouseX, p_94687_).filter((listener) -> - { -- return p_94693_.mouseScrolled(pMouseX, p_94687_, pMouseY); -+ return listener.mouseScrolled(pMouseX, p_94687_, pMouseY); - }).isPresent(); - } - -@@ -92,8 +93,13 @@ - - default void setInitialFocus(@Nullable GuiEventListener pEventListener) - { -- this.setFocused(pEventListener); -- pEventListener.changeFocus(true); -+ //Vivecraft - dont autofocus text fields, it forces open the keyboard -+ if (Minecraft.getInstance().vrSettings.seated) -+ { -+ this.setFocused(pEventListener); -+ pEventListener.changeFocus(true); -+ } -+ // - } - - default void magicalSpecialHackyFocus(@Nullable GuiEventListener pEventListener) -@@ -113,23 +119,23 @@ - else - { - List list = this.children(); -- int j = list.indexOf(guieventlistener); -- int i; -+ int i = list.indexOf(guieventlistener); -+ int j; - -- if (flag && j >= 0) -+ if (flag && i >= 0) - { -- i = j + (pFocus ? 1 : 0); -+ j = i + (pFocus ? 1 : 0); - } - else if (pFocus) - { -- i = 0; -+ j = 0; - } - else - { -- i = list.size(); -+ j = list.size(); - } - -- ListIterator listiterator = list.listIterator(i); -+ ListIterator listiterator = list.listIterator(j); - BooleanSupplier booleansupplier = pFocus ? listiterator::hasNext : listiterator::hasPrevious; - Supplier supplier = pFocus ? listiterator::next : listiterator::previous; - diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/components/events/ContainerEventHandlerVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client/gui/components/events/ContainerEventHandlerVRMixin.java index dd9bf5cc3..8f49ba2df 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/components/events/ContainerEventHandlerVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client/gui/components/events/ContainerEventHandlerVRMixin.java @@ -1,21 +1,20 @@ package org.vivecraft.mixin.client.gui.components.events; +import net.minecraft.client.gui.components.events.GuiEventListener; +import net.minecraft.client.gui.components.events.ContainerEventHandler; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import org.vivecraft.ClientDataHolder; - -import net.minecraft.client.gui.components.events.ContainerEventHandler; -import net.minecraft.client.gui.components.events.GuiEventListener; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRState; @Mixin(ContainerEventHandler.class) public class ContainerEventHandlerVRMixin { - @Inject(at = @At("HEAD"), method = "setInitialFocus(Lnet/minecraft/client/gui/components/events/GuiEventListener;)V") + @Inject(at = @At("HEAD"), method = "setInitialFocus(Lnet/minecraft/client/gui/components/events/GuiEventListener;)V", cancellable = true) public void focus(GuiEventListener pEventListener, CallbackInfo info) { - if (!ClientDataHolder.getInstance().vrSettings.seated) + if (VRState.vrRunning && !ClientDataHolderVR.getInstance().vrSettings.seated) { info.cancel(); } diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/ChatScreen.java.patch b/common/src/main/java/org/vivecraft/mixin/client/gui/screens/ChatScreen.java.patch deleted file mode 100644 index 37167cea6..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/ChatScreen.java.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- a/net/minecraft/client/gui/screens/ChatScreen.java -+++ b/net/minecraft/client/gui/screens/ChatScreen.java -@@ -126,8 +126,17 @@ - { - this.sendMessage(s); - } -- -- this.minecraft.setScreen((Screen)null); -+ //Vivecraft -+ if (this.dataholder.vrSettings.seated) -+ { -+ this.minecraft.setScreen((Screen)null); -+ } -+ else -+ { -+ this.input.setValue(this.initial); -+ this.historyPos = this.minecraft.gui.getChat().getRecentChat().size(); -+ } -+ // - return true; - } - } diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/OptionsScreen.java.patch b/common/src/main/java/org/vivecraft/mixin/client/gui/screens/OptionsScreen.java.patch deleted file mode 100644 index 89acdbe29..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/OptionsScreen.java.patch +++ /dev/null @@ -1,32 +0,0 @@ ---- a/net/minecraft/client/gui/screens/OptionsScreen.java -+++ b/net/minecraft/client/gui/screens/OptionsScreen.java -@@ -18,6 +18,7 @@ - import net.minecraft.server.packs.repository.Pack; - import net.minecraft.server.packs.repository.PackRepository; - import net.minecraft.world.Difficulty; -+import org.vivecraft.gui.settings.GuiMainVRSettings; - - public class OptionsScreen extends Screen - { -@@ -42,7 +43,20 @@ - { - int j = this.width / 2 - 155 + i % 2 * 160; - int k = this.height / 6 - 12 + 24 * (i >> 1); -- this.addRenderableWidget(option.createButton(this.minecraft.options, j, k, 150)); -+ -+ if (option == Option.FOV) -+ { -+ this.addRenderableWidget(new Button(j, k, 150, 20, new TranslatableComponent("vivecraft.options.screen.main.button"), (p) -> -+ { -+ this.minecraft.options.save(); -+ this.minecraft.setScreen(new GuiMainVRSettings(this)); -+ })); -+ } -+ else -+ { -+ this.addRenderableWidget(option.createButton(this.minecraft.options, j, k, 150)); -+ } -+ - ++i; - } - diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/OptionsScreenVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client/gui/screens/OptionsScreenVRMixin.java deleted file mode 100644 index 383d2b305..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/OptionsScreenVRMixin.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.vivecraft.mixin.client.gui.screens; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.Option; -import net.minecraft.client.Options; -import net.minecraft.client.gui.components.AbstractWidget; -import net.minecraft.client.gui.components.Button; -import net.minecraft.client.gui.screens.OptionsScreen; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TranslatableComponent; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.vivecraft.gui.settings.GuiMainVRSettings; - -@Mixin(OptionsScreen.class) -public class OptionsScreenVRMixin extends Screen { - protected OptionsScreenVRMixin(Component component) { - super(component); - } - - @Redirect(method = "init", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Option;createButton(Lnet/minecraft/client/Options;III)Lnet/minecraft/client/gui/components/AbstractWidget;", ordinal = 0)) - private AbstractWidget addVivecraftSettings(Option option, Options options, int i, int j, int k) { - if (option == Option.FOV) - { - return new Button(i, j, k, 20, new TranslatableComponent("vivecraft.options.screen.main.button"), (p) -> - { - Minecraft.getInstance().options.save(); - Minecraft.getInstance().setScreen(new GuiMainVRSettings(this)); - }); - } - else - { - return option.createButton(options, i, j, k); - } - } -} diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/PauseScreen.java.patch b/common/src/main/java/org/vivecraft/mixin/client/gui/screens/PauseScreen.java.patch deleted file mode 100644 index 99491c966..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/PauseScreen.java.patch +++ /dev/null @@ -1,177 +0,0 @@ ---- a/net/minecraft/client/gui/screens/PauseScreen.java -+++ b/net/minecraft/client/gui/screens/PauseScreen.java -@@ -1,13 +1,23 @@ - package net.minecraft.client.gui.screens; - -+import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; -+import org.vivecraft.gui.settings.GuiQuickCommandsInGame; -+import org.vivecraft.settings.AutoCalibration; -+import org.vivecraft.settings.VRHotkeys; -+import org.vivecraft.settings.VRSettings; -+import org.vivecraft.utils.external.jkatvr; -+ - import com.mojang.blaze3d.vertex.PoseStack; - import com.mojang.realmsclient.RealmsMainScreen; - import net.minecraft.SharedConstants; - import net.minecraft.Util; -+import net.minecraft.client.Minecraft; - import net.minecraft.client.gui.components.Button; - import net.minecraft.client.gui.screens.achievement.StatsScreen; - import net.minecraft.client.gui.screens.advancements.AdvancementsScreen; - import net.minecraft.client.gui.screens.multiplayer.JoinMultiplayerScreen; -+import net.minecraft.client.gui.screens.social.SocialInteractionsScreen; -+import net.minecraft.client.main.Main; - import net.minecraft.network.chat.Component; - import net.minecraft.network.chat.TranslatableComponent; - -@@ -30,6 +40,86 @@ - { - this.createPauseMenu(); - } -+ -+ if (!Minecraft.getInstance().isMultiplayerServer()) -+ { -+ this.addRenderableWidget(new Button(this.width / 2 - 102, this.height / 4 + 72 + -16, 98, 20, new TranslatableComponent("vivecraft.gui.chat"), (p) -> -+ { -+ this.minecraft.setScreen(new ChatScreen("")); -+ if (dataholder.vrSettings.autoOpenKeyboard) -+ KeyboardHandler.setOverlayShowing(true); -+ })); -+ } -+ else -+ { -+ this.addRenderableWidget(new Button(this.width / 2 - 102, this.height / 4 + 72 + -16, 46, 20, new TranslatableComponent("vivecraft.gui.chat"), (p) -> -+ { -+ this.minecraft.setScreen(new ChatScreen("")); -+ })); -+ this.addRenderableWidget(new Button(this.width / 2 - 102 + 48, this.height / 4 + 72 + -16, 46, 20, new TranslatableComponent("vivecraft.gui.social"), (p) -> -+ { -+ this.minecraft.setScreen(new SocialInteractionsScreen()); -+ })); -+ } -+ -+ this.addRenderableWidget(new Button(this.width / 2 + 4, this.height / 4 + 72 + -16, 98, 20, new TranslatableComponent("vivecraft.gui.commands"), (p) -> -+ { -+ this.minecraft.setScreen(new GuiQuickCommandsInGame(this)); -+ this.init(); -+ })); -+ this.addRenderableWidget(new Button(this.width / 2 - 102, this.height / 4 + 120 + -16, 49, 20, new TranslatableComponent("vivecraft.gui.overlay"), (p) -> -+ { -+ this.minecraft.options.renderDebug = !this.minecraft.options.renderDebug; -+ this.minecraft.setScreen((Screen)null); -+ })); -+ this.addRenderableWidget(new Button(this.width / 2 - 52, this.height / 4 + 120 + -16, 49, 20, new TranslatableComponent("vivecraft.gui.profiler"), (p) -> -+ { -+ if (!this.minecraft.options.renderDebug) this.minecraft.options.renderDebugCharts = false; -+ this.minecraft.options.renderDebugCharts = !this.minecraft.options.renderDebugCharts; -+ this.minecraft.options.ofProfiler = this.minecraft.options.renderDebugCharts; -+ this.minecraft.options.renderDebug = this.minecraft.options.renderDebugCharts; -+ this.minecraft.setScreen((Screen)null); -+ })); -+ this.addRenderableWidget(new Button(this.width / 2 + 4, this.height / 4 + 120 + -16, 98, 20, new TranslatableComponent("vivecraft.gui.screenshot"), (p) -> -+ { -+ this.minecraft.setScreen((Screen)null); -+ this.minecraft.grabScreenShot = true; -+ })); -+ -+ if (!this.dataholder.vrSettings.seated) -+ { -+ this.addRenderableWidget(new Button(this.width / 2 - 102, this.height / 4 + 144 + -16, 98, 20, new TranslatableComponent("vivecraft.gui.calibrateheight"), (p) -> -+ { -+ AutoCalibration.calibrateManual(); -+ this.dataholder.vrSettings.saveOptions(); -+ this.minecraft.setScreen((Screen)null); -+ })); -+ } -+ -+ if (Main.katvr) -+ { -+ this.addRenderableWidget(new Button(this.width / 2 + 106, this.height / 4 + 144 + -16, 98, 20, new TranslatableComponent("vivecraft.gui.alignkatwalk"), (p) -> -+ { -+ jkatvr.resetYaw(this.minecraft.vrPlayer.vrdata_room_pre.hmd.getYaw()); -+ this.minecraft.setScreen((Screen)null); -+ })); -+ } -+ -+ if (!this.dataholder.vrSettings.seated || this.dataholder.vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON || this.dataholder.vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY) -+ { -+ this.addRenderableWidget(new Button(this.width / 2 + 4, this.height / 4 + 144 + -16, 98, 20, new TranslatableComponent("vivecraft.gui.movethirdpersoncam"), (p) -> -+ { -+ if (!VRHotkeys.isMovingThirdPersonCam()) -+ { -+ VRHotkeys.startMovingThirdPersonCam(1, VRHotkeys.Triggerer.MENUBUTTON); -+ } -+ else if (VRHotkeys.getMovingThirdPersonCamTriggerer() == VRHotkeys.Triggerer.MENUBUTTON) -+ { -+ VRHotkeys.stopMovingThirdPersonCam(); -+ this.dataholder.vrSettings.saveOptions(); -+ } -+ })); -+ } - } - - private void createPauseMenu() -@@ -49,29 +139,29 @@ - { - this.minecraft.setScreen(new StatsScreen(this, this.minecraft.player.getStats())); - })); -- String s = SharedConstants.getCurrentVersion().isStable() ? "https://aka.ms/javafeedback?ref=game" : "https://aka.ms/snapshotfeedback?ref=game"; -- this.addRenderableWidget(new Button(this.width / 2 - 102, this.height / 4 + 72 + -16, 98, 20, new TranslatableComponent("menu.sendFeedback"), (p_96318_) -> -- { -- this.minecraft.setScreen(new ConfirmLinkScreen((p_169337_) -> { -- if (p_169337_) -- { -- Util.getPlatform().openUri(s); -- } -- -- this.minecraft.setScreen(this); -- }, s, true)); -- })); -- this.addRenderableWidget(new Button(this.width / 2 + 4, this.height / 4 + 72 + -16, 98, 20, new TranslatableComponent("menu.reportBugs"), (p_96331_) -> -- { -- this.minecraft.setScreen(new ConfirmLinkScreen((p_169339_) -> { -- if (p_169339_) -- { -- Util.getPlatform().openUri("https://aka.ms/snapshotbugs?ref=game"); -- } -- -- this.minecraft.setScreen(this); -- }, "https://aka.ms/snapshotbugs?ref=game", true)); -- })); -+// String s = SharedConstants.getCurrentVersion().isStable() ? "https://aka.ms/javafeedback?ref=game" : "https://aka.ms/snapshotfeedback?ref=game"; -+// this.addRenderableWidget(new Button(this.width / 2 - 102, this.height / 4 + 72 + -16, 98, 20, new TranslatableComponent("menu.sendFeedback"), (p_96318_) -> -+// { -+// this.minecraft.setScreen(new ConfirmLinkScreen((p_169337_) -> { -+// if (p_169337_) -+// { -+// Util.getPlatform().openUri(s); -+// } -+// -+// this.minecraft.setScreen(this); -+// }, s, true)); -+// })); -+// this.addRenderableWidget(new Button(this.width / 2 + 4, this.height / 4 + 72 + -16, 98, 20, new TranslatableComponent("menu.reportBugs"), (p_96331_) -> -+// { -+// this.minecraft.setScreen(new ConfirmLinkScreen((p_169339_) -> { -+// if (p_169339_) -+// { -+// Util.getPlatform().openUri("https://aka.ms/snapshotbugs?ref=game"); -+// } -+// -+// this.minecraft.setScreen(this); -+// }, "https://aka.ms/snapshotbugs?ref=game", true)); -+// })); - this.addRenderableWidget(new Button(this.width / 2 - 102, this.height / 4 + 96 + -16, 98, 20, new TranslatableComponent("menu.options"), (p_96323_) -> - { - this.minecraft.setScreen(new OptionsScreen(this, this.minecraft.options)); -@@ -82,7 +172,9 @@ - })); - button.active = this.minecraft.hasSingleplayerServer() && !this.minecraft.getSingleplayerServer().isPublished(); - Component component = this.minecraft.isLocalServer() ? new TranslatableComponent("menu.returnToMenu") : new TranslatableComponent("menu.disconnect"); -- this.addRenderableWidget(new Button(this.width / 2 - 102, this.height / 4 + 120 + -16, 204, 20, component, (p_96315_) -> -+ -+ //vivecraft move down -+ this.addRenderableWidget(new Button(this.width / 2 - 102, this.height / 4 + 168 + -16, 204, 20, component, (p_96315_) -> - { - boolean flag = this.minecraft.isLocalServer(); - boolean flag1 = this.minecraft.isConnectedToRealms(); diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/Screen.java.patch b/common/src/main/java/org/vivecraft/mixin/client/gui/screens/Screen.java.patch deleted file mode 100644 index 3f5316202..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/Screen.java.patch +++ /dev/null @@ -1,191 +0,0 @@ ---- a/net/minecraft/client/gui/screens/Screen.java -+++ b/net/minecraft/client/gui/screens/Screen.java -@@ -16,6 +16,7 @@ - import java.net.URI; - import java.net.URISyntaxException; - import java.nio.file.Path; -+import java.util.ArrayList; - import java.util.Arrays; - import java.util.List; - import java.util.Locale; -@@ -31,6 +32,7 @@ - import net.minecraft.client.Minecraft; - import net.minecraft.client.gui.Font; - import net.minecraft.client.gui.chat.NarratorChatListener; -+import net.minecraft.client.gui.components.AbstractWidget; - import net.minecraft.client.gui.components.Widget; - import net.minecraft.client.gui.components.events.AbstractContainerEventHandler; - import net.minecraft.client.gui.components.events.GuiEventListener; -@@ -51,6 +53,9 @@ - import net.minecraft.world.inventory.tooltip.TooltipComponent; - import net.minecraft.world.item.ItemStack; - import net.minecraft.world.item.TooltipFlag; -+import net.optifine.reflect.Reflector; -+import net.optifine.util.GuiUtils; -+ - import org.apache.logging.log4j.LogManager; - import org.apache.logging.log4j.Logger; - -@@ -68,7 +73,8 @@ - protected ItemRenderer itemRenderer; - public int width; - public int height; -- private final List renderables = Lists.newArrayList(); -+ //vivecraft idk why this was private... -+ protected final List renderables = Lists.newArrayList(); - public boolean passEvents; - protected Font font; - @Nullable -@@ -184,6 +190,19 @@ - - protected void renderTooltip(PoseStack pPoseStack, ItemStack pTooltips, int pMouseX, int pMouseY) - { -+ //TODO: fix -+ if (Reflector.GuiUtils.exists()) -+ { -+// Reflector.call(Reflector.GuiUtils_preItemToolTip, pTooltips); -+// Font font = (Font)Reflector.call(pTooltips.getItem(), Reflector.IForgeItem_getFontRenderer, pTooltips); -+// this.renderTooltip(pMatrixStack, Lists.transform(this.getTooltipFromItem(pTooltips), Component::getVisualOrderText), pMouseX, pMouseY, font == null ? this.font : font); -+// Reflector.call(Reflector.GuiUtils_postItemToolTip); -+ } -+ else -+ { -+ // this.renderComponentTooltip(pMatrixStack, this.getTooltipFromItem(pTooltips), pMouseX, pMouseY); -+ } -+ - this.renderTooltip(pPoseStack, this.getTooltipFromItem(pTooltips), pTooltips.getTooltipImage(), pMouseX, pMouseY); - } - -@@ -209,7 +228,16 @@ - - public void renderComponentTooltip(PoseStack pPoseStack, List pTooltips, int pMouseX, int pMouseY) - { -- this.renderTooltip(pPoseStack, Lists.transform(pTooltips, Component::getVisualOrderText), pMouseX, pMouseY); -+ if (Reflector.GuiUtils.exists()) -+ { -+ //this.renderWrappedToolTip(p_96598_, p_96599_, p_96600_, p_96601_, this.font); -+ } -+ else -+ { -+ this.renderTooltip(pPoseStack, Lists.transform(pTooltips, Component::getVisualOrderText), pMouseX, pMouseY); -+ } -+ -+ //this.renderTooltip(pPoseStack, Lists.transform(pTooltips, Component::getVisualOrderText), pMouseX, pMouseY); - } - - public void renderTooltip(PoseStack pPoseStack, List pTooltips, int pMouseX, int pMouseY) -@@ -435,6 +463,10 @@ - - public void sendMessage(String pText, boolean pAddToChat) - { -+ if (Reflector.ForgeEventFactory_onClientSendMessage.exists()) -+ { -+ pText = Reflector.callString(Reflector.ForgeEventFactory_onClientSendMessage, pText); -+ } - if (pAddToChat) - { - this.minecraft.gui.getChat().addRecentChat(pText); -@@ -450,9 +482,14 @@ - this.font = pMinecraft.font; - this.width = pWidth; - this.height = pHeight; -- this.clearWidgets(); -- this.setFocused((GuiEventListener)null); -- this.init(); -+ //TODO: fix -+ //if (!Reflector.postForgeBusEvent(Reflector.InitGuiEvent_Pre_Constructor, this, this.buttons, consumer1, consumer)) -+ //{ -+ this.clearWidgets(); -+ this.setFocused((GuiEventListener)null); -+ this.init(); -+ //} -+ //Reflector.postForgeBusEvent(Reflector.InitGuiEvent_Post_Constructor, this, this.buttons, consumer1, consumer); - this.triggerImmediateNarration(false); - this.suppressNarration(NARRATE_SUPPRESS_AFTER_INIT_TIME); - } -@@ -483,7 +520,16 @@ - { - if (this.minecraft.level != null) - { -+ if (this.dataholder.vrSettings != null && !this.dataholder.vrSettings.menuBackground) -+ { -+ this.fillGradient(pPoseStack, 0, 0, this.width, this.height, 0, 0); -+ } -+ else -+ { - this.fillGradient(pPoseStack, 0, 0, this.width, this.height, -1072689136, -804253680); -+ } -+ -+ Reflector.postForgeBusEvent(Reflector.BackgroundDrawnEvent_Constructor, this, pPoseStack); - } - else - { -@@ -505,6 +551,7 @@ - bufferbuilder.vertex((double)this.width, 0.0D, 0.0D).uv((float)this.width / 32.0F, (float)pVOffset).color(64, 64, 64, 255).endVertex(); - bufferbuilder.vertex(0.0D, 0.0D, 0.0D).uv(0.0F, (float)pVOffset).color(64, 64, 64, 255).endVertex(); - tesselator.end(); -+ Reflector.postForgeBusEvent(Reflector.BackgroundDrawnEvent_Constructor, this, new PoseStack()); - } - - public boolean isPauseScreen() -@@ -770,4 +817,60 @@ - this.priority = pPriority; - } - } -+ -+ public Minecraft getMinecraft() -+ { -+ return this.minecraft; -+ } -+ -+ //Vivecraft / OF -+ protected List getButtonList() -+ { -+ List list = new ArrayList<>(); -+ -+ for (GuiEventListener guieventlistener : this.children()) -+ { -+ if (guieventlistener instanceof AbstractWidget) -+ { -+ list.add((AbstractWidget)guieventlistener); -+ } -+ } -+ -+ return list; -+ } -+ -+ protected AbstractWidget getSelectedButton(int x, int y) -+ { -+ for (AbstractWidget butt : getButtonList()) -+ { -+ if (butt.visible && butt.isHoveredOrFocused()) -+ { -+ return butt; -+ } -+ } -+ -+ return null; -+ } -+ -+ public static AbstractWidget getSelectedButton(int x, int y, List listButtons) -+ { -+ for (int i = 0; i < listButtons.size(); ++i) -+ { -+ AbstractWidget abstractwidget = listButtons.get(i); -+ -+ if (abstractwidget.visible) -+ { -+ int j = GuiUtils.getWidth(abstractwidget); -+ int k = GuiUtils.getHeight(abstractwidget); -+ -+ if (x >= abstractwidget.x && y >= abstractwidget.y && x < abstractwidget.x + j && y < abstractwidget.y + k) -+ { -+ return abstractwidget; -+ } -+ } -+ } -+ -+ return null; -+ } -+ // - } diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/ScreenMixin.java b/common/src/main/java/org/vivecraft/mixin/client/gui/screens/ScreenMixin.java new file mode 100644 index 000000000..53f9ad484 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client/gui/screens/ScreenMixin.java @@ -0,0 +1,26 @@ +package org.vivecraft.mixin.client.gui.screens; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Style; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.vivecraft.client.gui.VivecraftClickEvent; + +@Mixin(Screen.class) +public abstract class ScreenMixin { + + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/network/chat/ClickEvent;getAction()Lnet/minecraft/network/chat/ClickEvent$Action;", ordinal = 0), method = "handleComponentClicked(Lnet/minecraft/network/chat/Style;)Z", cancellable = true) + public void handleVivecraftClickEvents(Style style, CallbackInfoReturnable cir) { + if (style.getClickEvent() instanceof VivecraftClickEvent) { + VivecraftClickEvent.VivecraftAction action = ((VivecraftClickEvent) style.getClickEvent()).getVivecraftAction(); + if (action == VivecraftClickEvent.VivecraftAction.OPEN_SCREEN) { + Minecraft.getInstance().setScreen((Screen) ((VivecraftClickEvent) style.getClickEvent()).getVivecraftValue()); + cir.setReturnValue(true); + } + } + } + +} \ No newline at end of file diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/SoundOptionsScreen.java.patch b/common/src/main/java/org/vivecraft/mixin/client/gui/screens/SoundOptionsScreen.java.patch deleted file mode 100644 index bf793bd01..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/SoundOptionsScreen.java.patch +++ /dev/null @@ -1,28 +0,0 @@ ---- a/net/minecraft/client/gui/screens/SoundOptionsScreen.java -+++ b/net/minecraft/client/gui/screens/SoundOptionsScreen.java -@@ -6,8 +6,10 @@ - import net.minecraft.client.gui.components.Button; - import net.minecraft.client.gui.components.VolumeSlider; - import net.minecraft.network.chat.CommonComponents; -+import net.minecraft.network.chat.TextComponent; - import net.minecraft.network.chat.TranslatableComponent; - import net.minecraft.sounds.SoundSource; -+import org.vivecraft.settings.VRSettings; - - public class SoundOptionsScreen extends OptionsSubScreen - { -@@ -32,7 +34,13 @@ - ++k; - } - } -- -+ this.addRenderableWidget(new Button(this.width / 2 - 155 + i % 2 * 160, this.height / 6 - 12 + 24 * (i >> 1), 150, 20, new TextComponent(this.dataholder.vrSettings.getButtonDisplayString(VRSettings.VrOptions.HRTF_SELECTION)), (p_213104_1_) -> -+ { -+ this.clearWidgets(); -+ this.dataholder.vrSettings.setOptionValue(VRSettings.VrOptions.HRTF_SELECTION); -+ this.dataholder.vrSettings.saveOptions(); -+ this.init(); -+ })); - if (k % 2 == 1) - { - ++k; diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/SoundOptionsScreenVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client/gui/screens/SoundOptionsScreenVRMixin.java deleted file mode 100644 index b0edd572b..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/SoundOptionsScreenVRMixin.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.vivecraft.mixin.client.gui.screens; - -import net.minecraft.client.gui.components.Button; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.gui.screens.SoundOptionsScreen; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TextComponent; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.settings.VRSettings; - -@Mixin(SoundOptionsScreen.class) -public class SoundOptionsScreenVRMixin extends Screen { - protected SoundOptionsScreenVRMixin(Component component) { - super(component); - } - - @ModifyVariable(method = "init", at = @At(value = "LOAD", ordinal = 4), ordinal = 2) - private int addHRTF(int k) { - int i = this.height / 6 - 12; - // TODO: Remove in 1.19 - this.addRenderableWidget(new Button(this.width / 2 - 155 + k % 2 * 160, i + 22 * (k >> 1), 150, 20, new TextComponent(ClientDataHolder.getInstance().vrSettings.getButtonDisplayString(VRSettings.VrOptions.HRTF_SELECTION)), (p_213104_1_) -> - { - this.clearWidgets(); - ClientDataHolder.getInstance().vrSettings.setOptionValue(VRSettings.VrOptions.HRTF_SELECTION); - ClientDataHolder.getInstance().vrSettings.saveOptions(); - this.init(); - })); - return k; - } -} diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/TitleScreenMixin.java b/common/src/main/java/org/vivecraft/mixin/client/gui/screens/TitleScreenMixin.java index 5c2eddddc..e649e1fdd 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/TitleScreenMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client/gui/screens/TitleScreenMixin.java @@ -1,25 +1,19 @@ package org.vivecraft.mixin.client.gui.screens; import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.gui.GuiComponent; import net.minecraft.client.gui.components.*; import net.minecraft.client.gui.screens.*; +import net.minecraft.client.renderer.PanoramaRenderer; +import net.minecraft.network.chat.CommonComponents; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.FormattedText; -import net.minecraft.network.chat.TextComponent; import net.minecraft.network.chat.TranslatableComponent; -import net.minecraft.util.FormattedCharSequence; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.VRState; -import org.vivecraft.Xplat; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Properties; +import org.vivecraft.client.utils.UpdateChecker; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client.gui.screens.UpdateScreen; @Mixin(TitleScreen.class) public abstract class TitleScreenMixin extends Screen { @@ -28,76 +22,73 @@ protected TitleScreenMixin(Component component) { super(component); } - private final Properties vrConfig = new Properties(); - private final Path vrConfigPath = Xplat.getConfigPath("vivecraft-config.properties"); - private boolean showRestart = false; + //TODO Add config file +// private final Properties vrConfig = new Properties(); +// private final Path vrConfigPath = Xplat.getConfigPath("vivecraft-config.properties"); private boolean showError = false; - private AbstractWidget firstButton; + private Button vrModeButton; + + private Button updateButton; - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/TitleScreen;addRenderableWidget(Lnet/minecraft/client/gui/components/events/GuiEventListener;)Lnet/minecraft/client/gui/components/events/GuiEventListener;", shift = At.Shift.AFTER, ordinal = 1), method = "createNormalMenuOptions") + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/TitleScreen;addRenderableWidget(Lnet/minecraft/client/gui/components/events/GuiEventListener;)Lnet/minecraft/client/gui/components/events/GuiEventListener;", shift = At.Shift.AFTER, ordinal = 1), method = "createNormalMenuOptions") public void initFullGame(CallbackInfo ci) { addVRModeButton(); } - @Inject(at = @At("TAIL"), method = "createDemoMenuOptions") + + @Inject(at = @At("TAIL"), method = "createDemoMenuOptions") public void initDemo(CallbackInfo ci) { addVRModeButton(); } + private void addVRModeButton() { - // get first button, to position warnings - firstButton = (AbstractWidget) renderables.get(0); - - try { - if (!Files.exists(vrConfigPath)) { - Files.createFile(vrConfigPath); - } - vrConfig.load(Files.newInputStream(vrConfigPath)); - if (!vrConfig.containsKey("vrStatus")) { - vrConfig.setProperty("vrStatus", String.valueOf(VRState.isVR)); - } - } catch (IOException e) { - throw new RuntimeException(e); - } - String vrMode = Boolean.parseBoolean(vrConfig.getProperty("vrStatus")) ? "VR" : "NONVR"; - } + vrModeButton = new Button( + this.width / 2 + 104, this.height / 4 + 72, + 56, 20, + new TranslatableComponent("vivecraft.gui.vr", getIcon() , VRState.vrEnabled ? CommonComponents.OPTION_ON : CommonComponents.OPTION_OFF), + (button) -> { + showError = false; + VRState.vrEnabled = !VRState.vrEnabled; + ClientDataHolderVR.getInstance().vrSettings.vrEnabled = VRState.vrEnabled; + ClientDataHolderVR.getInstance().vrSettings.saveOptions(); + button.setMessage(new TranslatableComponent("vivecraft.gui.vr", getIcon(), VRState.vrEnabled ? CommonComponents.OPTION_ON : CommonComponents.OPTION_OFF)); + }); - private String getIcon() { - showRestart = Boolean.parseBoolean(vrConfig.getProperty("vrStatus")) != VRState.isVR; + this.addRenderableWidget(vrModeButton); + + updateButton = new Button( + this.width / 2 + 104, this.height / 4 + 96, + 56, 20, + new TranslatableComponent("vivecraft.gui.update"), + (button) -> minecraft.setScreen(new UpdateScreen())); - return (showError ? "§c\u26A0§r " : (showRestart ? "§6\u24D8§r ": "")); + updateButton.visible = UpdateChecker.hasUpdate; + + this.addRenderableWidget(updateButton); } - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;render(Lcom/mojang/blaze3d/vertex/PoseStack;IIF)V", shift = At.Shift.BEFORE, ordinal = 0), method = "render") - public void renderText(PoseStack poseStack, int i, int j, float f, CallbackInfo ci) { - int l = this.height / 4 + 49; - drawString(poseStack, this.font, "Vivecraft", this.width / 2 + 106, l, 16777215); - drawString(poseStack, this.font, new TranslatableComponent("vivecraft.messages.mode"), this.width / 2 + 106, l + 10, 16777215); + private String getIcon() { + return (showError ? "§c\u26A0§r " : ""); } - @Inject(at = @At("TAIL"), method = "render") - public void renderWarning(PoseStack poseStack, int i, int j, float f, CallbackInfo ci) { - - int warningHeight = firstButton.y - 10; - Component warning = null; - if (showError) { - warning = new TranslatableComponent("vivecraft.messages.configWriteError"); - } else if (showRestart) { - warning = new TranslatableComponent("vivecraft.messages.configChangeRestart"); - warningHeight = this.height / 2; + + @Inject(at = @At("TAIL"), method = "render") + public void renderToolTip(PoseStack poseStack, int i, int j, float f, CallbackInfo ci) { + updateButton.visible = UpdateChecker.hasUpdate; + + if (vrModeButton.isMouseOver(i, j)) { + renderTooltip(poseStack, font.split(new TranslatableComponent("vivecraft.options.VR_MODE.tooltip"), Math.max(width / 2 - 43, 170)), i, j); } - if (warning != null) { - int length = 0; - List splitString = font.split(FormattedText.of(warning.getString()), 360); - for(FormattedCharSequence string : splitString) { - length = Math.max(length, this.font.width(string)); - } - // move in front of button tooltips - poseStack.pushPose(); - poseStack.translate(0,0,500); - GuiComponent.fill(poseStack, this.width / 2 - length / 2 - 4, warningHeight - 4, this.width / 2 + length / 2 + 4, warningHeight + (font.lineHeight + 3) * splitString.size(), -536870912); - for (int line = 0; line < splitString.size(); line++) { - drawCenteredString(poseStack, this.font, splitString.get(line), this.width / 2, warningHeight + (font.lineHeight + 2) * line, 16777215); - } - poseStack.popPose(); + if (VRState.vrInitialized && !VRState.vrRunning) { + Component hotswitchMessage = new TranslatableComponent("vivecraft.messages.vrhotswitchinginfo"); + renderTooltip(poseStack, font.split(hotswitchMessage, 280), width / 2 - 140 - 12, 17); + } + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/PanoramaRenderer;render(FF)V"), method = "render") + public void maybeNoPanorama(PanoramaRenderer instance, float f, float g){ + if (VRState.vrRunning && ClientDataHolderVR.getInstance().menuWorldRenderer.isReady()){ + return; } + instance.render(f, g); } } diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/AbstractContainerScreen.java.patch b/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/AbstractContainerScreen.java.patch deleted file mode 100644 index 5400978ed..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/AbstractContainerScreen.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/client/gui/screens/inventory/AbstractContainerScreen.java -+++ b/net/minecraft/client/gui/screens/inventory/AbstractContainerScreen.java -@@ -510,7 +510,7 @@ - } - } - } -- else if (this.isQuickCrafting && slot != null && !itemstack.isEmpty() && (itemstack.getCount() > this.quickCraftSlots.size() || this.quickCraftingType == 2) && AbstractContainerMenu.canItemQuickReplace(slot, itemstack, true) && slot.mayPlace(itemstack) && this.menu.canDragTo(slot)) -+ else if (!Screen.hasShiftDown() && this.isQuickCrafting && slot != null && !itemstack.isEmpty() && (itemstack.getCount() > this.quickCraftSlots.size() || this.quickCraftingType == 2) && AbstractContainerMenu.canItemQuickReplace(slot, itemstack, true) && slot.mayPlace(itemstack) && this.menu.canDragTo(slot)) - { - this.quickCraftSlots.add(slot); - this.recalculateQuickCraftRemaining(); diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/BookEditScreen.java.patch b/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/BookEditScreen.java.patch deleted file mode 100644 index 28123ce9d..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/BookEditScreen.java.patch +++ /dev/null @@ -1,67 +0,0 @@ ---- a/net/minecraft/client/gui/screens/inventory/BookEditScreen.java -+++ b/net/minecraft/client/gui/screens/inventory/BookEditScreen.java -@@ -44,6 +44,7 @@ - import org.apache.commons.lang3.StringUtils; - import org.apache.commons.lang3.mutable.MutableBoolean; - import org.apache.commons.lang3.mutable.MutableInt; -+import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; - - public class BookEditScreen extends Screen - { -@@ -64,19 +65,19 @@ - private int currentPage; - private final List pages = Lists.newArrayList(); - private String title = ""; -- private final TextFieldHelper pageEdit = new TextFieldHelper(this::getCurrentPageText, this::setCurrentPageText, this::getClipboard, this::setClipboard, (p_98179_) -> -+ private final TextFieldHelper pageEdit = new TextFieldHelper(this::getCurrentPageText, this::setCurrentPageText, this::getClipboard, this::setClipboard, (p_238774_1_) -> - { -- return p_98179_.length() < 1024 && this.font.wordWrapHeight(p_98179_, 114) <= 128; -+ return p_238774_1_.length() < 1024 && this.font.wordWrapHeight(p_238774_1_, 114) <= 128; - }); - private final TextFieldHelper titleEdit = new TextFieldHelper(() -> - { - return this.title; -- }, (p_98175_) -> -+ }, (p_238772_1_) -> - { -- this.title = p_98175_; -- }, this::getClipboard, this::setClipboard, (p_98170_) -> -+ this.title = p_238772_1_; -+ }, this::getClipboard, this::setClipboard, (p_238771_0_) -> - { -- return p_98170_.length() < 16; -+ return p_238771_0_.length() < 16; - }); - private long lastClickTime; - private int lastIndex = -1; -@@ -178,6 +179,9 @@ - { - this.pageBack(); - }, true)); -+ //Vivecraft -+ KeyboardHandler.setOverlayShowing(true); -+ // - this.updateButtonVisibility(); - } - -@@ -687,16 +691,16 @@ - MutableInt mutableint = new MutableInt(); - MutableBoolean mutableboolean = new MutableBoolean(); - StringSplitter stringsplitter = this.font.getSplitter(); -- stringsplitter.splitLines(s, 114, Style.EMPTY, true, (p_98132_, p_98133_, p_98134_) -> -+ stringsplitter.splitLines(s, 114, Style.EMPTY, true, (p_238762_6_, p_238762_7_, p_238762_8_) -> - { - int k3 = mutableint.getAndIncrement(); -- String s2 = s.substring(p_98133_, p_98134_); -+ String s2 = s.substring(p_238762_7_, p_238762_8_); - mutableboolean.setValue(s2.endsWith("\n")); - String s3 = StringUtils.stripEnd(s2, " \n"); - int l3 = k3 * 9; - BookEditScreen.Pos2i bookeditscreen$pos2i1 = this.convertLocalToScreen(new BookEditScreen.Pos2i(0, l3)); -- intlist.add(p_98133_); -- list.add(new BookEditScreen.LineInfo(p_98132_, s3, bookeditscreen$pos2i1.x, bookeditscreen$pos2i1.y)); -+ intlist.add(p_238762_7_); -+ list.add(new BookEditScreen.LineInfo(p_238762_6_, s3, bookeditscreen$pos2i1.x, bookeditscreen$pos2i1.y)); - }); - int[] aint = intlist.toIntArray(); - boolean flag = i == s.length(); diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/CreativeModeInventoryScreen.java.patch b/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/CreativeModeInventoryScreen.java.patch deleted file mode 100644 index 0f09cd64d..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/CreativeModeInventoryScreen.java.patch +++ /dev/null @@ -1,26 +0,0 @@ ---- a/net/minecraft/client/gui/screens/inventory/CreativeModeInventoryScreen.java -+++ b/net/minecraft/client/gui/screens/inventory/CreativeModeInventoryScreen.java -@@ -47,6 +47,7 @@ - import net.minecraft.world.item.TooltipFlag; - import net.minecraft.world.item.enchantment.Enchantment; - import net.minecraft.world.item.enchantment.EnchantmentHelper; -+import org.vivecraft.asm.ASMDelegator; - - public class CreativeModeInventoryScreen extends EffectRenderingInventoryScreen - { -@@ -453,6 +454,7 @@ - (this.menu).items.addAll(searchtree.search(s.toLowerCase(Locale.ROOT))); - } - -+ ASMDelegator.addCreativeSearch(this.searchBox.getValue(), (this.menu).items); - this.scrollOffs = 0.0F; - this.menu.scrollTo(0.0F); - } -@@ -591,6 +593,7 @@ - else if (pTab != CreativeModeTab.TAB_SEARCH) - { - pTab.fillItemList((this.menu).items); -+ ASMDelegator.addCreativeItems(pTab, (this.menu).items); - } - - if (pTab == CreativeModeTab.TAB_INVENTORY) diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/SignEditScreen.java.patch b/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/SignEditScreen.java.patch deleted file mode 100644 index 4e7600adf..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/SignEditScreen.java.patch +++ /dev/null @@ -1,30 +0,0 @@ ---- a/net/minecraft/client/gui/screens/inventory/SignEditScreen.java -+++ b/net/minecraft/client/gui/screens/inventory/SignEditScreen.java -@@ -12,6 +12,9 @@ - import com.mojang.blaze3d.vertex.VertexFormat; - import com.mojang.math.Matrix4f; - import java.util.stream.IntStream; -+ -+import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; -+ - import net.minecraft.client.gui.components.Button; - import net.minecraft.client.gui.font.TextFieldHelper; - import net.minecraft.client.gui.screens.Screen; -@@ -63,6 +66,9 @@ - this.onDone(); - })); - this.sign.setEditable(false); -+ //Vivecraft -+ KeyboardHandler.setOverlayShowing(true); -+ // - this.signField = new TextFieldHelper(() -> - { - return this.messages[this.line]; -@@ -90,6 +96,7 @@ - } - - this.sign.setEditable(true); -+ KeyboardHandler.setOverlayShowing(false); - } - - public void tick() diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/SignEditScreenVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/SignEditScreenVRMixin.java deleted file mode 100644 index bb162db8a..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/SignEditScreenVRMixin.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.vivecraft.mixin.client.gui.screens.inventory; - -import net.minecraft.client.gui.screens.inventory.SignEditScreen; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; - -@Mixin(SignEditScreen.class) -public class SignEditScreenVRMixin { - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/entity/SignBlockEntity;setEditable(Z)V", shift = At.Shift.AFTER), method = "init") - public void showOverlay(CallbackInfo ci) { - KeyboardHandler.setOverlayShowing(true); - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/entity/SignBlockEntity;setEditable(Z)V", shift = At.Shift.AFTER), method = "removed") - public void dontShowOverlay(CallbackInfo ci) { - KeyboardHandler.setOverlayShowing(false); - } -} diff --git a/common/src/main/java/org/vivecraft/mixin/client/main/Main.java.patch b/common/src/main/java/org/vivecraft/mixin/client/main/Main.java.patch deleted file mode 100644 index 23b04ea36..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/main/Main.java.patch +++ /dev/null @@ -1,91 +0,0 @@ ---- a/net/minecraft/client/main/Main.java -+++ b/net/minecraft/client/main/Main.java -@@ -44,7 +44,10 @@ - public class Main - { - static final Logger LOGGER = LogManager.getLogger(); -- -+ public static boolean kiosk; -+ public static boolean viewonly; -+ public static boolean katvr; -+ public static boolean infinadeck; - @DontObfuscate - public static void main(String[] pArgs) - { -@@ -54,6 +57,11 @@ - optionparser.accepts("demo"); - optionparser.accepts("disableMultiplayer"); - optionparser.accepts("disableChat"); -+ optionparser.accepts("demo"); -+ optionparser.accepts("kiosk"); -+ optionparser.accepts("viewonly"); -+ optionparser.accepts("katvr"); -+ optionparser.accepts("infinadeck"); - optionparser.accepts("fullscreen"); - optionparser.accepts("checkGlErrors"); - OptionSpec optionspec = optionparser.accepts("jfrProfile"); -@@ -72,8 +80,8 @@ - OptionSpec optionspec13 = optionparser.accepts("clientId").withOptionalArg().defaultsTo(""); - OptionSpec optionspec14 = optionparser.accepts("accessToken").withRequiredArg().required(); - OptionSpec optionspec15 = optionparser.accepts("version").withRequiredArg().required(); -- OptionSpec optionspec16 = optionparser.accepts("width").withRequiredArg().ofType(Integer.class).defaultsTo(854); -- OptionSpec optionspec17 = optionparser.accepts("height").withRequiredArg().ofType(Integer.class).defaultsTo(480); -+ OptionSpec optionspec16 = optionparser.accepts("width").withRequiredArg().ofType(Integer.class).defaultsTo(1280); -+ OptionSpec optionspec17 = optionparser.accepts("height").withRequiredArg().ofType(Integer.class).defaultsTo(720); - OptionSpec optionspec18 = optionparser.accepts("fullscreenWidth").withRequiredArg().ofType(Integer.class); - OptionSpec optionspec19 = optionparser.accepts("fullscreenHeight").withRequiredArg().ofType(Integer.class); - OptionSpec optionspec20 = optionparser.accepts("userProperties").withRequiredArg().defaultsTo("{}"); -@@ -124,6 +132,25 @@ - OptionalInt optionalint1 = ofNullable(parseArgument(optionset, optionspec19)); - boolean flag = optionset.has("fullscreen"); - boolean flag1 = optionset.has("demo"); -+ kiosk = optionset.has("kiosk"); -+ -+ if (kiosk) -+ { -+ System.out.println("Setting kiosk"); -+ } -+ -+ if (kiosk) -+ { -+ viewonly = optionset.has("viewonly"); -+ -+ if (viewonly) -+ { -+ System.out.println("Setting viewonly"); -+ } -+ } -+ -+ katvr = optionset.has("katvr"); -+ infinadeck = optionset.has("infinadeck"); - boolean flag2 = optionset.has("disableMultiplayer"); - boolean flag3 = optionset.has("disableChat"); - String s3 = parseArgument(optionset, optionspec15); -@@ -196,6 +223,7 @@ - } - catch (Throwable throwable1) - { -+ LOGGER.warn("Failed to something: ", throwable1); - CrashReport crashreport = CrashReport.forThrowable(throwable1, "Initializing game"); - CrashReportCategory crashreportcategory = crashreport.addCategory("Initialization"); - NativeModuleLister.addCrashSection(crashreportcategory); -@@ -255,9 +283,9 @@ - thread1.join(); - } - } -- catch (InterruptedException interruptedexception) -+ catch (InterruptedException interruptedexception1) - { -- LOGGER.error("Exception during client thread shutdown", (Throwable)interruptedexception); -+ LOGGER.error("Exception during client thread shutdown", (Throwable)interruptedexception1); - } - finally - { -@@ -307,6 +335,6 @@ - static - { - Util.preInitLog4j(); -- System.setProperty("java.awt.headless", "true"); -+ //Vivecraft we do this for some reason. System.setProperty("java.awt.headless", "true"); - } - } diff --git a/common/src/main/java/org/vivecraft/mixin/client/main/MainMixin.java b/common/src/main/java/org/vivecraft/mixin/client/main/MainMixin.java index 0fb4080f3..78442e836 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/main/MainMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client/main/MainMixin.java @@ -1,11 +1,10 @@ package org.vivecraft.mixin.client.main; -import org.vivecraft.ClientDataHolder; +import org.vivecraft.client.utils.UpdateChecker; +import org.vivecraft.client_vr.ClientDataHolderVR; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Constant; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyConstant; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @@ -14,55 +13,40 @@ import joptsimple.OptionSet; import net.minecraft.client.main.Main; -//Done @Mixin(Main.class) public class MainMixin { - @Inject(at = @At(value = "INVOKE", target = "Ljoptsimple/OptionParser;allowsUnrecognizedOptions()V", remap = false), method = "main([Ljava/lang/String;)V", locals = LocalCapture.CAPTURE_FAILHARD, remap = false) - private static void options(String[] p_129642_, CallbackInfo callback, OptionParser optionparser) { + @Inject(at = @At(value = "INVOKE", target = "Ljoptsimple/OptionParser;allowsUnrecognizedOptions()V"), method = "main", remap = false, locals = LocalCapture.CAPTURE_FAILHARD) + private static void options(String[] strings, CallbackInfo ci, OptionParser optionparser) { optionparser.accepts("kiosk"); optionparser.accepts("viewonly"); optionparser.accepts("katvr"); optionparser.accepts("infinadeck"); } - - @ModifyConstant(method = "main", constant = @Constant(intValue = 854), remap = false) - private static int width(int i) { - return 1280; - } - - @ModifyConstant(method = "main", constant = @Constant(intValue = 480), remap = false) - private static int height(int i) { - return 720; - } - - @Redirect(at = @At(value = "INVOKE", target = "Ljoptsimple/OptionParser;parse([Ljava/lang/String;)Ljoptsimple/OptionSet;", remap = false) , method = "main([Ljava/lang/String;)V", remap = false) + + @Redirect(at = @At(value = "INVOKE", target = "Ljoptsimple/OptionParser;parse([Ljava/lang/String;)Ljoptsimple/OptionSet;") , method = "main", remap = false) private static OptionSet kiosk(OptionParser optionparser, String[] p_129642_) { + new Thread(UpdateChecker::checkForUpdates).start(); OptionSet optionset = optionparser.parse(p_129642_); - ClientDataHolder.kiosk = optionset.has("kiosk"); + ClientDataHolderVR.kiosk = optionset.has("kiosk"); - if (ClientDataHolder.kiosk) + if (ClientDataHolderVR.kiosk) { System.out.println("Setting kiosk"); } - if (ClientDataHolder.kiosk) + if (ClientDataHolderVR.kiosk) { - ClientDataHolder.viewonly = optionset.has("viewonly"); + ClientDataHolderVR.viewonly = optionset.has("viewonly"); - if (ClientDataHolder.viewonly) + if (ClientDataHolderVR.viewonly) { System.out.println("Setting viewonly"); } } - ClientDataHolder.katvr = optionset.has("katvr"); - ClientDataHolder.infinadeck = optionset.has("infinadeck"); + ClientDataHolderVR.katvr = optionset.has("katvr"); + ClientDataHolderVR.infinadeck = optionset.has("infinadeck"); return optionset; } -// -// @Redirect(at = @At("INVOKE")) -// public static void headless(System system) { -// return; -// } } diff --git a/common/src/main/java/org/vivecraft/mixin/client/multiplayer/ClientPacketListener.java.patch b/common/src/main/java/org/vivecraft/mixin/client/multiplayer/ClientPacketListener.java.patch deleted file mode 100644 index d7b580659..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/multiplayer/ClientPacketListener.java.patch +++ /dev/null @@ -1,518 +0,0 @@ ---- a/net/minecraft/client/multiplayer/ClientPacketListener.java -+++ b/net/minecraft/client/multiplayer/ClientPacketListener.java -@@ -250,9 +250,21 @@ - import net.minecraft.world.level.GameType; - import net.minecraft.world.level.Level; - import net.minecraft.world.level.LightLayer; -+import net.minecraft.world.level.block.Block; -+import net.minecraft.world.level.block.entity.BannerBlockEntity; -+import net.minecraft.world.level.block.entity.BeaconBlockEntity; -+import net.minecraft.world.level.block.entity.BedBlockEntity; -+import net.minecraft.world.level.block.entity.BeehiveBlockEntity; - import net.minecraft.world.level.block.entity.BlockEntity; -+import net.minecraft.world.level.block.entity.CampfireBlockEntity; - import net.minecraft.world.level.block.entity.CommandBlockEntity; -+import net.minecraft.world.level.block.entity.ConduitBlockEntity; -+import net.minecraft.world.level.block.entity.JigsawBlockEntity; - import net.minecraft.world.level.block.entity.SignBlockEntity; -+import net.minecraft.world.level.block.entity.SkullBlockEntity; -+import net.minecraft.world.level.block.entity.SpawnerBlockEntity; -+import net.minecraft.world.level.block.entity.StructureBlockEntity; -+import net.minecraft.world.level.block.entity.TheEndGatewayBlockEntity; - import net.minecraft.world.level.block.state.BlockState; - import net.minecraft.world.level.border.WorldBorder; - import net.minecraft.world.level.chunk.DataLayer; -@@ -273,8 +285,14 @@ - import net.minecraft.world.scores.Scoreboard; - import net.minecraft.world.scores.Team; - import net.minecraft.world.scores.criteria.ObjectiveCriteria; -+import net.optifine.reflect.Reflector; - import org.apache.logging.log4j.LogManager; - import org.apache.logging.log4j.Logger; -+import org.vivecraft.api.NetworkHelper; -+import org.vivecraft.provider.ControllerType; -+import org.vivecraft.provider.openvr_jna.control.VivecraftMovementInput; -+import org.vivecraft.render.PlayerModelController; -+import org.vivecraft.settings.VRSettings; - - public class ClientPacketListener implements ClientGamePacketListener - { -@@ -311,6 +329,8 @@ - this.advancements = new ClientAdvancements(p_194193_); - this.suggestionsProvider = new ClientSuggestionProvider(this, p_194193_); - this.telemetryManager = p_194197_; -+ NetworkHelper.resetServerSettings(); -+ NetworkHelper.displayedChatMessage = false; - } - - public ClientSuggestionProvider getSuggestionsProvider() -@@ -366,10 +386,15 @@ - - this.minecraft.debugRenderer.clear(); - this.minecraft.player.resetPos(); -+ //Forge -+ Reflector.call(Reflector.ClientHooks_firePlayerLogin, this.minecraft.gameMode, this.minecraft.player, this.minecraft.getConnection().getConnection()); -+ // - int i = pPacket.playerId(); - this.minecraft.player.setId(i); - this.level.addPlayer(i, this.minecraft.player); -- this.minecraft.player.input = new KeyboardInput(this.minecraft.options); -+ //Vivecraft -+ this.minecraft.player.input = new VivecraftMovementInput(this.minecraft.options); -+ // - this.minecraft.gameMode.adjustPlayer(this.minecraft.player); - this.minecraft.cameraEntity = this.minecraft.player; - this.minecraft.setScreen(new ReceivingLevelScreen()); -@@ -377,10 +402,14 @@ - this.minecraft.player.setShowDeathScreen(pPacket.showDeathScreen()); - this.minecraft.gameMode.setLocalMode(pPacket.gameType(), pPacket.previousGameType()); - this.minecraft.options.setServerRenderDistance(pPacket.chunkRadius()); -+ //Forge -+ Reflector.call(Reflector.NetworkHooks_sendMCRegistryPackets, connection, "PLAY_TO_SERVER"); -+ // - this.minecraft.options.broadcastOptions(); - this.connection.send(new ServerboundCustomPayloadPacket(ServerboundCustomPayloadPacket.BRAND, (new FriendlyByteBuf(Unpooled.buffer())).writeUtf(ClientBrandRetriever.getClientModName()))); - this.minecraft.getGame().onStartGameSession(); -- this.telemetryManager.onPlayerInfoReceived(pPacket.gameType(), pPacket.hardcore()); -+ NetworkHelper.vivePlayers.clear(); -+ NetworkHelper.sendVersionInfo(); - } - - public void handleAddEntity(ClientboundAddEntityPacket pPacket) -@@ -649,9 +678,9 @@ - { - PacketUtils.ensureRunningOnSameThread(pPacket, this, this.minecraft); - int i = 19 | (pPacket.shouldSuppressLightUpdates() ? 128 : 0); -- pPacket.runUpdates((p_104922_, p_104923_) -> -+ pPacket.runUpdates((p_243492_2_, p_243492_3_) -> - { -- this.level.setBlock(p_104922_, p_104923_, i); -+ this.level.setBlock(p_243492_2_, p_243492_3_, i); - }); - } - -@@ -735,6 +764,9 @@ - public void handleDisconnect(ClientboundDisconnectPacket pPacket) - { - this.connection.disconnect(pPacket.getReason()); -+ this.minecraft.vrPlayer.setTeleportSupported(false); -+ this.minecraft.vrPlayer.setTeleportOverride(false); -+ this.dataholder.vrSettings.overrides.resetAll(); - } - - public void onDisconnect(Component pReason) -@@ -809,7 +841,39 @@ - public void handleChat(ClientboundChatPacket pPacket) - { - PacketUtils.ensureRunningOnSameThread(pPacket, this, this.minecraft); -- this.minecraft.gui.handleChat(pPacket.getType(), pPacket.getMessage(), pPacket.getSender()); -+ //Forge -+ Component component = (Component)Reflector.call(Reflector.ForgeEventFactory_onClientChat, pPacket.getType(), pPacket.getMessage(), pPacket.getSender()); -+ -+ if (component == null) -+ { -+ this.minecraft.gui.handleChat(pPacket.getType(), pPacket.getMessage(), pPacket.getSender()); -+ } -+ else -+ { -+ this.minecraft.gui.handleChat(pPacket.getType(), component, pPacket.getSender()); -+ } -+ // -+ -+ Minecraft minecraft = Minecraft.getInstance(); -+ String s = minecraft.player.lastMsg; -+ minecraft.player.lastMsg = null; -+ -+ if (minecraft.player == null || s == null || !pPacket.getMessage().getString().contains(s)) -+ { -+ if (dataholder.vrSettings.chatNotifications != VRSettings.ChatNotifications.NONE) -+ { -+ if ((dataholder.vrSettings.chatNotifications == VRSettings.ChatNotifications.HAPTIC || dataholder.vrSettings.chatNotifications == VRSettings.ChatNotifications.BOTH) && !dataholder.vrSettings.seated) -+ { -+ minecraft.vr.triggerHapticPulse(ControllerType.LEFT, 0.2F, 1000.0F, 1.0F); -+ } -+ -+ if (dataholder.vrSettings.chatNotifications == VRSettings.ChatNotifications.SOUND || dataholder.vrSettings.chatNotifications == VRSettings.ChatNotifications.BOTH) -+ { -+ Vec3 vec3 = minecraft.vrPlayer.vrdata_world_pre.getController(1).getPosition(); -+ minecraft.level.playLocalSound(vec3.x(), vec3.y(), vec3.z(), Registry.SOUND_EVENT.get(new ResourceLocation(dataholder.vrSettings.chatNotificationSound)), SoundSource.NEUTRAL, 0.3F, 0.1F, false); -+ } -+ } -+ } - } - - public void handleAnimate(ClientboundAnimatePacket pPacket) -@@ -919,7 +983,8 @@ - - if (entity1 == this.minecraft.player && !flag) - { -- this.minecraft.gui.setOverlayMessage(new TranslatableComponent("mount.onboard", this.minecraft.options.keyShift.getTranslatedKeyMessage()), false); -+ this.minecraft.gui.setOverlayMessage(new TranslatableComponent("mount.onboard", this.minecraft.options.keyShift.getName()), false); -+ this.minecraft.options.keyShift.getTranslatedKeyMessage(); - } - } - } -@@ -1017,6 +1082,8 @@ - this.level.addMapData(map); - this.minecraft.setLevel(this.level); - this.minecraft.setScreen(new ReceivingLevelScreen()); -+ NetworkHelper.resetServerSettings(); -+ NetworkHelper.sendVersionInfo(); - } - - String s = localplayer.getServerBrand(); -@@ -1037,12 +1104,15 @@ - { - localplayer1.getAttributes().assignValues(localplayer.getAttributes()); - } -- -+ //Forge (reflection cause nonvr doesnt edit localplayer... parity)! -+ Reflector.call(Reflector.LocalPlayer_updateSyncFields, localplayer1, localplayer);// Forge: fix MC-10657 -+ // - localplayer1.resetPos(); - localplayer1.setServerBrand(s); -+ Reflector.call(Reflector.ClientHooks_firePlayerRespawn, this.minecraft.gameMode, localplayer, localplayer1, localplayer1.connection.getConnection()); - this.level.addPlayer(i, localplayer1); - localplayer1.setYRot(-180.0F); -- localplayer1.input = new KeyboardInput(this.minecraft.options); -+ localplayer1.input = new VivecraftMovementInput(this.minecraft.options); - this.minecraft.gameMode.adjustPlayer(localplayer1); - localplayer1.setReducedDebugInfo(localplayer.isReducedDebugInfo()); - localplayer1.setShowDeathScreen(localplayer.shouldShowDeathScreen()); -@@ -1168,22 +1238,27 @@ - - public void handleBlockEntityData(ClientboundBlockEntityDataPacket pPacket) - { -- PacketUtils.ensureRunningOnSameThread(pPacket, this, this.minecraft); -- BlockPos blockpos = pPacket.getPos(); -- this.minecraft.level.getBlockEntity(blockpos, pPacket.getType()).ifPresent((p_194239_) -> -- { -- CompoundTag compoundtag = pPacket.getTag(); -- -- if (compoundtag != null) -- { -- p_194239_.load(compoundtag); -- } -- -- if (p_194239_ instanceof CommandBlockEntity && this.minecraft.screen instanceof CommandBlockEditScreen) -- { -- ((CommandBlockEditScreen)this.minecraft.screen).updateGui(); -- } -- }); -+ PacketUtils.ensureRunningOnSameThread(pPacket, this, this.minecraft); -+ BlockPos blockpos = pPacket.getPos(); -+ this.minecraft.level.getBlockEntity(blockpos, pPacket.getType()).ifPresent((p_194239_) -> -+ { -+ //Forge -+ if(Reflector.IForgeTileEntity_handleUpdateTag.exists()) { -+ Reflector.call(p_194239_, Reflector.IForgeTileEntity_onDataPacket, connection, pPacket); -+ } else { -+ // -+ CompoundTag compoundtag = pPacket.getTag(); -+ -+ if (compoundtag != null) -+ { -+ p_194239_.load(compoundtag); -+ } -+ } -+ if (p_194239_ instanceof CommandBlockEntity && this.minecraft.screen instanceof CommandBlockEditScreen) -+ { -+ ((CommandBlockEditScreen)this.minecraft.screen).updateGui(); -+ } -+ }); - } - - public void handleContainerSetData(ClientboundContainerSetDataPacket pPacket) -@@ -1408,6 +1483,9 @@ - clientrecipebook.setupCollections(this.recipeManager.getRecipes()); - clientrecipebook.getCollections().forEach(mutablesearchtree::add); - mutablesearchtree.refresh(); -+ //Forge -+ Reflector.call(Reflector.ForgeHooksClient_onRecipesUpdated, this.recipeManager); -+ // - } - - public void handleLookAt(ClientboundPlayerLookAtPacket pPacket) -@@ -1508,7 +1586,7 @@ - - if (entity instanceof LivingEntity) - { -- MobEffect mobeffect = MobEffect.byId(pPacket.getEffectId()); -+ MobEffect mobeffect = MobEffect.byId(pPacket.getEffectId() & 255); - - if (mobeffect != null) - { -@@ -1532,6 +1610,11 @@ - } - else - { -+ //Forge -+ if(Reflector.ITagCollectionSupplier_reinjectOptionalTags.exists()) { -+ tagcontainer = (TagContainer) Reflector.call(Reflector.ITagCollectionSupplier_reinjectOptionalTags, tagcontainer); -+ } -+ // - this.tags = tagcontainer; - - if (!this.connection.isMemoryConnection()) -@@ -1886,16 +1969,16 @@ - { - throw new URISyntaxException(pUrl, "Wrong protocol"); - } -- else if (!flag || !pUrl.contains("..") && pUrl.endsWith("/resources.zip")) -+ else if (flag && (pUrl.contains("..") || !pUrl.endsWith("/resources.zip"))) - { -- return true; -+ throw new URISyntaxException(pUrl, "Invalid levelstorage resourcepack path"); - } - else - { -- throw new URISyntaxException(pUrl, "Invalid levelstorage resourcepack path"); -+ return true; - } - } -- catch (URISyntaxException urisyntaxexception) -+ catch (URISyntaxException urisyntaxexception1) - { - this.send(ServerboundResourcePackPacket.Action.FAILED_DOWNLOAD); - return false; -@@ -1967,6 +2050,7 @@ - PacketUtils.ensureRunningOnSameThread(pPacket, this, this.minecraft); - ResourceLocation resourcelocation = pPacket.getIdentifier(); - FriendlyByteBuf friendlybytebuf = null; -+ boolean release = true; - - try - { -@@ -2243,14 +2327,170 @@ - int i5 = friendlybytebuf.readVarInt(); - this.minecraft.debugRenderer.gameEventListenerRenderer.trackListener(positionsource, i5); - } -+ else if (resourcelocation.getNamespace().equalsIgnoreCase("vivecraft")) -+ { -+ if (resourcelocation.getPath().equalsIgnoreCase("data")) -+ { -+ byte b0 = friendlybytebuf.readByte(); -+ NetworkHelper.PacketDiscriminators networkhelper$packetdiscriminators = NetworkHelper.PacketDiscriminators.values()[b0]; -+ -+ switch (networkhelper$packetdiscriminators) -+ { -+ case VERSION: -+ String s11 = friendlybytebuf.readUtf(1024); -+ this.minecraft.vrPlayer.setTeleportSupported(true); -+ this.minecraft.vrPlayer.teleportWarningTimer = -1; -+ -+ if (!NetworkHelper.displayedChatMessage) -+ { -+ NetworkHelper.displayedChatMessage = true; -+ this.minecraft.gui.getChat().addMessage(new TranslatableComponent("vivecraft.messages.serverplugin", s11)); -+ } -+ -+ if (Minecraft.getInstance().vrSettings.manualCalibration == -1.0F && !Minecraft.getInstance().vrSettings.seated) -+ { -+ this.minecraft.gui.getChat().addMessage(new TranslatableComponent("vivecraft.messages.calibrateheight")); -+ } -+ -+ break; -+ -+ case REQUESTDATA: -+ NetworkHelper.serverWantsData = true; -+ break; -+ -+ case CLIMBING: -+ NetworkHelper.serverAllowsClimbey = friendlybytebuf.readBoolean(); -+ -+ if (friendlybytebuf.readableBytes() > 0) -+ { -+ Minecraft.getInstance().climbTracker.serverblockmode = friendlybytebuf.readByte(); -+ Minecraft.getInstance().climbTracker.blocklist.clear(); -+ -+ while (friendlybytebuf.readableBytes() > 0) -+ { -+ String s12 = friendlybytebuf.readUtf(16384); -+ Block block = Registry.BLOCK.get(new ResourceLocation(s12)); -+ -+ if (block != null) -+ { -+ Minecraft.getInstance().climbTracker.blocklist.add(block); -+ } -+ } -+ } -+ -+ break; -+ -+ case TELEPORT: -+ NetworkHelper.serverSupportsDirectTeleport = true; -+ break; -+ -+ case UBERPACKET: -+ Long olong = friendlybytebuf.readLong(); -+ Long olong1 = friendlybytebuf.readLong(); -+ byte[] abyte = new byte[29]; -+ byte[] abyte1 = new byte[29]; -+ byte[] abyte2 = new byte[29]; -+ friendlybytebuf.readBytes(29).getBytes(0, abyte); -+ friendlybytebuf.readBytes(29).getBytes(0, abyte1); -+ friendlybytebuf.readBytes(29).getBytes(0, abyte2); -+ UUID uuid2 = new UUID(olong, olong1); -+ float f3 = 1.0F; -+ float f4 = 1.0F; -+ -+ if (friendlybytebuf.isReadable()) -+ { -+ f3 = friendlybytebuf.readFloat(); -+ } -+ -+ if (friendlybytebuf.isReadable()) -+ { -+ f4 = friendlybytebuf.readFloat(); -+ } -+ -+ PlayerModelController.getInstance().Update(uuid2, abyte, abyte1, abyte2, f3, f4); -+ break; -+ -+ case SETTING_OVERRIDE: -+ while (friendlybytebuf.readableBytes() > 0) -+ { -+ String s13 = friendlybytebuf.readUtf(16384); -+ String s14 = friendlybytebuf.readUtf(16384); -+ String[] astring = s13.split("\\.", 2); -+ -+ if (this.dataholder.vrSettings.overrides.hasSetting(astring[0])) -+ { -+ VRSettings.ServerOverrides.Setting vrsettings$serveroverrides$setting = this.dataholder.vrSettings.overrides.getSetting(astring[0]); -+ -+ try -+ { -+ if (astring.length > 1) -+ { -+ String s15 = astring[1]; -+ -+ switch (s15) -+ { -+ case "min": -+ vrsettings$serveroverrides$setting.setValueMin(Float.parseFloat(s14)); -+ break; -+ -+ case "max": -+ vrsettings$serveroverrides$setting.setValueMax(Float.parseFloat(s14)); -+ } -+ } -+ else -+ { -+ Object object = vrsettings$serveroverrides$setting.getOriginalValue(); -+ -+ if (object instanceof Boolean) -+ { -+ vrsettings$serveroverrides$setting.setValue(s14.equals("true")); -+ } -+ else if (!(object instanceof Integer) && !(object instanceof Byte) && !(object instanceof Short)) -+ { -+ if (!(object instanceof Float) && !(object instanceof Double)) -+ { -+ vrsettings$serveroverrides$setting.setValue(s14); -+ } -+ else -+ { -+ vrsettings$serveroverrides$setting.setValue(Float.parseFloat(s14)); -+ } -+ } -+ else -+ { -+ vrsettings$serveroverrides$setting.setValue(Integer.parseInt(s14)); -+ } -+ } -+ -+ System.out.println("Server setting override: " + s13 + " = " + s14); -+ } -+ catch (Exception exception) -+ { -+ exception.printStackTrace(); -+ } -+ } -+ } -+ -+ break; -+ -+ case CRAWL: -+ NetworkHelper.serverAllowsCrawling = true; -+ } -+ } -+ } - else - { -- LOGGER.warn("Unknown custom packed identifier: {}", (Object)resourcelocation); -+ release = false; -+ -+ if (!Reflector.callBoolean(Reflector.NetworkHooks_onCustomPayload, pPacket, this.connection)) -+ { -+ LOGGER.warn("Unknown custom packet identifier: {}", (Object)resourcelocation); -+ } - } - } - finally - { -- if (friendlybytebuf != null) -+ if (friendlybytebuf != null && release) - { - friendlybytebuf.release(); - } -@@ -2439,27 +2679,25 @@ - { - throw new IllegalStateException("Server tried to update attributes of a non-living entity (actually: " + entity + ")"); - } -- else -+ -+ AttributeMap attributemap = ((LivingEntity)entity).getAttributes(); -+ -+ for (ClientboundUpdateAttributesPacket.AttributeSnapshot clientboundupdateattributespacket$attributesnapshot : pPacket.getValues()) - { -- AttributeMap attributemap = ((LivingEntity)entity).getAttributes(); -+ AttributeInstance attributeinstance = attributemap.getInstance(clientboundupdateattributespacket$attributesnapshot.getAttribute()); - -- for (ClientboundUpdateAttributesPacket.AttributeSnapshot clientboundupdateattributespacket$attributesnapshot : pPacket.getValues()) -+ if (attributeinstance == null) -+ { -+ LOGGER.warn("Entity {} does not have attribute {}", entity, Registry.ATTRIBUTE.getKey(clientboundupdateattributespacket$attributesnapshot.getAttribute())); -+ } -+ else - { -- AttributeInstance attributeinstance = attributemap.getInstance(clientboundupdateattributespacket$attributesnapshot.getAttribute()); -+ attributeinstance.setBaseValue(clientboundupdateattributespacket$attributesnapshot.getBase()); -+ attributeinstance.removeModifiers(); - -- if (attributeinstance == null) -+ for (AttributeModifier attributemodifier : clientboundupdateattributespacket$attributesnapshot.getModifiers()) - { -- LOGGER.warn("Entity {} does not have attribute {}", entity, Registry.ATTRIBUTE.getKey(clientboundupdateattributespacket$attributesnapshot.getAttribute())); -- } -- else -- { -- attributeinstance.setBaseValue(clientboundupdateattributespacket$attributesnapshot.getBase()); -- attributeinstance.removeModifiers(); -- -- for (AttributeModifier attributemodifier : clientboundupdateattributespacket$attributesnapshot.getModifiers()) -- { -- attributeinstance.addTransientModifier(attributemodifier); -- } -+ attributeinstance.addTransientModifier(attributemodifier); - } - } - } -@@ -2648,4 +2886,17 @@ - { - return this.registryAccess; - } -+ -+ boolean tryParseInt(String value) -+ { -+ try -+ { -+ Integer.parseInt(value); -+ return true; -+ } -+ catch (NumberFormatException numberformatexception) -+ { -+ return false; -+ } -+ } - } diff --git a/common/src/main/java/org/vivecraft/mixin/client/multiplayer/ClientPacketListenerMixin.java b/common/src/main/java/org/vivecraft/mixin/client/multiplayer/ClientPacketListenerMixin.java deleted file mode 100644 index a5292d184..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/multiplayer/ClientPacketListenerMixin.java +++ /dev/null @@ -1,121 +0,0 @@ -package org.vivecraft.mixin.client.multiplayer; - -import com.mojang.authlib.GameProfile; -import net.minecraft.client.ClientTelemetryManager; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.multiplayer.ClientPacketListener; -import net.minecraft.network.Connection; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.chat.TranslatableComponent; -import net.minecraft.network.protocol.game.ClientboundCustomPayloadPacket; -import net.minecraft.network.protocol.game.ClientboundLoginPacket; -import net.minecraft.network.protocol.game.ClientboundRespawnPacket; -import net.minecraft.resources.ResourceLocation; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.At.Shift; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; -import org.vivecraft.api.ClientNetworkHelper; -import org.vivecraft.api.CommonNetworkHelper; -import org.vivecraft.render.PlayerModelController; - -import java.util.UUID; - -@Mixin(ClientPacketListener.class) -public class ClientPacketListenerMixin { - - @Final - @Shadow - private Minecraft minecraft; - - @Inject(at = @At("TAIL"), method = "") - public void init(Minecraft minecraft, Screen screen, Connection connection, GameProfile gameProfile, ClientTelemetryManager clientTelemetryManager, CallbackInfo ci) { - ClientNetworkHelper.resetServerSettings(); - ClientNetworkHelper.displayedChatMessage = false; - } - - @Inject(at = @At("TAIL"), method = "handleLogin(Lnet/minecraft/network/protocol/game/ClientboundLoginPacket;)V") - public void login(ClientboundLoginPacket p_105030_, CallbackInfo callback) { - CommonNetworkHelper.vivePlayers.clear(); - ClientNetworkHelper.sendVersionInfo(); - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V", ordinal = 0, shift = Shift.AFTER), method = "handleRespawn(Lnet/minecraft/network/protocol/game/ClientboundRespawnPacket;)V") - public void respawn(ClientboundRespawnPacket packet, CallbackInfo callback) { - ClientNetworkHelper.resetServerSettings(); - ClientNetworkHelper.sendVersionInfo(); - } - - @Inject(at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/network/protocol/game/ClientboundCustomPayloadPacket;getData()Lnet/minecraft/network/FriendlyByteBuf;"), - method = "handleCustomPayload(Lnet/minecraft/network/protocol/game/ClientboundCustomPayloadPacket;)V", - cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD) - public void handlepacket(ClientboundCustomPayloadPacket p_105004_, CallbackInfo info, ResourceLocation resourcelocation, FriendlyByteBuf friendlybytebuf) { - if (resourcelocation.getNamespace().equalsIgnoreCase("vivecraft")) { - if (resourcelocation.getPath().equalsIgnoreCase("data")) { - byte b0 = friendlybytebuf.readByte(); - CommonNetworkHelper.PacketDiscriminators networkhelper$packetdiscriminators = CommonNetworkHelper.PacketDiscriminators.values()[b0]; - - switch (networkhelper$packetdiscriminators) { - case VERSION: - String s11 = friendlybytebuf.readUtf(1024); - - if (!ClientNetworkHelper.displayedChatMessage) { - ClientNetworkHelper.displayedChatMessage = true; - this.minecraft.gui.getChat().addMessage(new TranslatableComponent("vivecraft.messages.serverplugin", s11)); - } - - break; - - case REQUESTDATA: - ClientNetworkHelper.serverWantsData = true; - break; - - case CLIMBING: - - break; - - case TELEPORT: - ClientNetworkHelper.serverSupportsDirectTeleport = true; - break; - - case UBERPACKET: - long olong = friendlybytebuf.readLong(); - long olong1 = friendlybytebuf.readLong(); - byte[] abyte = new byte[29]; - byte[] abyte1 = new byte[29]; - byte[] abyte2 = new byte[29]; - friendlybytebuf.readBytes(29).getBytes(0, abyte); - friendlybytebuf.readBytes(29).getBytes(0, abyte1); - friendlybytebuf.readBytes(29).getBytes(0, abyte2); - UUID uuid2 = new UUID(olong, olong1); - float f3 = 1.0F; - float f4 = 1.0F; - - if (friendlybytebuf.isReadable()) { - f3 = friendlybytebuf.readFloat(); - } - - if (friendlybytebuf.isReadable()) { - f4 = friendlybytebuf.readFloat(); - } - - PlayerModelController.getInstance().Update(uuid2, abyte, abyte1, abyte2, f3, f4); - break; - - case SETTING_OVERRIDE: - break; - - case CRAWL: - ClientNetworkHelper.serverAllowsCrawling = true; - } - - info.cancel(); - } - } - } -} diff --git a/common/src/main/java/org/vivecraft/mixin/client/multiplayer/ClientPacketListenerVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client/multiplayer/ClientPacketListenerVRMixin.java deleted file mode 100644 index 39ef054e6..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/multiplayer/ClientPacketListenerVRMixin.java +++ /dev/null @@ -1,254 +0,0 @@ -package org.vivecraft.mixin.client.multiplayer; - -import com.mojang.authlib.GameProfile; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.network.Connection; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.api.CommonNetworkHelper; -import org.vivecraft.extensions.PlayerExtension; -import net.minecraft.client.ClientTelemetryManager; -import net.minecraft.client.Minecraft; -import net.minecraft.client.Options; -import net.minecraft.client.multiplayer.ClientPacketListener; -import net.minecraft.client.player.KeyboardInput; -import net.minecraft.client.player.LocalPlayer; -import net.minecraft.core.Registry; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TranslatableComponent; -import net.minecraft.network.protocol.game.ClientboundChatPacket; -import net.minecraft.network.protocol.game.ClientboundCustomPayloadPacket; -import net.minecraft.network.protocol.game.ClientboundLoginPacket; -import net.minecraft.network.protocol.game.ClientboundRespawnPacket; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.sounds.SoundSource; -import net.minecraft.world.level.GameType; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; -import org.vivecraft.api.ClientNetworkHelper; -import org.vivecraft.provider.ControllerType; -import org.vivecraft.provider.openvr_jna.control.VivecraftMovementInput; -import org.vivecraft.render.PlayerModelController; -import org.vivecraft.settings.VRSettings; - -import java.util.UUID; - -@Mixin(ClientPacketListener.class) -public class ClientPacketListenerVRMixin { - @Final - @Shadow private Minecraft minecraft; - - @Inject(at = @At("TAIL"), method = "") - public void init(Minecraft minecraft, Screen screen, Connection connection, GameProfile gameProfile, ClientTelemetryManager clientTelemetryManager, CallbackInfo ci) { - ClientDataHolder.getInstance().vrSettings.overrides.resetAll(); - ClientNetworkHelper.resetServerSettings(); - ClientNetworkHelper.displayedChatMessage = false; - } - - @Inject(at = @At("TAIL"), method = "handleLogin(Lnet/minecraft/network/protocol/game/ClientboundLoginPacket;)V") - public void login(ClientboundLoginPacket p_105030_, CallbackInfo callback) { - CommonNetworkHelper.vivePlayers.clear(); - ClientNetworkHelper.sendVersionInfo(); - ClientDataHolder.getInstance().vrPlayer.teleportWarningTimer = 200; - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/MultiPlayerGameMode;adjustPlayer(Lnet/minecraft/world/entity/player/Player;)V"), method = "handleLogin") - public void readdInput(ClientboundLoginPacket clientboundLoginPacket, CallbackInfo ci) { - this.minecraft.player.input = new VivecraftMovementInput(this.minecraft.options); - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/ClientTelemetryManager;onPlayerInfoReceived(Lnet/minecraft/world/level/GameType;Z)V"), method = "handleLogin(Lnet/minecraft/network/protocol/game/ClientboundLoginPacket;)V") - public void noTelemetry(ClientTelemetryManager instance, GameType gameType, boolean bl) { - return; - } - - @Inject(at = @At("TAIL"), method = "onDisconnect") - public void disconnect(Component component, CallbackInfo ci) { - ClientDataHolder.getInstance().vrPlayer.setTeleportSupported(false); - ClientDataHolder.getInstance().vrPlayer.setTeleportOverride(false); - ClientDataHolder.getInstance().vrSettings.overrides.resetAll(); - } - - @Inject(at = @At("TAIL"), method = "handleChat") - public void chat(ClientboundChatPacket clientboundChatPacket, CallbackInfo ci) { - Minecraft minecraft = Minecraft.getInstance(); - String s = ((PlayerExtension)minecraft.player).getLastMsg(); - ((PlayerExtension)minecraft.player).setLastMsg(null); - - if (minecraft.player == null || s == null || !clientboundChatPacket.getMessage().getString().contains(s)) { - ClientDataHolder dataholder = ClientDataHolder.getInstance(); - if (dataholder.vrSettings.chatNotifications != VRSettings.ChatNotifications.NONE) { - if ((dataholder.vrSettings.chatNotifications == VRSettings.ChatNotifications.HAPTIC || dataholder.vrSettings.chatNotifications == VRSettings.ChatNotifications.BOTH) && !dataholder.vrSettings.seated) { - dataholder.vr.triggerHapticPulse(ControllerType.LEFT, 0.2F, 1000.0F, 1.0F);} - - if (dataholder.vrSettings.chatNotifications == VRSettings.ChatNotifications.SOUND || dataholder.vrSettings.chatNotifications == VRSettings.ChatNotifications.BOTH) { - Vec3 vec3 = dataholder.vrPlayer.vrdata_world_pre.getController(1).getPosition(); - minecraft.level.playLocalSound(vec3.x(), vec3.y(), vec3.z(), Registry.SOUND_EVENT.get(new ResourceLocation(dataholder.vrSettings.chatNotificationSound)), SoundSource.NEUTRAL, 0.3F, 0.1F, false); - } - } - } - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;resetPos()V"), method = "handleRespawn") - public void sync(LocalPlayer instance) { - instance.resetPos(); - // ((PlayerExtension)instance).updateSyncFields(this.minecraft.player); - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/MultiPlayerGameMode;adjustPlayer(Lnet/minecraft/world/entity/player/Player;)V", shift = At.Shift.BEFORE), method = "handleRespawn") - public void readdInput2(ClientboundRespawnPacket clientboundRespawnPacket, CallbackInfo ci) { - ClientNetworkHelper.resetServerSettings(); - ClientNetworkHelper.sendVersionInfo(); - ClientDataHolder.getInstance().vrPlayer.teleportWarningTimer = 200; - this.minecraft.player.input = new VivecraftMovementInput(this.minecraft.options); - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V", ordinal = 0, shift = At.Shift.AFTER), method = "handleRespawn(Lnet/minecraft/network/protocol/game/ClientboundRespawnPacket;)V") - public void respawn(ClientboundRespawnPacket packet, CallbackInfo callback) { - ClientDataHolder.getInstance().vrSettings.overrides.resetAll(); - } - - @Inject(at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/network/protocol/game/ClientboundCustomPayloadPacket;getData()Lnet/minecraft/network/FriendlyByteBuf;"), method = "handleCustomPayload(Lnet/minecraft/network/protocol/game/ClientboundCustomPayloadPacket;)V", cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD) - public void handlepacket(ClientboundCustomPayloadPacket p_105004_, CallbackInfo info, ResourceLocation resourcelocation, FriendlyByteBuf friendlybytebuf) { - ClientDataHolder dataholder = ClientDataHolder.getInstance(); - if (resourcelocation.getNamespace().equalsIgnoreCase("vivecraft")) { - if (resourcelocation.getPath().equalsIgnoreCase("data")) { - byte b0 = friendlybytebuf.readByte(); - CommonNetworkHelper.PacketDiscriminators networkhelper$packetdiscriminators = CommonNetworkHelper.PacketDiscriminators.values()[b0]; - - switch (networkhelper$packetdiscriminators) { - case VERSION: - String s11 = friendlybytebuf.readUtf(1024); - dataholder.vrPlayer.setTeleportSupported(true); - dataholder.vrPlayer.teleportWarningTimer = -1; - - if (!ClientNetworkHelper.displayedChatMessage) { - ClientNetworkHelper.displayedChatMessage = true; - this.minecraft.gui.getChat().addMessage(new TranslatableComponent("vivecraft.messages.serverplugin", s11)); - } - if (dataholder.vrSettings.manualCalibration == -1.0F && !dataholder.vrSettings.seated) { - this.minecraft.gui.getChat().addMessage(new TranslatableComponent("vivecraft.messages.calibrateheight")); - } - - break; - - case REQUESTDATA: - ClientNetworkHelper.serverWantsData = true; - break; - - case CLIMBING: - ClientNetworkHelper.serverAllowsClimbey = friendlybytebuf.readBoolean(); - - if (friendlybytebuf.readableBytes() > 0) { - dataholder.climbTracker.serverblockmode = friendlybytebuf.readByte(); - dataholder.climbTracker.blocklist.clear(); - - while (friendlybytebuf.readableBytes() > 0) { - String s12 = friendlybytebuf.readUtf(16384); - Block block = Registry.BLOCK.get(new ResourceLocation(s12)); - - if (block != null) { - dataholder.climbTracker.blocklist.add(block); - } - } - } - - break; - - case TELEPORT: - ClientNetworkHelper.serverSupportsDirectTeleport = true; - break; - - case UBERPACKET: - Long olong = friendlybytebuf.readLong(); - Long olong1 = friendlybytebuf.readLong(); - byte[] abyte = new byte[29]; - byte[] abyte1 = new byte[29]; - byte[] abyte2 = new byte[29]; - friendlybytebuf.readBytes(29).getBytes(0, abyte); - friendlybytebuf.readBytes(29).getBytes(0, abyte1); - friendlybytebuf.readBytes(29).getBytes(0, abyte2); - UUID uuid2 = new UUID(olong, olong1); - float f3 = 1.0F; - float f4 = 1.0F; - - if (friendlybytebuf.isReadable()) { - f3 = friendlybytebuf.readFloat(); - } - - if (friendlybytebuf.isReadable()) { - f4 = friendlybytebuf.readFloat(); - } - - PlayerModelController.getInstance().Update(uuid2, abyte, abyte1, abyte2, f3, f4); - break; - - case SETTING_OVERRIDE: - while (friendlybytebuf.readableBytes() > 0) { - String s13 = friendlybytebuf.readUtf(16384); - String s14 = friendlybytebuf.readUtf(16384); - String[] astring = s13.split("\\.", 2); - - if (dataholder.vrSettings.overrides.hasSetting(astring[0])) { - VRSettings.ServerOverrides.Setting vrsettings$serveroverrides$setting = dataholder.vrSettings.overrides.getSetting(astring[0]); - - try { - if (astring.length > 1) { - String s15 = astring[1]; - switch (s15) { - case "min": - vrsettings$serveroverrides$setting.setValueMin(Float.parseFloat(s14)); - break; - - case "max": - vrsettings$serveroverrides$setting.setValueMax(Float.parseFloat(s14)); - } - } - else { - Object object = vrsettings$serveroverrides$setting.getOriginalValue(); - - if (object instanceof Boolean) { - vrsettings$serveroverrides$setting.setValue(s14.equals("true")); - } - else if (!(object instanceof Integer) && !(object instanceof Byte) && !(object instanceof Short)) { - if (!(object instanceof Float) && !(object instanceof Double)) { - vrsettings$serveroverrides$setting.setValue(s14); - } - else { - vrsettings$serveroverrides$setting.setValue(Float.parseFloat(s14)); - } - } - else { - vrsettings$serveroverrides$setting.setValue(Integer.parseInt(s14)); - } - } - - System.out.println("Server setting override: " + s13 + " = " + s14); - } - catch (Exception exception) { - exception.printStackTrace(); - } - } - } - - break; - - case CRAWL: - ClientNetworkHelper.serverAllowsCrawling = true; - } - } - if (friendlybytebuf != null) { - friendlybytebuf.release(); - } - info.cancel(); - } - } -} diff --git a/common/src/main/java/org/vivecraft/mixin/client/player/AbstractClientPlayer.java.patch b/common/src/main/java/org/vivecraft/mixin/client/player/AbstractClientPlayer.java.patch deleted file mode 100644 index 03fbecd82..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/player/AbstractClientPlayer.java.patch +++ /dev/null @@ -1,53 +0,0 @@ ---- a/net/minecraft/client/player/AbstractClientPlayer.java -+++ b/net/minecraft/client/player/AbstractClientPlayer.java -@@ -25,6 +25,7 @@ - import net.optifine.player.CapeUtils; - import net.optifine.player.PlayerConfigurations; - import net.optifine.reflect.Reflector; -+import org.vivecraft.api.PatreonReceiver; - - public abstract class AbstractClientPlayer extends Player - { -@@ -69,6 +70,7 @@ - - CapeUtils.downloadCape(this); - PlayerConfigurations.getPlayerConfiguration(this); -+ PatreonReceiver.addPlayerInfo(this); - } - - public boolean isSpectator() -@@ -228,9 +230,9 @@ - return this.locationOfCape; - } - -- public void setLocationOfCape(ResourceLocation locationOfCape) -+ public void setLocationOfCape(ResourceLocation p_setLocationOfCape_1_) - { -- this.locationOfCape = locationOfCape; -+ this.locationOfCape = p_setLocationOfCape_1_; - } - - public boolean hasElytraCape() -@@ -247,9 +249,9 @@ - } - } - -- public void setElytraOfCape(boolean elytraOfCape) -+ public void setElytraOfCape(boolean p_setElytraOfCape_1_) - { -- this.elytraOfCape = elytraOfCape; -+ this.elytraOfCape = p_setElytraOfCape_1_; - } - - public boolean isElytraOfCape() -@@ -262,8 +264,8 @@ - return this.reloadCapeTimeMs; - } - -- public void setReloadCapeTimeMs(long reloadCapeTimeMs) -+ public void setReloadCapeTimeMs(long p_setReloadCapeTimeMs_1_) - { -- this.reloadCapeTimeMs = reloadCapeTimeMs; -+ this.reloadCapeTimeMs = p_setReloadCapeTimeMs_1_; - } - } diff --git a/common/src/main/java/org/vivecraft/mixin/client/player/AbstractClientPlayerMixin.java b/common/src/main/java/org/vivecraft/mixin/client/player/AbstractClientPlayerMixin.java index 7fd87c9ea..50dec8a0f 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/player/AbstractClientPlayerMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client/player/AbstractClientPlayerMixin.java @@ -7,7 +7,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.api.PatreonReceiver; +import org.vivecraft.client.network.PatreonReceiver; @Mixin(AbstractClientPlayer.class) public class AbstractClientPlayerMixin { diff --git a/common/src/main/java/org/vivecraft/mixin/client/player/LocalPlayer.java.patch b/common/src/main/java/org/vivecraft/mixin/client/player/LocalPlayer.java.patch deleted file mode 100644 index 50a38f895..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/player/LocalPlayer.java.patch +++ /dev/null @@ -1,901 +0,0 @@ ---- a/net/minecraft/client/player/LocalPlayer.java -+++ b/net/minecraft/client/player/LocalPlayer.java -@@ -1,12 +1,24 @@ - package net.minecraft.client.player; - - import com.google.common.collect.Lists; -+import io.netty.buffer.ByteBuf; -+import io.netty.buffer.Unpooled; -+import java.util.HashMap; - import java.util.Iterator; - import java.util.List; - import java.util.Objects; - import java.util.UUID; - import java.util.stream.StreamSupport; - import javax.annotation.Nullable; -+ -+import org.apache.commons.lang3.tuple.Pair; -+import org.vivecraft.api.NetworkHelper; -+import org.vivecraft.gameplay.VRPlayer; -+import org.vivecraft.physicalinventory.TransactionMutex; -+import org.vivecraft.render.VRFirstPersonArmSwing; -+import org.vivecraft.utils.external.jinfinadeck; -+import org.vivecraft.utils.external.jkatvr; -+ - import net.minecraft.client.ClientRecipeBook; - import net.minecraft.client.Minecraft; - import net.minecraft.client.gui.screens.DeathScreen; -@@ -18,6 +30,7 @@ - import net.minecraft.client.gui.screens.inventory.MinecartCommandBlockEditScreen; - import net.minecraft.client.gui.screens.inventory.SignEditScreen; - import net.minecraft.client.gui.screens.inventory.StructureBlockEditScreen; -+import net.minecraft.client.main.Main; - import net.minecraft.client.multiplayer.ClientLevel; - import net.minecraft.client.multiplayer.ClientPacketListener; - import net.minecraft.client.resources.sounds.AmbientSoundHandler; -@@ -30,11 +43,13 @@ - import net.minecraft.client.resources.sounds.UnderwaterAmbientSoundInstances; - import net.minecraft.core.BlockPos; - import net.minecraft.core.Direction; -+import net.minecraft.core.particles.ItemParticleOption; - import net.minecraft.core.particles.ParticleTypes; - import net.minecraft.network.chat.Component; - import net.minecraft.network.protocol.game.ServerboundChatPacket; - import net.minecraft.network.protocol.game.ServerboundClientCommandPacket; - import net.minecraft.network.protocol.game.ServerboundContainerClosePacket; -+import net.minecraft.network.protocol.game.ServerboundCustomPayloadPacket; - import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket; - import net.minecraft.network.protocol.game.ServerboundMoveVehiclePacket; - import net.minecraft.network.protocol.game.ServerboundPlayerAbilitiesPacket; -@@ -67,8 +82,13 @@ - import net.minecraft.world.item.ElytraItem; - import net.minecraft.world.item.ItemStack; - import net.minecraft.world.item.Items; -+import net.minecraft.world.item.UseAnim; - import net.minecraft.world.item.crafting.Recipe; - import net.minecraft.world.level.BaseCommandBlock; -+import net.minecraft.world.level.Level; -+import net.minecraft.world.level.block.Block; -+import net.minecraft.world.level.block.Blocks; -+import net.minecraft.world.level.block.SoundType; - import net.minecraft.world.level.block.entity.CommandBlockEntity; - import net.minecraft.world.level.block.entity.JigsawBlockEntity; - import net.minecraft.world.level.block.entity.SignBlockEntity; -@@ -79,6 +99,7 @@ - import net.minecraft.world.phys.Vec3; - import net.minecraft.world.phys.shapes.CollisionContext; - import net.minecraft.world.phys.shapes.VoxelShape; -+import net.optifine.reflect.Reflector; - - public class LocalPlayer extends AbstractClientPlayer - { -@@ -109,6 +130,13 @@ - public Input input; - protected final Minecraft minecraft; - protected int sprintTriggerTime; -+ public int movementTeleportTimer; -+ public boolean initFromServer; -+ public boolean teleported; -+ public double additionX = 0.0D; -+ public double additionZ = 0.0D; -+ public double additionY = 0.0D; -+ public final float PIOVER180 = ((float)Math.PI / 180F); - public int sprintTime; - public float yBob; - public float xBob; -@@ -127,6 +155,10 @@ - private boolean wasFallFlying; - private int waterVisionTime; - private boolean showDeathScreen = true; -+ HashMap, TransactionMutex> pendingTransactions = new HashMap<>(); -+ private boolean snapReq = false; -+ public String lastMsg = null; -+ private Vec3 moveMulIn; - - public LocalPlayer(Minecraft pMinecraft, ClientLevel pClientLevel, ClientPacketListener pConnection, StatsCounter pStats, ClientRecipeBook pRecipeBook, boolean pWasShiftKeyDown, boolean pWasSprinting) - { -@@ -142,6 +174,102 @@ - this.ambientSoundHandlers.add(new BiomeAmbientSoundsHandler(this, pMinecraft.getSoundManager(), pClientLevel.getBiomeManager())); - } - -+ public void setItemInUseClient(ItemStack item, InteractionHand hand) -+ { -+ this.useItem = item; -+ -+ if (item != ItemStack.EMPTY) -+ { -+ this.startedUsingItem = true; -+ this.usingItemHand = hand; -+ } -+ else -+ { -+ this.startedUsingItem = false; -+ this.usingItemHand = hand; -+ } -+ } -+ -+ public void setItemInUseCountClient(int count) -+ { -+ this.useItemRemaining = count; -+ } -+ -+ //physical inventory in shambles -+// public boolean windowClickSynced(final int windowId, int slotId, int mouseButton, ClickType type, final long timeout) -+// { -+// final short short1 = this.containerMenu.backup(this.inventory); -+// ItemStack itemstack = this.containerMenu.clicked(slotId, mouseButton, type, this); -+// final TransactionMutex transactionmutex = new TransactionMutex(); -+// Thread thread = new Thread(this.minecraft.backgroundThreadGroup, new Runnable() -+// { -+// public void run() -+// { -+// try -+// { -+// Thread.sleep(timeout); -+// -+// synchronized (transactionmutex) -+// { -+// if (transactionmutex.consumed) -+// { -+// return; -+// } -+// -+// transactionmutex.approved = false; -+// transactionmutex.consumed = true; -+// LocalPlayer.this.pendingTransactions.remove(Pair.of(short1, windowId)); -+// transactionmutex.notifyAll(); -+// LogManager.getLogger().warn("Timeout on window operation " + short1); -+// } -+// } -+// catch (InterruptedException interruptedexception1) -+// { -+// } -+// } -+// }); -+// transactionmutex.watchdog = thread; -+// this.pendingTransactions.put(Pair.of(short1, windowId), transactionmutex); -+// -+// try -+// { -+// synchronized (transactionmutex) -+// { -+// this.connection.send(new ServerboundContainerClickPacket(windowId, slotId, mouseButton, type, itemstack, short1)); -+// thread.start(); -+// transactionmutex.wait(); -+// return transactionmutex.approved; -+// } -+// } -+// catch (InterruptedException interruptedexception) -+// { -+// interruptedexception.printStackTrace(); -+// return false; -+// } -+// } -+ -+ public void confirmTransaction(short transactionID, int windowId, boolean approved) -+ { -+ TransactionMutex transactionmutex = this.pendingTransactions.get(Pair.of(transactionID, windowId)); -+ -+ if (transactionmutex != null) -+ { -+ synchronized (transactionmutex) -+ { -+ if (transactionmutex.consumed) -+ { -+ return; -+ } -+ -+ transactionmutex.watchdog.interrupt(); -+ this.pendingTransactions.remove(Pair.of(transactionID, windowId)); -+ transactionmutex.approved = approved; -+ transactionmutex.consumed = true; -+ transactionmutex.notifyAll(); -+ } -+ } -+ } -+ - public boolean hurt(DamageSource pSource, float pAmount) - { - return false; -@@ -172,6 +300,8 @@ - this.setYHeadRot(pEntity.getYRot()); - } - -+ this.minecraft.vehicleTracker.onStartRiding(pEntity, this); -+ this.snapReq = true; - return true; - } - } -@@ -180,6 +310,7 @@ - { - super.removeVehicle(); - this.handsBusy = false; -+ this.minecraft.vehicleTracker.onStopRiding(this); - } - - public float getViewXRot(float pPartialTick) -@@ -197,6 +328,8 @@ - if (this.level.hasChunkAt(this.getBlockX(), this.getBlockZ())) - { - super.tick(); -+ NetworkHelper.overridePose(this); -+ this.minecraft.vrPlayer.doPermanantLookOverride(this, this.minecraft.vrPlayer.vrdata_world_pre); - - if (this.isPassenger()) - { -@@ -265,7 +398,20 @@ - boolean flag1 = d4 * d4 + d0 * d0 + d1 * d1 > 9.0E-4D || this.positionReminder >= 20; - boolean flag2 = d2 != 0.0D || d3 != 0.0D; - -- if (this.isPassenger()) -+ if (this.teleported) -+ { -+ this.teleported = false; -+ flag2 = true; -+ ByteBuf bytebuf = Unpooled.buffer(); -+ bytebuf.writeFloat((float)this.getX()); -+ bytebuf.writeFloat((float)this.getY()); -+ bytebuf.writeFloat((float)this.getZ()); -+ byte[] abyte = new byte[bytebuf.readableBytes()]; -+ bytebuf.readBytes(abyte); -+ ServerboundCustomPayloadPacket serverboundcustompayloadpacket = NetworkHelper.getVivecraftClientPacket(NetworkHelper.PacketDiscriminators.TELEPORT, abyte); -+ this.connection.send(serverboundcustompayloadpacket); -+ } -+ else if (this.isPassenger()) - { - Vec3 vec3 = this.getDeltaMovement(); - this.connection.send(new ServerboundMovePlayerPacket.PosRot(vec3.x, -999.0D, vec3.z, this.getYRot(), this.getXRot(), this.onGround)); -@@ -303,6 +449,12 @@ - } - - this.lastOnGround = this.onGround; -+ -+ if (this.dataholder.vrSettings.walkUpBlocks) -+ { -+ this.minecraft.options.autoJump = false; -+ } -+ - this.autoJumpEnabled = this.minecraft.options.autoJump; - } - } -@@ -318,10 +470,29 @@ - public void chat(String pMessage) - { - this.connection.send(new ServerboundChatPacket(pMessage)); -+ this.lastMsg = pMessage; -+ } -+ -+ public void swingArm(InteractionHand hand, VRFirstPersonArmSwing animation) -+ { -+ this.minecraft.getItemInHandRenderer().swingType = animation; -+ this.swing(hand); - } - - public void swing(InteractionHand pHand) - { -+ if (!this.swinging) -+ { -+ if (this.minecraft.hitResult != null && this.minecraft.hitResult.getType() != net.minecraft.world.phys.HitResult.Type.MISS) -+ { -+ this.minecraft.getItemInHandRenderer().xdist = (float)this.minecraft.hitResult.getLocation().subtract(this.minecraft.vrPlayer.vrdata_world_pre.getController(pHand.ordinal()).getPosition()).length(); -+ } -+ else -+ { -+ this.minecraft.getItemInHandRenderer().xdist = 0.0F; -+ } -+ } -+ - super.swing(pHand); - this.connection.send(new ServerboundSwingPacket(pHand)); - } -@@ -558,7 +729,23 @@ - - public void playSound(SoundEvent pSound, float pVolume, float pPitch) - { -- this.level.playLocalSound(this.getX(), this.getY(), this.getZ(), pSound, this.getSoundSource(), pVolume, pPitch, false); -+ SoundSource soundsource = this.getSoundSource(); -+ -+ if (Reflector.ForgeEventFactory_onPlaySoundAtEntity.exists()) -+ { -+ Object object = Reflector.ForgeEventFactory_onPlaySoundAtEntity.call(this, pSound, this.getSoundSource(), pVolume, pPitch); -+ -+ if (Reflector.callBoolean(object, Reflector.Event_isCanceled) || Reflector.call(object, Reflector.PlaySoundAtEntityEvent_getSound) == null) -+ { -+ return; -+ } -+ -+ pSound = (SoundEvent)Reflector.call(object, Reflector.PlaySoundAtEntityEvent_getSound); -+ soundsource = (SoundSource)Reflector.call(object, Reflector.PlaySoundAtEntityEvent_getCategory); -+ pVolume = Reflector.callFloat(object, Reflector.PlaySoundAtEntityEvent_getVolume); -+ } -+ -+ this.level.playLocalSound(this.getX(), this.getY(), this.getZ(), pSound, soundsource, pVolume, pPitch, false); - } - - public void playNotifySound(SoundEvent p_108655_, SoundSource p_108656_, float p_108657_, float p_108658_) -@@ -753,6 +940,7 @@ - boolean flag2 = this.hasEnoughImpulseToStartSprinting(); - this.crouching = !this.getAbilities().flying && !this.isSwimming() && this.canEnterPose(Pose.CROUCHING) && (this.isShiftKeyDown() || !this.isSleeping() && !this.canEnterPose(Pose.STANDING)); - this.input.tick(this.isMovingSlowly()); -+ Reflector.call(Reflector.ForgeHooksClient_onInputUpdate, this, this.input); - this.minecraft.getTutorial().onInput(this.input); - - if (this.isUsingItem() && !this.isPassenger()) -@@ -821,7 +1009,7 @@ - } - } - -- boolean flag7 = false; -+ boolean flag8 = false; - - if (this.getAbilities().mayfly) - { -@@ -830,7 +1018,7 @@ - if (!this.getAbilities().flying) - { - this.getAbilities().flying = true; -- flag7 = true; -+ flag8 = true; - this.onUpdateAbilities(); - } - } -@@ -843,21 +1031,28 @@ - else if (!this.isSwimming()) - { - this.getAbilities().flying = !this.getAbilities().flying; -- flag7 = true; -+ flag8 = true; - this.onUpdateAbilities(); - this.jumpTriggerTime = 0; - } - } - } - -- if (this.input.jumping && !flag7 && !flag && !this.getAbilities().flying && !this.isPassenger() && !this.onClimbable()) -+ if (this.input.jumping && !flag8 && !flag && !this.getAbilities().flying && !this.isPassenger() && !this.onClimbable()) - { -- ItemStack itemstack = this.getItemBySlot(EquipmentSlot.CHEST); -- -- if (itemstack.is(Items.ELYTRA) && ElytraItem.isFlyEnabled(itemstack) && this.tryToStartFallFlying()) -+ ItemStack itemstack = this.getItemBySlot(EquipmentSlot.CHEST); -+ -+ //Forge -+ boolean eflag = itemstack.is(Items.ELYTRA) && ElytraItem.isFlyEnabled(itemstack); -+ if(Reflector.IForgeItemStack_canElytraFly.exists()) -+ eflag = Reflector.callBoolean(itemstack, Reflector.IForgeItemStack_canElytraFly, this); -+ -+ //Forge -+ if (eflag && this.tryToStartFallFlying()) - { - this.connection.send(new ServerboundPlayerCommandPacket(this, ServerboundPlayerCommandPacket.Action.START_FALL_FLYING)); - } -+ - } - - this.wasFallFlying = this.isFallFlying(); -@@ -943,6 +1138,7 @@ - } - - super.aiStep(); -+ this.minecraft.vrPlayer.tick(this, this.minecraft, this.random); - - if (this.onGround && this.getAbilities().flying && !this.minecraft.gameMode.isAlwaysFlying()) - { -@@ -1048,10 +1244,67 @@ - - public void move(MoverType pType, Vec3 pPos) - { -- double d0 = this.getX(); -- double d1 = this.getZ(); -- super.move(pType, pPos); -- this.updateAutoJump((float)(this.getX() - d0), (float)(this.getZ() - d1)); -+ this.moveMulIn = this.stuckSpeedMultiplier; -+ -+ if (pPos.length() != 0.0D && !this.isPassenger()) -+ { -+ boolean flag = VRPlayer.get().getFreeMove(); -+ boolean flag1 = flag || Minecraft.getInstance().vrSettings.simulateFalling && !this.onClimbable() && !this.isShiftKeyDown(); -+ -+ if (this.minecraft.climbTracker.isActive(this) && (flag || this.minecraft.climbTracker.isGrabbingLadder())) -+ { -+ flag1 = true; -+ } -+ -+ Vec3 vec3 = VRPlayer.get().roomOrigin; -+ -+ if ((this.minecraft.climbTracker.isGrabbingLadder() || flag || this.minecraft.swimTracker.isActive(this)) && (this.zza != 0.0F || this.isFallFlying() || Math.abs(this.getDeltaMovement().x) > 0.01D || Math.abs(this.getDeltaMovement().z) > 0.01D)) -+ { -+ double d0 = vec3.x - this.getX(); -+ double d1 = vec3.z - this.getZ(); -+ double d2 = this.getX(); -+ double d3 = this.getZ(); -+ super.move(pType, pPos); -+ -+ if (this.dataholder.vrSettings.walkUpBlocks) -+ { -+ this.maxUpStep = this.getMuhJumpFactor() == 1.0F ? 1.0F : 0.6F; -+ } -+ else -+ { -+ this.maxUpStep = 0.6F; -+ this.updateAutoJump((float)(this.getX() - d2), (float)(this.getZ() - d3)); -+ } -+ -+ double d4 = this.getY() + this.getRoomYOffsetFromPose(); -+ VRPlayer.get().setRoomOrigin(this.getX() + d0, d4, this.getZ() + d1, false); -+ } -+ else if (flag1) -+ { -+ super.move(pType, new Vec3(0.0D, pPos.y, 0.0D)); -+ VRPlayer.get().setRoomOrigin(VRPlayer.get().roomOrigin.x, this.getY() + this.getRoomYOffsetFromPose(), VRPlayer.get().roomOrigin.z, false); -+ } -+ else -+ { -+ this.onGround = true; -+ } -+ } -+ else -+ { -+ super.move(pType, pPos); -+ } -+ } -+ -+ public double getRoomYOffsetFromPose() -+ { -+ double d0 = 0.0D; -+ -+ if (this.getPose() == Pose.FALL_FLYING || this.getPose() == Pose.SPIN_ATTACK || this.getPose() == Pose.SWIMMING && !this.minecraft.crawlTracker.crawlsteresis) -+ { -+ d0 = -1.2D; -+ } -+ -+ return d0; - } - - public boolean isAutoJumpEnabled() -@@ -1068,14 +1321,18 @@ - Vec3 vec32 = new Vec3((double)pMovementX, 0.0D, (double)pMovementZ); - float f = this.getSpeed(); - float f1 = (float)vec32.lengthSqr(); -- -+ //VIVE -+ float yaw = Minecraft.getInstance().vrPlayer.vrdata_world_pre.getBodyYaw(); -+ - if (f1 <= 0.001F) - { - Vec2 vec2 = this.input.getMoveVector(); - float f2 = f * vec2.x; - float f3 = f * vec2.y; -- float f4 = Mth.sin(this.getYRot() * ((float)Math.PI / 180F)); -- float f5 = Mth.cos(this.getYRot() * ((float)Math.PI / 180F)); -+ //float f4 = Mth.sin(this.getYRot() * ((float)Math.PI / 180F)); -+ //float f5 = Mth.cos(this.getYRot() * ((float)Math.PI / 180F)); -+ float f4 = Mth.sin(yaw * 0.017453292F); -+ float f5 = Mth.cos(yaw * 0.017453292F); - vec32 = new Vec3((double)(f2 * f5 - f3 * f4), vec32.y, (double)(f3 * f5 + f2 * f4)); - f1 = (float)vec32.lengthSqr(); - -@@ -1085,12 +1342,12 @@ - } - } - -- float f12 = Mth.fastInvSqrt(f1); -- Vec3 vec312 = vec32.scale((double)f12); -+ float f13 = Mth.fastInvSqrt(f1); -+ Vec3 vec312 = vec32.scale((double)f13); - Vec3 vec313 = this.getForward(); -- float f13 = (float)(vec313.x * vec312.x + vec313.z * vec312.z); -+ float f14 = (float)(vec313.x * vec312.x + vec313.z * vec312.z); - -- if (!(f13 < -0.15F)) -+ if (!(f14 < -0.15F)) - { - CollisionContext collisioncontext = CollisionContext.of(this); - BlockPos blockpos = new BlockPos(this.getX(), this.getBoundingBox().maxY, this.getZ()); -@@ -1111,7 +1368,7 @@ - f7 += (float)(this.getEffect(MobEffects.JUMP).getAmplifier() + 1) * 0.75F; - } - -- float f8 = Math.max(f * 7.0F, 1.0F / f12); -+ float f8 = Math.max(f * 7.0F, 1.0F / f13); - Vec3 vec34 = vec31.add(vec312.scale((double)f8)); - float f9 = this.getBbWidth(); - float f10 = this.getBbHeight(); -@@ -1137,11 +1394,11 @@ - - if (aabb1.intersects(vec37, vec38) || aabb1.intersects(vec39, vec310)) - { -- f11 = (float)aabb1.maxY; -+ f11 = (float)aabb1.maxY; - Vec3 vec311 = aabb1.getCenter(); - BlockPos blockpos1 = new BlockPos(vec311); - -- for (int i = 1; (float)i < f7; ++i) -+ for (int i = 1; (float)i < f8; ++i) - { - BlockPos blockpos2 = blockpos1.above(i); - BlockState blockstate2 = this.level.getBlockState(blockpos2); -@@ -1149,9 +1406,9 @@ - - if (!(voxelshape = blockstate2.getCollisionShape(this.level, blockpos2, collisioncontext)).isEmpty()) - { -- f11 = (float)voxelshape.max(Direction.Axis.Y) + (float)blockpos2.getY(); -+ f11 = (float)voxelshape.max(Direction.Axis.Y) + (float)blockpos2.getY(); - -- if ((double)f11 - this.getY() > (double)f7) -+ if ((double)f11 - this.getY() > (double)f8) - { - return; - } -@@ -1175,9 +1432,9 @@ - - if (f11 != Float.MIN_VALUE) - { -- float f14 = (float)((double)f11 - this.getY()); -+ float f15 = (float)((double)f11 - this.getY()); - -- if (!(f14 <= 0.5F) && !(f14 > f7)) -+ if (!(f15 <= 0.5F) && !(f15 > f8)) - { - this.autoJumpTime = 1; - } -@@ -1302,4 +1559,359 @@ - { - this.minecraft.getTutorial().onInventoryAction(p_172532_, p_172533_, p_172534_); - } -+ -+ public void moveTo(double pX, double p_20109_, double pY, float p_20111_, float pZ) -+ { -+ super.moveTo(pX, p_20109_, pY, p_20111_, pZ); -+ -+ if (this.initFromServer) -+ { -+ this.minecraft.vrPlayer.snapRoomOriginToPlayerEntity(this, false, false); -+ } -+ } -+ -+ public void absMoveTo(double pX, double p_19892_, double pY, float p_19894_, float pZ) -+ { -+ super.absMoveTo(pX, p_19892_, pY, p_19894_, pZ); -+ this.minecraft.vrPlayer.snapRoomOriginToPlayerEntity(this, false, false); -+ -+ if (!this.initFromServer) -+ { -+ this.moveTo(pX, p_19892_, pY, p_19894_, pZ); -+ this.initFromServer = true; -+ } -+ } -+ -+ public void setPos(double pX, double p_20211_, double pY) -+ { -+ double d0 = this.getX(); -+ double d1 = this.getY(); -+ double d2 = this.getZ(); -+ super.setPos(pX, p_20211_, pY); -+ double d3 = this.getX(); -+ double d4 = this.getY(); -+ double d5 = this.getZ(); -+ Entity entity = this.getVehicle(); -+ -+ if (this.isPassenger()) -+ { -+ Vec3 vec3 = this.minecraft.vehicleTracker.Premount_Pos_Room; -+ vec3 = vec3.yRot(this.minecraft.vrPlayer.vrdata_world_pre.rotation_radians); -+ pX = pX - vec3.x; -+ p_20211_ = this.minecraft.vehicleTracker.getVehicleFloor(entity, p_20211_); -+ pY = pY - vec3.z; -+ this.minecraft.vrPlayer.setRoomOrigin(pX, p_20211_, pY, pX + p_20211_ + pY == 0.0D); -+ } -+ else -+ { -+ Vec3 vec31 = Minecraft.getInstance().vrPlayer.roomOrigin; -+ VRPlayer.get().setRoomOrigin(vec31.x + (d3 - d0), vec31.y + (d4 - d1), vec31.z + (d5 - d2), pX + p_20211_ + pY == 0.0D); -+ } -+ } -+ -+ public void doDrag() -+ { -+ float f = 0.91F; -+ -+ if (this.onGround) -+ { -+ f = this.level.getBlockState(new BlockPos(this.getX(), this.getBoundingBox().minY - 1.0D, this.getZ())).getBlock().getFriction() * 0.91F; -+ } -+ -+ double d0 = (double)f; -+ double d1 = (double)f; -+ this.setDeltaMovement(this.getDeltaMovement().x / d0, this.getDeltaMovement().y, this.getDeltaMovement().z / d1); -+ double d2 = Minecraft.getInstance().vrSettings.inertiaFactor.getFactor(); -+ double d3 = this.getBoundedAddition(this.additionX); -+ double d4 = (double)f * d3 / (double)(1.0F - f); -+ double d5 = d4 / ((double)f * (d4 + d3 * d2)); -+ d0 = d0 * d5; -+ double d6 = this.getBoundedAddition(this.additionZ); -+ double d7 = (double)f * d6 / (double)(1.0F - f); -+ double d8 = d7 / ((double)f * (d7 + d6 * d2)); -+ d1 = d1 * d8; -+ this.setDeltaMovement(this.getDeltaMovement().x * d0, this.getDeltaMovement().y, this.getDeltaMovement().z * d1); -+ } -+ -+ public double getBoundedAddition(double orig) -+ { -+ return orig >= -1.0E-6D && orig <= 1.0E-6D ? 1.0E-6D : orig; -+ } -+ -+ public void moveRelative(float pAmount, Vec3 pRelative) -+ { -+ double d0 = pRelative.y; -+ double d1 = pRelative.x; -+ double d2 = pRelative.z; -+ VRPlayer vrplayer = this.minecraft.vrPlayer; -+ -+ if (vrplayer.getFreeMove()) -+ { -+ double d3 = d1 * d1 + d2 * d2; -+ double d4 = 0.0D; -+ double d5 = 0.0D; -+ double d6 = 0.0D; -+ double d7 = 1.0D; -+ -+ if (d3 >= (double)1.0E-4F || Main.katvr) -+ { -+ d3 = (double)Mth.sqrt((float) d3); -+ -+ if (d3 < 1.0D && !Main.katvr) -+ { -+ d3 = 1.0D; -+ } -+ -+ d3 = (double)pAmount / d3; -+ d1 = d1 * d3; -+ d2 = d2 * d3; -+ Vec3 vec3 = new Vec3(d1, 0.0D, d2); -+ VRPlayer vrplayer1 = this.minecraft.vrPlayer; -+ boolean flag = !this.isPassenger() && (this.getAbilities().flying || this.isSwimming()); -+ -+ if (Main.katvr) -+ { -+ jkatvr.query(); -+ d3 = (double)(jkatvr.getSpeed() * jkatvr.walkDirection() * this.dataholder.vrSettings.movementSpeedMultiplier); -+ vec3 = new Vec3(0.0D, 0.0D, d3); -+ -+ if (flag) -+ { -+ vec3 = vec3.xRot(vrplayer1.vrdata_world_pre.hmd.getPitch() * ((float)Math.PI / 180F)); -+ } -+ -+ vec3 = vec3.yRot(-jkatvr.getYaw() * ((float)Math.PI / 180F) + this.minecraft.vrPlayer.vrdata_world_pre.rotation_radians); -+ } -+ else if (Main.infinadeck) -+ { -+ jinfinadeck.query(); -+ d3 = (double)(jinfinadeck.getSpeed() * jinfinadeck.walkDirection() * this.dataholder.vrSettings.movementSpeedMultiplier); -+ vec3 = new Vec3(0.0D, 0.0D, d3); -+ -+ if (flag) -+ { -+ vec3 = vec3.xRot(vrplayer1.vrdata_world_pre.hmd.getPitch() * ((float)Math.PI / 180F)); -+ } -+ -+ vec3 = vec3.yRot(-jinfinadeck.getYaw() * ((float)Math.PI / 180F) + this.minecraft.vrPlayer.vrdata_world_pre.rotation_radians); -+ } -+ else if (this.dataholder.vrSettings.seated) -+ { -+ int j = 0; -+ -+ if (this.dataholder.vrSettings.seatedUseHMD) -+ { -+ j = 1; -+ } -+ -+ if (flag) -+ { -+ vec3 = vec3.xRot(vrplayer1.vrdata_world_pre.getController(j).getPitch() * ((float)Math.PI / 180F)); -+ } -+ -+ vec3 = vec3.yRot(-vrplayer1.vrdata_world_pre.getController(j).getYaw() * ((float)Math.PI / 180F)); -+ } -+ else -+ { -+ if (flag) -+ { -+ switch (this.dataholder.vrSettings.vrFreeMoveMode) -+ { -+ case CONTROLLER: -+ vec3 = vec3.xRot(vrplayer1.vrdata_world_pre.getController(1).getPitch() * ((float)Math.PI / 180F)); -+ break; -+ -+ case HMD: -+ case RUN_IN_PLACE: -+ case ROOM: -+ vec3 = vec3.xRot(vrplayer1.vrdata_world_pre.hmd.getPitch() * ((float)Math.PI / 180F)); -+ } -+ } -+ -+ if (this.minecraft.jumpTracker.isjumping()) -+ { -+ vec3 = vec3.yRot(-vrplayer1.vrdata_world_pre.hmd.getYaw() * ((float)Math.PI / 180F)); -+ } -+ else -+ { -+ switch (this.dataholder.vrSettings.vrFreeMoveMode) -+ { -+ case CONTROLLER: -+ vec3 = vec3.yRot(-vrplayer1.vrdata_world_pre.getController(1).getYaw() * ((float)Math.PI / 180F)); -+ break; -+ -+ case HMD: -+ vec3 = vec3.yRot(-vrplayer1.vrdata_world_pre.hmd.getYaw() * ((float)Math.PI / 180F)); -+ break; -+ -+ case RUN_IN_PLACE: -+ vec3 = vec3.yRot((float)(-this.minecraft.runTracker.getYaw() * (double)((float)Math.PI / 180F))); -+ vec3 = vec3.scale(this.minecraft.runTracker.getSpeed()); -+ -+ case ROOM: -+ vec3 = vec3.yRot((180.0F + this.dataholder.vrSettings.worldRotation) * ((float)Math.PI / 180F)); -+ } -+ } -+ } -+ -+ d4 = vec3.x; -+ d6 = vec3.y; -+ d5 = vec3.z; -+ -+ if (!this.getAbilities().flying && !this.wasTouchingWater) -+ { -+ d7 = Minecraft.getInstance().vrSettings.inertiaFactor.getFactor(); -+ } -+ -+ float f = 1.0F; -+ -+ if (this.getAbilities().flying) -+ { -+ f = 5.0F; -+ } -+ -+ this.setDeltaMovement(this.getDeltaMovement().x + d4 * d7, this.getDeltaMovement().y + d6 * (double)f, this.getDeltaMovement().z + d5 * d7); -+ this.additionX = d4; -+ this.additionZ = d5; -+ } -+ -+ if (!this.getAbilities().flying && !this.wasTouchingWater) -+ { -+ this.doDrag(); -+ } -+ } -+ } -+ -+ private boolean isThePlayer() -+ { -+ return this == Minecraft.getInstance().player; -+ } -+ -+ protected void triggerItemUseEffects(ItemStack pStack, int pCount) -+ { -+ if (!pStack.isEmpty() && this.isUsingItem()) -+ { -+ if (pStack.getUseAnimation() == UseAnim.DRINK) -+ { -+ this.playSound(this.getDrinkingSound(pStack), 0.5F, this.level.random.nextFloat() * 0.1F + 0.9F); -+ } -+ -+ if (pStack.getUseAnimation() == UseAnim.EAT) -+ { -+ this.addItemParticles(pStack, pCount); -+ this.playSound(this.getEatingSound(pStack), 0.5F + 0.5F * (float)this.random.nextInt(2), (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F); -+ } -+ } -+ } -+ -+ private void addItemParticles(ItemStack stack, int count) -+ { -+ for (int i = 0; i < count; ++i) -+ { -+ Vec3 vec3 = new Vec3(((double)this.random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D); -+ vec3 = vec3.xRot(-this.getXRot() * ((float)Math.PI / 180F)); -+ vec3 = vec3.yRot(-this.getYRot() * ((float)Math.PI / 180F)); -+ double d0 = (double)(-this.random.nextFloat()) * 0.6D - 0.3D; -+ new Vec3(((double)this.random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D); -+ InteractionHand interactionhand = this.getUsedItemHand(); -+ Vec3 vector3d1; -+ -+ if (interactionhand == InteractionHand.MAIN_HAND) -+ { -+ vector3d1 = Minecraft.getInstance().vrPlayer.vrdata_world_pre.getController(0).getPosition(); -+ } -+ else -+ { -+ vector3d1 = Minecraft.getInstance().vrPlayer.vrdata_world_pre.getController(1).getPosition(); -+ } -+ -+ this.level.addParticle(new ItemParticleOption(ParticleTypes.ITEM, stack), vector3d1.x, vector3d1.y, vector3d1.z, vec3.x, vec3.y + 0.05D, vec3.z); -+ } -+ } -+ -+ public boolean isClimbeyJumpEquipped() -+ { -+ return this.getItemBySlot(EquipmentSlot.FEET) != null && this.minecraft.jumpTracker.isBoots(this.getItemBySlot(EquipmentSlot.FEET)); -+ } -+ -+ public boolean isClimbeyClimbEquipped() -+ { -+ if (this.getMainHandItem() != null && this.minecraft.climbTracker.isClaws(this.getMainHandItem())) -+ { -+ return true; -+ } -+ else -+ { -+ return this.getOffhandItem() != null && this.minecraft.climbTracker.isClaws(this.getOffhandItem()); -+ } -+ } -+ -+ public void die(DamageSource pCause) -+ { -+ super.die(pCause); -+ this.minecraft.vr.triggerHapticPulse(0, 2000); -+ this.minecraft.vr.triggerHapticPulse(1, 2000); -+ } -+ -+ public void stepSound(BlockPos blockforNoise, Vec3 soundPos) -+ { -+ BlockState blockstate = this.level.getBlockState(blockforNoise); -+ Block block = blockstate.getBlock(); -+ SoundType soundtype = block.getSoundType(blockstate); -+ BlockState blockstate1 = this.level.getBlockState(blockforNoise.above()); -+ -+ if (blockstate1.getBlock() == Blocks.SNOW) -+ { -+ soundtype = Blocks.SNOW.getSoundType(blockstate1); -+ } -+ -+ float f = soundtype.getVolume(); -+ float f1 = soundtype.getPitch(); -+ SoundEvent soundevent = soundtype.getStepSound(); -+ -+ if (!this.isSilent() && !block.defaultBlockState().getMaterial().isLiquid()) -+ { -+ this.level.playSound((LocalPlayer)null, soundPos.x, soundPos.y, soundPos.z, soundevent, this.getSoundSource(), f, f1); -+ } -+ } -+ -+ public void updateSyncFields(LocalPlayer old) -+ { -+ this.xLast = old.xLast; -+ this.yLast1 = old.yLast1; -+ this.zLast = old.zLast; -+ this.yRotLast = old.yRotLast; -+ this.xRotLast = old.xRotLast; -+ this.lastOnGround = old.lastOnGround; -+ this.wasShiftKeyDown = old.wasShiftKeyDown; -+ this.wasSprinting = old.wasSprinting; -+ this.positionReminder = old.positionReminder; -+ } -+ -+ public ItemStack eat(Level p_36185_, ItemStack p_36186_) -+ { -+ if (p_36186_.isEdible() && this == Minecraft.getInstance().player && p_36186_.getHoverName().getString().equals("EAT ME")) -+ { -+ Minecraft.getInstance().vrPlayer.wfMode = 0.5D; -+ Minecraft.getInstance().vrPlayer.wfCount = 400; -+ } -+ -+ return super.eat(p_36185_, p_36186_); -+ } -+ -+ public float getMuhJumpFactor() -+ { -+ return this.moveMulIn.lengthSqr() > 0.0D ? (float)((double)this.getBlockJumpFactor() * this.moveMulIn.y) : this.getBlockJumpFactor(); -+ } -+ -+ public float getMuhSpeedFactor() -+ { -+ return this.moveMulIn.lengthSqr() > 0.0D ? (float)((double)this.getBlockSpeedFactor() * (this.moveMulIn.x + this.moveMulIn.z) / 2.0D) : this.getBlockSpeedFactor(); -+ } -+ -+ public void releaseUsingItem() -+ { -+ NetworkHelper.sendActiveHand((byte)this.getUsedItemHand().ordinal()); -+ super.releaseUsingItem(); -+ } - } diff --git a/common/src/main/java/org/vivecraft/mixin/client/player/LocalPlayerVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client/player/LocalPlayerVRMixin.java deleted file mode 100644 index 48c006bce..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/player/LocalPlayerVRMixin.java +++ /dev/null @@ -1,688 +0,0 @@ -package org.vivecraft.mixin.client.player; - -import net.minecraft.world.level.Level; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.api.CommonNetworkHelper; -import org.vivecraft.extensions.ItemInHandRendererExtension; -import org.vivecraft.extensions.PlayerExtension; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientPacketListener; -import net.minecraft.client.player.Input; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.network.protocol.game.ServerboundCustomPayloadPacket; -import net.minecraft.sounds.SoundEvent; -import net.minecraft.util.Mth; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.effect.MobEffects; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.SoundType; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec2; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.VoxelShape; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.vivecraft.api.ClientNetworkHelper; -import org.vivecraft.gameplay.VRPlayer; -import org.vivecraft.render.VRFirstPersonArmSwing; -import org.vivecraft.utils.external.jinfinadeck; -import org.vivecraft.utils.external.jkatvr; - -import com.mojang.authlib.GameProfile; - -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.player.AbstractClientPlayer; -import net.minecraft.client.player.LocalPlayer; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.MoverType; -import net.minecraft.world.entity.Pose; -import net.minecraft.world.phys.Vec3; - -import java.util.Iterator; -import java.util.stream.StreamSupport; - -@Mixin(LocalPlayer.class) -public abstract class LocalPlayerVRMixin extends AbstractClientPlayer implements PlayerExtension { - - @Unique - private Vec3 moveMulIn = Vec3.ZERO; - @Unique - private boolean initFromServer; - @Unique - private int movementTeleportTimer; - @Unique - public String lastMsg = null; - @Unique - private boolean snapReq; - @Unique - private boolean teleported; - @Unique - private double additionX; - @Unique - private double additionZ; - @Final - @Shadow - protected Minecraft minecraft; - @Shadow - private boolean startedUsingItem; - @Shadow - @Final - public ClientPacketListener connection; - private final ClientDataHolder dataholder = ClientDataHolder.getInstance(); - @Shadow - public double xLast; - @Shadow - public double yLast1; - @Shadow - public double zLast; - @Shadow - public float yRotLast; - @Shadow - public float xRotLast; - @Shadow - public boolean lastOnGround; - @Shadow - public boolean wasShiftKeyDown; - @Shadow - public boolean wasSprinting; - @Shadow - public int positionReminder; - @Shadow - private InteractionHand usingItemHand; - @Shadow - private int autoJumpTime; - @Shadow - public Input input; - - @Shadow - protected abstract void updateAutoJump(float f, float g); - - @Shadow - public abstract void swing(InteractionHand interactionHand); - - public LocalPlayerVRMixin(ClientLevel clientLevel, GameProfile gameProfile) { - super(clientLevel, gameProfile); - // TODO Auto-generated constructor stub - } - - @Inject(at = @At("TAIL"), method = "startRiding") - public void startRidingTracker(Entity entity, boolean bl, CallbackInfoReturnable cir) { - ClientDataHolder.getInstance().vehicleTracker.onStartRiding(entity, (LocalPlayer) (Object) this); - this.snapReq = true; - } - - @Inject(at = @At("TAIL"), method = "removeVehicle") - public void stopRidingTracker(CallbackInfo ci) { - ClientDataHolder.getInstance().vehicleTracker.onStopRiding((LocalPlayer) (Object) this); - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/AbstractClientPlayer;tick()V", shift = At.Shift.BEFORE), method = "tick") - public void overrideLookPre(CallbackInfo ci) { - ClientDataHolder.getInstance().vrPlayer.doPermanantLookOverride((LocalPlayer) (Object) this, ClientDataHolder.getInstance().vrPlayer.vrdata_world_pre); - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/AbstractClientPlayer;tick()V", shift = At.Shift.AFTER), method = "tick") - public void overridePose(CallbackInfo ci) { - ClientNetworkHelper.overridePose((LocalPlayer) (Object) this); - ClientDataHolder.getInstance().vrPlayer.doPermanantLookOverride((LocalPlayer) (Object) this, ClientDataHolder.getInstance().vrPlayer.vrdata_world_pre); - } - - /* TODO: not working, is this needed? - //TODO verify - @ModifyVariable(at = @At("STORE"), ordinal = 3, method = "sendPosition") - public boolean changeFlag(boolean b) { - return this.teleported || b; - } - */ - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;isPassenger()Z", shift = At.Shift.BEFORE), method = "sendPosition") - public void passenger(CallbackInfo ci) { - if (this.teleported) { - this.teleported = false; - // flag2 = true; TODO? - ByteBuf bytebuf = Unpooled.buffer(); - bytebuf.writeFloat((float) this.getX()); - bytebuf.writeFloat((float) this.getY()); - bytebuf.writeFloat((float) this.getZ()); - byte[] abyte = new byte[bytebuf.readableBytes()]; - bytebuf.readBytes(abyte); - ServerboundCustomPayloadPacket serverboundcustompayloadpacket = ClientNetworkHelper.getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators.TELEPORT, abyte); - this.connection.send(serverboundcustompayloadpacket); - } - } - - @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/player/LocalPlayer;lastOnGround:Z", shift = At.Shift.AFTER, ordinal = 1), method = "sendPosition") - public void walkUp(CallbackInfo ci) { - if (ClientDataHolder.getInstance().vrSettings.walkUpBlocks) { - this.minecraft.options.autoJump = false; - } - } - - @Inject(at = @At("TAIL"), method = "chat") - public void chatMsg(String string, CallbackInfo ci) { - this.lastMsg = string; - } - - @Override - public void swingArm(InteractionHand interactionhand, VRFirstPersonArmSwing interact) { - ((ItemInHandRendererExtension) this.minecraft.getItemInHandRenderer()).setSwingType(interact); - this.swing(interactionhand); - } - - - @Inject(at = @At("HEAD"), method = "swing") - public void vrSwing(InteractionHand interactionHand, CallbackInfo ci) { - if (!this.swinging) { - if (this.minecraft.hitResult != null && this.minecraft.hitResult.getType() != net.minecraft.world.phys.HitResult.Type.MISS) { - ((ItemInHandRendererExtension) this.minecraft.getItemInHandRenderer()).setXdist((float) this.minecraft.hitResult.getLocation().subtract(ClientDataHolder.getInstance().vrPlayer.vrdata_world_pre.getController(interactionHand.ordinal()).getPosition()).length()); - } else { - ((ItemInHandRendererExtension) this.minecraft.getItemInHandRenderer()).setXdist(0F); - } - } - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/AbstractClientPlayer;aiStep()V"), method = "aiStep") - public void ai(CallbackInfo ci) { - this.dataholder.vrPlayer.tick((LocalPlayer) (Object) this, this.minecraft, this.random); - } - - @Inject(at = @At("HEAD"), method = "move(Lnet/minecraft/world/entity/MoverType;Lnet/minecraft/world/phys/Vec3;)V", cancellable = true) - public void overwriteMove(MoverType pType, Vec3 pPos, CallbackInfo info) { - this.moveMulIn = this.stuckSpeedMultiplier; - - if (pPos.length() != 0.0D && !this.isPassenger()) { - boolean flag = VRPlayer.get().getFreeMove(); - boolean flag1 = flag || ClientDataHolder.getInstance().vrSettings.simulateFalling && !this.onClimbable() - && !this.isShiftKeyDown(); - - if (ClientDataHolder.getInstance().climbTracker.isActive((LocalPlayer) (Object) this) - && (flag || ClientDataHolder.getInstance().climbTracker.isGrabbingLadder())) { - flag1 = true; - } - - Vec3 vec3 = VRPlayer.get().roomOrigin; - - if ((ClientDataHolder.getInstance().climbTracker.isGrabbingLadder() || flag - || ClientDataHolder.getInstance().swimTracker.isActive((LocalPlayer) (Object) this)) - && (this.zza != 0.0F || this.isFallFlying() || Math.abs(this.getDeltaMovement().x) > 0.01D - || Math.abs(this.getDeltaMovement().z) > 0.01D)) { - double d0 = vec3.x - this.getX(); - double d1 = vec3.z - this.getZ(); - double d2 = this.getX(); - double d3 = this.getZ(); - super.move(pType, pPos); - - if (ClientDataHolder.getInstance().vrSettings.walkUpBlocks) { - this.maxUpStep = this.getBlockJumpFactor() == 1.0F ? 1.0F : 0.6F; - } else { - this.maxUpStep = 0.6F; - this.updateAutoJump((float) (this.getX() - d2), (float) (this.getZ() - d3)); - } - - double d4 = this.getY() + this.getRoomYOffsetFromPose(); - VRPlayer.get().setRoomOrigin(this.getX() + d0, d4, this.getZ() + d1, false); - } else if (flag1) { - super.move(pType, new Vec3(0.0D, pPos.y, 0.0D)); - VRPlayer.get().setRoomOrigin(VRPlayer.get().roomOrigin.x, this.getY() + this.getRoomYOffsetFromPose(), - VRPlayer.get().roomOrigin.z, false); - } else { - this.onGround = true; - } - } else { - super.move(pType, pPos); - } - info.cancel(); - } - - @Override - public double getRoomYOffsetFromPose() { - double d0 = 0.0D; - - if (this.getPose() == Pose.FALL_FLYING || this.getPose() == Pose.SPIN_ATTACK - || this.getPose() == Pose.SWIMMING && !ClientDataHolder.getInstance().crawlTracker.crawlsteresis) { - d0 = -1.2D; - } - - return d0; - } - -// @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;getYRot()F"), method = "updateAutoJump") -// public float yRot(LocalPlayer instance) { -// return DataHolder.getInstance().vrPlayer.vrdata_world_pre.getBodyYaw(); -// } - - @Inject(at = @At("HEAD"), method = "updateAutoJump", cancellable = true) - public void autostep1(float f, float g, CallbackInfo ci) { - float l; - if (!this.canAutoJump()) { - ci.cancel(); - return; - } - Vec3 vec3 = this.position(); - Vec3 vec32 = vec3.add(f, 0.0, g); - Vec3 vec33 = new Vec3(f, 0.0, g); - float h = this.getSpeed(); - float i = (float)vec33.lengthSqr(); - if (i <= 0.001f) { - Vec2 vec2 = this.input.getMoveVector(); - float j = h * vec2.x; - float k = h * vec2.y; - l = Mth.sin(ClientDataHolder.getInstance().vrPlayer.vrdata_world_pre.getBodyYaw() * ((float)Math.PI / 180)); - float m = Mth.cos(ClientDataHolder.getInstance().vrPlayer.vrdata_world_pre.getBodyYaw() * ((float)Math.PI / 180)); - vec33 = new Vec3(j * m - k * l, vec33.y, k * m + j * l); - i = (float)vec33.lengthSqr(); - if (i <= 0.001f) { - ci.cancel(); - return; - } - } - float vec2 = Mth.fastInvSqrt(i); - Vec3 j = vec33.scale(vec2); - Vec3 k = this.getForward(); - l = (float)(k.x * j.x + k.z * j.z); - if (l < -0.15f) { - ci.cancel(); - return; - } - CollisionContext m = CollisionContext.of(this); - BlockPos blockPos = new BlockPos(this.getX(), this.getBoundingBox().maxY, this.getZ()); - BlockState blockState = this.level.getBlockState(blockPos); - if (!blockState.getCollisionShape(this.level, blockPos, m).isEmpty()) { - ci.cancel(); - return; - } - BlockState blockState2 = this.level.getBlockState(blockPos = blockPos.above()); - if (!blockState2.getCollisionShape(this.level, blockPos, m).isEmpty()) { - ci.cancel(); - return; - } - float n = 7.0f; - float o = 1.2f; - if (this.hasEffect(MobEffects.JUMP)) { - o += (float)(this.getEffect(MobEffects.JUMP).getAmplifier() + 1) * 0.75f; - } - float p = Math.max(h * 7.0f, 1.0f / vec2); - Vec3 vec34 = vec3; - Vec3 vec35 = vec32.add(j.scale(p)); - float q = this.getBbWidth(); - float r = this.getBbHeight(); - AABB aABB = new AABB(vec34, vec35.add(0.0, r, 0.0)).inflate(q, 0.0, q); - vec34 = vec34.add(0.0, 0.51f, 0.0); - vec35 = vec35.add(0.0, 0.51f, 0.0); - Vec3 vec36 = j.cross(new Vec3(0.0, 1.0, 0.0)); - Vec3 vec37 = vec36.scale(q * 0.5f); - Vec3 vec38 = vec34.subtract(vec37); - Vec3 vec39 = vec35.subtract(vec37); - Vec3 vec310 = vec34.add(vec37); - Vec3 vec311 = vec35.add(vec37); - Iterable iterable = this.level.getCollisions(this, aABB); - Iterator iterator = StreamSupport.stream(iterable.spliterator(), false).flatMap(voxelShape -> voxelShape.toAabbs().stream()).iterator(); - float s = Float.MIN_VALUE; - while (iterator.hasNext()) { - AABB aABB2 = (AABB)iterator.next(); - if (!aABB2.intersects(vec38, vec39) && !aABB2.intersects(vec310, vec311)) continue; - s = (float)aABB2.maxY; - Vec3 vec312 = aABB2.getCenter(); - BlockPos blockPos2 = new BlockPos(vec312); - int t = 1; - while ((float)t < p) { - BlockState blockState4; - BlockPos blockPos3 = blockPos2.above(t); - BlockState blockState3 = this.level.getBlockState(blockPos3); - VoxelShape voxelShape2 = blockState3.getCollisionShape(this.level, blockPos3, m); - if (!voxelShape2.isEmpty() && (double)(s = (float)voxelShape2.max(Direction.Axis.Y) + (float)blockPos3.getY()) - this.getY() > (double)p) { - ci.cancel(); - return; - } - if (t > 1 && !(blockState4 = this.level.getBlockState(blockPos = blockPos.above())).getCollisionShape(this.level, blockPos, m).isEmpty()) { - ci.cancel(); - return; - } - ++t; - } - break; - } - if (s == Float.MIN_VALUE) { - ci.cancel(); - return; - } - float aABB2 = (float)((double)s - this.getY()); - if (aABB2 <= 0.5f || aABB2 > p) { - ci.cancel(); - return; - } - this.autoJumpTime = 1; - ci.cancel(); - } - - @Override - public ItemStack eat(Level level, ItemStack itemStack) - { - if (itemStack.isEdible() && ((LocalPlayer)(Object)this) == Minecraft.getInstance().player && itemStack.getHoverName().getString().equals("EAT ME")) - { - ClientDataHolder.getInstance().vrPlayer.wfMode = 0.5D; - ClientDataHolder.getInstance().vrPlayer.wfCount = 400; - } - return super.eat(level, itemStack); - } - - @Shadow - protected abstract boolean canAutoJump(); - - @Override - public void moveTo(double pX, double p_20109_, double pY, float p_20111_, float pZ) { - super.moveTo(pX, p_20109_, pY, p_20111_, pZ); - if (this.initFromServer) { - ClientDataHolder.getInstance().vrPlayer.snapRoomOriginToPlayerEntity((LocalPlayer) (Object) this, false, false); - } - } - - @Override - public void absMoveTo(double pX, double p_19892_, double pY, float p_19894_, float pZ) { - super.absMoveTo(pX, p_19892_, pY, p_19894_, pZ); - ClientDataHolder.getInstance().vrPlayer.snapRoomOriginToPlayerEntity((LocalPlayer) (Object) this, false, false); - if (!this.initFromServer) { - this.moveTo(pX, p_19892_, pY, p_19894_, pZ); - this.initFromServer = true; - } - } - - @Override - public void setPos(double pX, double p_20211_, double pY) { - double d0 = this.getX(); - double d1 = this.getY(); - double d2 = this.getZ(); - super.setPos(pX, p_20211_, pY); - double d3 = this.getX(); - double d4 = this.getY(); - double d5 = this.getZ(); - Entity entity = this.getVehicle(); - - if (this.isPassenger()) { - Vec3 vec3 = ClientDataHolder.getInstance().vehicleTracker.Premount_Pos_Room; - vec3 = vec3.yRot(ClientDataHolder.getInstance().vrPlayer.vrdata_world_pre.rotation_radians); - pX = pX - vec3.x; - p_20211_ = ClientDataHolder.getInstance().vehicleTracker.getVehicleFloor(entity, p_20211_); - pY = pY - vec3.z; - ClientDataHolder.getInstance().vrPlayer.setRoomOrigin(pX, p_20211_, pY, pX + p_20211_ + pY == 0.0D); - } else { - Vec3 vec31 = ClientDataHolder.getInstance().vrPlayer.roomOrigin; - VRPlayer.get().setRoomOrigin(vec31.x + (d3 - d0), vec31.y + (d4 - d1), vec31.z + (d5 - d2), - pX + p_20211_ + pY == 0.0D); - } - } - - public void doDrag() { - float f = 0.91F; - if (this.onGround) { - f = this.level.getBlockState(new BlockPos(this.getX(), this.getBoundingBox().minY - 1.0D, this.getZ())).getBlock().getFriction() * 0.91F; - } - double d0 = (double) f; - double d1 = (double) f; - this.setDeltaMovement(this.getDeltaMovement().x / d0, this.getDeltaMovement().y, this.getDeltaMovement().z / d1); - double d2 = dataholder.vrSettings.inertiaFactor.getFactor(); - double d3 = this.getBoundedAddition(this.additionX); - double d4 = (double) f * d3 / (double) (1.0F - f); - double d5 = d4 / ((double) f * (d4 + d3 * d2)); - d0 = d0 * d5; - double d6 = this.getBoundedAddition(this.additionZ); - double d7 = (double) f * d6 / (double) (1.0F - f); - double d8 = d7 / ((double) f * (d7 + d6 * d2)); - d1 = d1 * d8; - this.setDeltaMovement(this.getDeltaMovement().x * d0, this.getDeltaMovement().y, this.getDeltaMovement().z * d1); - } - - public double getBoundedAddition(double orig) { - return orig >= -1.0E-6D && orig <= 1.0E-6D ? 1.0E-6D : orig; - } - - @Override - public void moveRelative(float pAmount, Vec3 pRelative) { - double d0 = pRelative.y; - double d1 = pRelative.x; - double d2 = pRelative.z; - VRPlayer vrplayer = this.dataholder.vrPlayer; - - if (vrplayer.getFreeMove()) { - double d3 = d1 * d1 + d2 * d2; - double d4 = 0.0D; - double d5 = 0.0D; - double d6 = 0.0D; - double d7 = 1.0D; - - if (d3 >= (double) 1.0E-4F || ClientDataHolder.katvr) { - d3 = (double) Mth.sqrt((float) d3); - - if (d3 < 1.0D && !ClientDataHolder.katvr) { - d3 = 1.0D; - } - - d3 = (double) pAmount / d3; - d1 = d1 * d3; - d2 = d2 * d3; - Vec3 vec3 = new Vec3(d1, 0.0D, d2); - VRPlayer vrplayer1 = this.dataholder.vrPlayer; - boolean flag = !this.isPassenger() && (this.getAbilities().flying || this.isSwimming()); - - if (ClientDataHolder.katvr) { - jkatvr.query(); - d3 = (double) (jkatvr.getSpeed() * jkatvr.walkDirection() * this.dataholder.vrSettings.movementSpeedMultiplier); - vec3 = new Vec3(0.0D, 0.0D, d3); - - if (flag) { - vec3 = vec3.xRot(vrplayer1.vrdata_world_pre.hmd.getPitch() * ((float) Math.PI / 180F)); - } - - vec3 = vec3.yRot(-jkatvr.getYaw() * ((float) Math.PI / 180F) + this.dataholder.vrPlayer.vrdata_world_pre.rotation_radians); - } else if (ClientDataHolder.infinadeck) { - jinfinadeck.query(); - d3 = (double) (jinfinadeck.getSpeed() * jinfinadeck.walkDirection() * this.dataholder.vrSettings.movementSpeedMultiplier); - vec3 = new Vec3(0.0D, 0.0D, d3); - - if (flag) { - vec3 = vec3.xRot(vrplayer1.vrdata_world_pre.hmd.getPitch() * ((float) Math.PI / 180F)); - } - - vec3 = vec3.yRot(-jinfinadeck.getYaw() * ((float) Math.PI / 180F) + this.dataholder.vrPlayer.vrdata_world_pre.rotation_radians); - } else if (this.dataholder.vrSettings.seated) { - int j = 0; - if (this.dataholder.vrSettings.seatedUseHMD) { - j = 1; - } - - if (flag) { - vec3 = vec3.xRot(vrplayer1.vrdata_world_pre.getController(j).getPitch() * ((float) Math.PI / 180F)); - } - - vec3 = vec3.yRot(-vrplayer1.vrdata_world_pre.getController(j).getYaw() * ((float) Math.PI / 180F)); - } else { - if (flag) { - switch (this.dataholder.vrSettings.vrFreeMoveMode) { - case CONTROLLER: - vec3 = vec3.xRot(vrplayer1.vrdata_world_pre.getController(1).getPitch() * ((float) Math.PI / 180F)); - break; - case HMD: - case RUN_IN_PLACE: - case ROOM: - vec3 = vec3.xRot(vrplayer1.vrdata_world_pre.hmd.getPitch() * ((float) Math.PI / 180F)); - } - } - if (this.dataholder.jumpTracker.isjumping()) { - vec3 = vec3.yRot(-vrplayer1.vrdata_world_pre.hmd.getYaw() * ((float) Math.PI / 180F)); - } else { - switch (this.dataholder.vrSettings.vrFreeMoveMode) { - case CONTROLLER: - vec3 = vec3.yRot(-vrplayer1.vrdata_world_pre.getController(1).getYaw() * ((float) Math.PI / 180F)); - break; - - case HMD: - vec3 = vec3.yRot(-vrplayer1.vrdata_world_pre.hmd.getYaw() * ((float) Math.PI / 180F)); - break; - - case RUN_IN_PLACE: - vec3 = vec3.yRot((float) (-this.dataholder.runTracker.getYaw() * (double) ((float) Math.PI / 180F))); - vec3 = vec3.scale(this.dataholder.runTracker.getSpeed()); - - case ROOM: - vec3 = vec3.yRot((180.0F + this.dataholder.vrSettings.worldRotation) * ((float) Math.PI / 180F)); - } - } - } - - d4 = vec3.x; - d6 = vec3.y; - d5 = vec3.z; - - if (!this.getAbilities().flying && !this.wasTouchingWater) { - d7 = this.dataholder.vrSettings.inertiaFactor.getFactor(); - } - - float f = 1.0F; - - if (this.getAbilities().flying) { - f = 5.0F; - } - - this.setDeltaMovement(this.getDeltaMovement().x + d4 * d7, this.getDeltaMovement().y + d6 * (double) f, this.getDeltaMovement().z + d5 * d7); - this.additionX = d4; - this.additionZ = d5; - } - - if (!this.getAbilities().flying && !this.wasTouchingWater) { - this.doDrag(); - } - } - } - - @Override - public void die(DamageSource pCause) { - super.die(pCause); - ClientDataHolder.getInstance().vr.triggerHapticPulse(0, 2000); - ClientDataHolder.getInstance().vr.triggerHapticPulse(1, 2000); - } - - @Override - public boolean getInitFromServer() { - return this.initFromServer; - } - - @Override - public void setMovementTeleportTimer(int value) { - this.movementTeleportTimer = value; - } - - @Override - public int getMovementTeleportTimer() { - return movementTeleportTimer; - } - - @Override - public float getMuhSpeedFactor() { - return this.moveMulIn.lengthSqr() > 0.0D ? (float) ((double) this.getBlockSpeedFactor() * (this.moveMulIn.x + this.moveMulIn.z) / 2.0D) : this.getBlockSpeedFactor(); - } - - @Override - public float getMuhJumpFactor() { - return this.moveMulIn.lengthSqr() > 0.0D ? (float) ((double) this.getBlockJumpFactor() * this.moveMulIn.y) : this.getBlockJumpFactor(); - } - - @Override - public void stepSound(BlockPos blockforNoise, Vec3 soundPos) { - BlockState blockstate = this.level.getBlockState(blockforNoise); - Block block = blockstate.getBlock(); - SoundType soundtype = block.getSoundType(blockstate); - BlockState blockstate1 = this.level.getBlockState(blockforNoise.above()); - - if (blockstate1.getBlock() == Blocks.SNOW) { - soundtype = Blocks.SNOW.getSoundType(blockstate1); - } - - float f = soundtype.getVolume(); - float f1 = soundtype.getPitch(); - SoundEvent soundevent = soundtype.getStepSound(); - - if (!this.isSilent() && !block.defaultBlockState().getMaterial().isLiquid()) { - this.level.playSound((LocalPlayer) null, soundPos.x, soundPos.y, soundPos.z, soundevent, this.getSoundSource(), f, f1); - } - } - - @Override - public String getLastMsg() { - return lastMsg; - } - - @Override - public void setLastMsg(String string) { - this.lastMsg = string; - } - - @Override - public boolean isClimbeyJumpEquipped() { - return this.getItemBySlot(EquipmentSlot.FEET) != null && ClientDataHolder.getInstance().jumpTracker.isBoots(this.getItemBySlot(EquipmentSlot.FEET)); - } - - @Override - public boolean isClimbeyClimbEquipped() { - if (this.getMainHandItem() != null && ClientDataHolder.getInstance().climbTracker.isClaws(this.getMainHandItem())) { - return true; - } - else { - return this.getOffhandItem() != null && ClientDataHolder.getInstance().climbTracker.isClaws(this.getOffhandItem()); - } - } - - @Override - public void releaseUsingItem() { - ClientNetworkHelper.sendActiveHand((byte) this.getUsedItemHand().ordinal()); - super.releaseUsingItem(); - } - -// @Override -// public void updateSyncFields(LocalPlayer old) { -// this.xLast = old.xLast; -// this.yLast1 = old.yLast1; -// this.zLast = old.zLast; -// this.yRotLast = old.yRotLast; -// this.xRotLast = old.xRotLast; -// this.lastOnGround = old.lastOnGround; -// this.wasShiftKeyDown = old.wasShiftKeyDown; -// this.wasSprinting = old.wasSprinting; -// this.positionReminder = old.positionReminder; -// } - - @Override - public void setItemInUseClient(ItemStack item, InteractionHand hand) { - this.useItem = item; - - if (item != ItemStack.EMPTY) { - this.startedUsingItem = true; - this.usingItemHand = hand; - } - else { - this.startedUsingItem = false; - this.usingItemHand = hand; - } - } - - @Override - public void setTeleported(boolean teleported) { - this.teleported = teleported; - } - - @Override - public void setItemInUseCountClient(int count) { - this.useItemRemaining = count; - } -} diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/GameRenderer.java.patch b/common/src/main/java/org/vivecraft/mixin/client/renderer/GameRenderer.java.patch deleted file mode 100644 index 1318fddb5..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/GameRenderer.java.patch +++ /dev/null @@ -1,2897 +0,0 @@ ---- a/net/minecraft/client/renderer/GameRenderer.java -+++ b/net/minecraft/client/renderer/GameRenderer.java -@@ -3,23 +3,28 @@ - import com.google.common.collect.Lists; - import com.google.common.collect.Maps; - import com.google.gson.JsonSyntaxException; -+import com.mojang.blaze3d.pipeline.RenderTarget; - import com.mojang.blaze3d.platform.GLX; - import com.mojang.blaze3d.platform.GlStateManager; - import com.mojang.blaze3d.platform.Lighting; -+import com.mojang.blaze3d.platform.MemoryTracker; - import com.mojang.blaze3d.platform.NativeImage; - import com.mojang.blaze3d.platform.Window; - import com.mojang.blaze3d.shaders.Program; - import com.mojang.blaze3d.systems.RenderSystem; - import com.mojang.blaze3d.vertex.BufferBuilder; -+import com.mojang.blaze3d.vertex.BufferUploader; - import com.mojang.blaze3d.vertex.DefaultVertexFormat; - import com.mojang.blaze3d.vertex.PoseStack; - import com.mojang.blaze3d.vertex.Tesselator; - import com.mojang.blaze3d.vertex.VertexFormat; -+import com.mojang.blaze3d.vertex.VertexFormat.Mode; - import com.mojang.datafixers.util.Pair; - import com.mojang.math.Matrix3f; - import com.mojang.math.Matrix4f; - import com.mojang.math.Vector3f; - import java.io.IOException; -+import java.nio.FloatBuffer; - import java.nio.file.Files; - import java.nio.file.Path; - import java.util.List; -@@ -35,17 +40,28 @@ - import net.minecraft.client.Camera; - import net.minecraft.client.Minecraft; - import net.minecraft.client.Screenshot; -+import net.minecraft.client.gui.Gui; - import net.minecraft.client.gui.MapRenderer; - import net.minecraft.client.gui.screens.ChatScreen; - import net.minecraft.client.gui.screens.LoadingOverlay; - import net.minecraft.client.gui.screens.ReceivingLevelScreen; -+import net.minecraft.client.gui.screens.Screen; -+import net.minecraft.client.gui.screens.WinScreen; -+import net.minecraft.client.main.Main; - import net.minecraft.client.player.AbstractClientPlayer; -+import net.minecraft.client.player.LocalPlayer; - import net.minecraft.client.renderer.block.model.ItemTransforms; -+import net.minecraft.client.renderer.entity.ItemRenderer; - import net.minecraft.client.renderer.texture.OverlayTexture; -+import net.minecraft.client.renderer.texture.TextureAtlasSprite; -+import net.minecraft.client.renderer.texture.TextureManager; - import net.minecraft.client.resources.language.I18n; -+import net.minecraft.client.resources.model.ModelBakery; -+import net.minecraft.client.resources.model.ModelResourceLocation; - import net.minecraft.client.server.IntegratedServer; - import net.minecraft.core.BlockPos; - import net.minecraft.core.Direction; -+import net.minecraft.core.Vec3i; - import net.minecraft.network.chat.ClickEvent; - import net.minecraft.network.chat.Style; - import net.minecraft.network.chat.TextComponent; -@@ -53,7 +69,9 @@ - import net.minecraft.server.packs.resources.ResourceManager; - import net.minecraft.server.packs.resources.ResourceManagerReloadListener; - import net.minecraft.server.packs.resources.ResourceProvider; -+import net.minecraft.tags.FluidTags; - import net.minecraft.util.Mth; -+import net.minecraft.world.InteractionHand; - import net.minecraft.world.effect.MobEffects; - import net.minecraft.world.entity.Entity; - import net.minecraft.world.entity.LivingEntity; -@@ -64,6 +82,7 @@ - import net.minecraft.world.entity.player.Player; - import net.minecraft.world.entity.projectile.ProjectileUtil; - import net.minecraft.world.item.ItemStack; -+import net.minecraft.world.item.Items; - import net.minecraft.world.level.GameType; - import net.minecraft.world.level.Level; - import net.minecraft.world.level.block.state.BlockState; -@@ -74,10 +93,13 @@ - import net.minecraft.world.phys.EntityHitResult; - import net.minecraft.world.phys.HitResult; - import net.minecraft.world.phys.Vec3; -+import net.minecraftforge.resource.IResourceType; -+import net.minecraftforge.resource.VanillaResourceType; - import net.optifine.Config; - import net.optifine.GlErrors; - import net.optifine.Lagometer; - import net.optifine.RandomEntities; -+import net.optifine.SmartAnimations; - import net.optifine.entity.model.CustomEntityModels; - import net.optifine.gui.GuiChatOF; - import net.optifine.reflect.Reflector; -@@ -87,8 +109,26 @@ - import net.optifine.shaders.ShadersRender; - import net.optifine.util.MemoryMonitor; - import net.optifine.util.TimedEvent; -+ -+import org.apache.commons.lang3.tuple.Triple; - import org.apache.logging.log4j.LogManager; - import org.apache.logging.log4j.Logger; -+import org.lwjgl.opengl.GL11; -+import org.vivecraft.api.NetworkHelper; -+import org.vivecraft.api.VRData; -+import org.vivecraft.gameplay.VRPlayer; -+import org.vivecraft.gameplay.screenhandlers.GuiHandler; -+import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; -+import org.vivecraft.gameplay.screenhandlers.RadialHandler; -+import org.vivecraft.gameplay.trackers.BowTracker; -+import org.vivecraft.gameplay.trackers.TelescopeTracker; -+import org.vivecraft.provider.ControllerType; -+import org.vivecraft.reflection.MCReflection; -+import org.vivecraft.render.RenderPass; -+import org.vivecraft.render.VRCamera; -+import org.vivecraft.render.VRWidgetHelper; -+import org.vivecraft.settings.VRSettings; -+import org.vivecraft.utils.Utils; - - public class GameRenderer implements ResourceManagerReloadListener, AutoCloseable - { -@@ -131,7 +171,9 @@ - public static final int EFFECT_NONE = EFFECTS.length; - private int effectIndex = EFFECT_NONE; - private boolean effectActive; -- private final Camera mainCamera = new Camera(); -+ //Vivecraft -+ private final Camera mainCamera = new VRCamera(); -+ // - public ShaderInstance blitShader; - private final Map shaders = Maps.newHashMap(); - @Nullable -@@ -244,7 +286,7 @@ - private static ShaderInstance rendertypeCrumblingShader; - private boolean initialized = false; - private Level updatedWorld = null; -- private float clipDistance = 128.0F; -+ public float clipDistance = 128.0F; - private long lastServerTime = 0L; - private int lastServerTicks = 0; - private int serverWaitTime = 0; -@@ -253,6 +295,47 @@ - private float avgServerTickDiff = 0.0F; - private PostChain[] fxaaShaders = new PostChain[10]; - private boolean guiLoadingVisible = false; -+ //Vivecraft additions ******** -+ public float minClipDistance = 0.02F; -+ public Vec3 crossVec; -+ private FloatBuffer matrixBuffer = MemoryTracker.create(16).asFloatBuffer(); -+ public Matrix4f thirdPassProjectionMatrix = new Matrix4f(); -+ public boolean menuWorldFastTime; -+ public boolean inwater; -+ public boolean wasinwater; -+ public boolean inportal; -+ public boolean onfire; -+ public float inBlock = 0.0F; -+ private boolean always_true = true; -+ public double rveX; -+ public double rveY; -+ public double rveZ; -+ public double rvelastX; -+ public double rvelastY; -+ public double rvelastZ; -+ public double rveprevX; -+ public double rveprevY; -+ public double rveprevZ; -+ public float rveyaw; -+ public float rvepitch; -+ private float rvelastyaw; -+ private float rvelastpitch; -+ private float rveHeight; -+ private boolean cached; -+ private int polyblendsrca; -+ private int polyblenddsta; -+ private int polyblendsrcrgb; -+ private int polyblenddstrgb; -+ private net.optifine.shaders.Program prog; -+ private boolean polyblend; -+ private boolean polytex; -+ private boolean polylight; -+ private boolean polycull; -+ public static final ModelResourceLocation thirdPersonCameraModel = new ModelResourceLocation("vivecraft:camcorder"); -+ public static final ModelResourceLocation thirdPersonCameraDisplayModel = new ModelResourceLocation("vivecraft:camcorder_display"); -+ Vec3i tpUnlimitedColor = new Vec3i(-83, -40, -26); -+ Vec3i tpLimitedColor = new Vec3i(-51, -87, -51); -+ Vec3i tpInvalidColor = new Vec3i(83, 83, 83); - - public GameRenderer(Minecraft pMinecraft, ResourceManager pResourceManager, RenderBuffers pRenderBuffers) - { -@@ -263,6 +346,13 @@ - this.lightTexture = new LightTexture(this, pMinecraft); - this.renderBuffers = pRenderBuffers; - this.postEffect = null; -+ -+ //Vivecraft, know in the log if a mod replaces GameRenderer -+ if (this.minecraft.gameRenderer != null) -+ { -+ System.out.println("**********NEW GAME RENDERER ***********"); -+ Thread.dumpStack(); -+ } - } - - public void close() -@@ -776,13 +866,16 @@ - { - Entity entity = this.minecraft.getCameraEntity(); - -- if (entity != null && this.minecraft.level != null) -+ if (entity != null && this.minecraft.level != null && this.minecraft.vrPlayer.vrdata_world_render != null) - { - this.minecraft.getProfiler().push("pick"); - this.minecraft.crosshairPickEntity = null; - double d0 = (double)this.minecraft.gameMode.getPickRange(); -- this.minecraft.hitResult = entity.pick(d0, pPartialTicks, false); -- Vec3 vec3 = entity.getEyePosition(pPartialTicks); -+ //Vivecraft override raytrace -+ this.minecraft.hitResult = this.minecraft.vrPlayer.rayTraceBlocksVR(this.minecraft.vrPlayer.vrdata_world_render, 0, d0, false); -+ this.crossVec = this.minecraft.vrPlayer.AimedPointAtDistance(this.minecraft.vrPlayer.vrdata_world_render, 0, d0); -+ Vec3 vec3 = this.minecraft.vrPlayer.vrdata_world_render.getController(0).getPosition(); -+ // - boolean flag = false; - int i = 3; - double d1 = d0; -@@ -808,14 +901,16 @@ - { - d1 = this.minecraft.hitResult.getLocation().distanceToSqr(vec3); - } -- -- Vec3 vec31 = entity.getViewVector(1.0F); -+ //Vivecraft -+ Vec3 vec31 = this.minecraft.vrPlayer.vrdata_world_render.getController(0).getDirection(); -+ // - Vec3 vec32 = vec3.add(vec31.x * d0, vec31.y * d0, vec31.z * d0); - float f = 1.0F; - AABB aabb = entity.getBoundingBox().expandTowards(vec31.scale(d0)).inflate(1.0D, 1.0D, 1.0D); - EntityHitResult entityhitresult = ProjectileUtil.getEntityHitResult(entity, vec3, vec32, aabb, (entityIn) -> - { -- return !entityIn.isSpectator() && entityIn.isPickable(); -+ //Vivecraft add riding check in case your hand is somewhere inappropriate. -+ return !entityIn.isSpectator() && entityIn.isPickable() && !(entityIn == this.minecraft.getCameraEntity().getVehicle()); - }, d1); - - if (entityhitresult != null) -@@ -869,7 +964,11 @@ - - public double getFov(Camera pActiveRenderInfo, float pPartialTicks, boolean pUseFOVSetting) - { -- if (this.panoramicMode) -+ if (this.minecraft.level == null) -+ { // Vivecraft: using this on the main menu -+ return this.minecraft.options.fov; -+ } -+ else if (this.panoramicMode) - { - return 90.0D; - } -@@ -1060,25 +1159,56 @@ - RenderSystem.setProjectionMatrix(pMatrix); - } - -+ //Vivecraft modify this to always return the correct matrix for the pass. - public Matrix4f getProjectionMatrix(double p_172717_) - { - PoseStack posestack = new PoseStack(); -- posestack.last().pose().setIdentity(); - - if (Config.isShaders() && Shaders.isRenderingFirstPersonHand()) - { - Shaders.applyHandDepth(posestack); - } - -- this.clipDistance = this.renderDistance + 1024.0F; -+ setupClipPlanes(); - -- if (this.zoom != 1.0F) -+ if (this.minecraft.currentPass == RenderPass.LEFT) -+ { -+ posestack.mulPoseMatrix(this.minecraft.vrRenderer.eyeproj[0]); -+ } -+ else if (this.minecraft.currentPass == RenderPass.RIGHT) -+ { -+ posestack.mulPoseMatrix(this.minecraft.vrRenderer.eyeproj[1]); -+ } -+ else if (this.minecraft.currentPass == RenderPass.THIRD) -+ { -+ if (this.dataholder.vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY) -+ { -+ posestack.mulPoseMatrix(Matrix4f.perspective((double)this.dataholder.vrSettings.mixedRealityFov, this.dataholder.vrSettings.mixedRealityAspectRatio, this.minClipDistance, this.clipDistance)); -+ } -+ else -+ { -+ posestack.mulPoseMatrix(Matrix4f.perspective((double)this.dataholder.vrSettings.mixedRealityFov, (float)this.minecraft.getWindow().getScreenWidth() / (float)this.minecraft.getWindow().getScreenHeight(), this.minClipDistance, this.clipDistance)); -+ } -+ this.thirdPassProjectionMatrix = new Matrix4f(posestack.last().pose()); -+ } -+ else if (this.minecraft.currentPass == RenderPass.CAMERA) -+ { -+ posestack.mulPoseMatrix(Matrix4f.perspective((double)this.dataholder.vrSettings.handCameraFov, (float)this.minecraft.vrRenderer.cameraFramebuffer.viewWidth / (float)this.minecraft.vrRenderer.cameraFramebuffer.viewHeight, this.minClipDistance, this.clipDistance)); -+ } -+ else if (this.minecraft.currentPass == RenderPass.SCOPEL || this.minecraft.currentPass == RenderPass.SCOPER) - { -- posestack.translate((double)this.zoomX, (double)(-this.zoomY), 0.0D); -- posestack.scale(this.zoom, this.zoom, 1.0F); -+ posestack.mulPoseMatrix(Matrix4f.perspective(70f/8f, 1.0F, 0.05F, this.clipDistance)); -+ } -+ else -+ { //vanilla, center -+ if (this.zoom != 1.0F) -+ { -+ posestack.translate((double)this.zoomX, (double)(-this.zoomY), 0.0D); -+ posestack.scale(this.zoom, this.zoom, 1.0F); -+ } -+ posestack.mulPoseMatrix(Matrix4f.perspective(p_172717_, (float)this.minecraft.getWindow().getScreenWidth() / (float)this.minecraft.getWindow().getScreenHeight(), 0.05F, this.clipDistance)); - } - -- posestack.last().pose().multiply(Matrix4f.perspective(p_172717_, (float)this.minecraft.getWindow().getWidth() / (float)this.minecraft.getWindow().getHeight(), 0.05F, this.clipDistance)); - return posestack.last().pose(); - } - -@@ -1095,33 +1225,48 @@ - - public void render(float pPartialTicks, long pNanoTime, boolean p_109096_) - { -- this.frameInit(); -- -- if (!this.minecraft.isWindowActive() && this.minecraft.options.pauseOnLostFocus && (!this.minecraft.options.touchscreen || !this.minecraft.mouseHandler.isRightPressed())) -- { -- if (Util.getMillis() - this.lastActiveTime > 500L) -- { -- this.minecraft.pauseGame(false); -- } -- } -- else -- { -- this.lastActiveTime = Util.getMillis(); -- } -+ if (this.minecraft.currentPass == RenderPass.LEFT) -+ { -+ this.frameInit(); -+ -+ if (!this.always_true && !this.minecraft.isWindowActive() && this.minecraft.options.pauseOnLostFocus && (!this.minecraft.options.touchscreen || !this.minecraft.mouseHandler.isRightPressed())) -+ { -+ if (Util.getMillis() - this.lastActiveTime > 500L) -+ { -+ this.minecraft.pauseGame(false); -+ } -+ } -+ else -+ { -+ this.lastActiveTime = Util.getMillis(); -+ } -+ } - - if (!this.minecraft.noRender) - { - int i = (int)(this.minecraft.mouseHandler.xpos() * (double)this.minecraft.getWindow().getGuiScaledWidth() / (double)this.minecraft.getWindow().getScreenWidth()); - int j = (int)(this.minecraft.mouseHandler.ypos() * (double)this.minecraft.getWindow().getGuiScaledHeight() / (double)this.minecraft.getWindow().getScreenHeight()); -+ RenderSystem.viewport(0, 0, this.minecraft.getWindow().getWidth(), this.minecraft.getWindow().getHeight()); -+ -+ this.resetProjectionMatrix(this.getProjectionMatrix(minecraft.options.fov)); -+ RenderSystem.getModelViewStack().setIdentity(); -+ RenderSystem.applyModelViewMatrix(); - - if (p_109096_ && this.minecraft.level != null && !Config.isReloadingResources()) - { - this.minecraft.getProfiler().push("level"); -- this.renderLevel(pPartialTicks, pNanoTime, new PoseStack()); -+ PoseStack posestack = new PoseStack(); -+ this.renderLevel(pPartialTicks, pNanoTime, posestack); -+ -+ if (this.minecraft.currentPass != RenderPass.THIRD && this.minecraft.currentPass != RenderPass.CAMERA) -+ { -+ this.renderFaceOverlay(pPartialTicks, posestack); -+ } -+ - this.tryTakeScreenshotIfNeeded(); - this.minecraft.levelRenderer.doEntityOutline(); - -- if (this.postEffect != null && this.effectActive) -+ if (this.postEffect != null && this.effectActive && this.minecraft.currentPass != RenderPass.THIRD) - { - RenderSystem.disableBlend(); - RenderSystem.disableDepthTest(); -@@ -1133,7 +1278,37 @@ - - this.minecraft.getMainRenderTarget().bindWrite(true); - } -- else -+ else { -+ //In the main menu room -+ this.minecraft.getProfiler().push("MainMenu"); -+ GL11.glDisable(GL11.GL_STENCIL_TEST); -+ -+ PoseStack pMatrixStack = new PoseStack(); -+ applyVRModelView(this.minecraft.currentPass, pMatrixStack); -+ this.renderGuiLayer(pPartialTicks, true, pMatrixStack); -+ -+ if (KeyboardHandler.Showing) -+ { -+ if (this.dataholder.vrSettings.physicalKeyboard) -+ { -+ this.renderPhysicalKeyboard(pPartialTicks, pMatrixStack); -+ } -+ else -+ { -+ this.render2D(pPartialTicks, KeyboardHandler.Framebuffer, KeyboardHandler.Pos_room, KeyboardHandler.Rotation_room, false, pMatrixStack); -+ } -+ } -+ -+ if ((this.minecraft.currentPass != RenderPass.THIRD || this.dataholder.vrSettings.mixedRealityRenderHands) && this.minecraft.currentPass != RenderPass.CAMERA) -+ { -+ this.renderVRHands(pPartialTicks, true, true, true, true, pMatrixStack); -+ } -+ } -+ -+ this.minecraft.getProfiler().pop(); -+ } -+ -+ /* Vivecraft nope, do all this in drawFramebuffer - { - RenderSystem.viewport(0, 0, this.minecraft.getWindow().getWidth(), this.minecraft.getWindow().getHeight()); - } -@@ -1291,7 +1466,7 @@ - { - this.minecraft.options.renderDebugCharts = true; - } -- } -+ */} - - private void tryTakeScreenshotIfNeeded() - { -@@ -1366,9 +1541,9 @@ - - nativeimage1.close(); - } -- catch (IOException ioexception1) -+ catch (IOException ioexception) - { -- LOGGER.warn("Couldn't save auto screenshot", (Throwable)ioexception1); -+ LOGGER.warn("Couldn't save auto screenshot", (Throwable)ioexception); - } - finally { - nativeimage.close(); -@@ -1377,13 +1552,10 @@ - } - } - -+ //Vivecraft modify - private boolean shouldRenderBlockOutline() - { -- if (!this.renderBlockOutline) -- { -- return false; -- } -- else -+ if (this.renderBlockOutline && (!this.minecraft.options.hideGui || this.dataholder.vrSettings.renderBlockOutlineMode != VRSettings.RenderPointerElement.WITH_HUD) && this.dataholder.vrSettings.renderBlockOutlineMode != VRSettings.RenderPointerElement.NEVER && !this.minecraft.teleportTracker.isAiming()) - { - Entity entity = this.minecraft.getCameraEntity(); - boolean flag = entity instanceof Player && !this.minecraft.options.hideGui; -@@ -1412,18 +1584,42 @@ - - return flag; - } -+ else -+ { -+ return false; -+ } - } -- -+ //Vivecraft modify heavily - public void renderLevel(float pPartialTicks, long pFinishTimeNano, PoseStack p_109092_) - { -- this.lightTexture.updateLightTexture(pPartialTicks); -+ if (this.minecraft.currentPass == RenderPass.LEFT) -+ { -+ this.lightTexture.updateLightTexture(pPartialTicks); -+ } - - if (this.minecraft.getCameraEntity() == null) - { - this.minecraft.setCameraEntity(this.minecraft.player); - } - -- this.pick(pPartialTicks); -+ if (this.minecraft.currentPass == RenderPass.LEFT) -+ { -+ this.pick(pPartialTicks); -+ -+ if (this.minecraft.hitResult != null && this.minecraft.hitResult.getType() != HitResult.Type.MISS) -+ { -+ this.crossVec = this.minecraft.hitResult.getLocation(); -+ } -+ -+ if (this.minecraft.screen == null) -+ { -+ this.minecraft.teleportTracker.updateTeleportDestinations(this, this.minecraft, this.minecraft.player); -+ } -+ } -+ -+ this.cacheRVEPos((LivingEntity)this.minecraft.getCameraEntity()); -+ this.setupRVE(); -+ this.setupOverlayStatus(pPartialTicks); - - if (Config.isShaders()) - { -@@ -1451,12 +1647,12 @@ - { - posestack = p_109092_; - } -- -- this.bobHurt(posestack, pPartialTicks); -+ //no plz -+ //this.bobHurt(posestack, pPartialTicks); - - if (this.minecraft.options.bobView) -- { -- this.bobView(posestack, pPartialTicks); -+ { //no plz -+ //this.bobView(posestack, pPartialTicks); - } - - float f = Mth.lerp(pPartialTicks, this.minecraft.player.oPortalTime, this.minecraft.player.portalTime) * this.minecraft.options.screenEffectScale * this.minecraft.options.screenEffectScale; -@@ -1466,6 +1662,10 @@ - int i = this.minecraft.player.hasEffect(MobEffects.CONFUSION) ? 7 : 20; - float f1 = 5.0F / (f * f + 5.0F) - f * 0.04F; - f1 *= f1; -+ //Vivecraft tone that shit down -+ i = i / 5; -+ f1 = 1.1f; -+ // - Vector3f vector3f = new Vector3f(0.0F, Mth.SQRT_OF_TWO / 2.0F, Mth.SQRT_OF_TWO / 2.0F); - posestack.mulPose(vector3f.rotationDegrees(((float)this.tick + pPartialTicks) * (float)i)); - posestack.scale(1.0F / f1, 1.0F, 1.0F); -@@ -1484,16 +1684,22 @@ - - if (Reflector.ForgeHooksClient_onCameraSetup.exists()) - { -- Object object = Reflector.ForgeHooksClient_onCameraSetup.call(this, camera, pPartialTicks); -- float f4 = Reflector.callFloat(object, Reflector.EntityViewRenderEvent_CameraSetup_getYaw); -- float f5 = Reflector.callFloat(object, Reflector.EntityViewRenderEvent_CameraSetup_getPitch); -- float f3 = Reflector.callFloat(object, Reflector.EntityViewRenderEvent_CameraSetup_getRoll); -- camera.setAnglesInternal(f4, f5); -- p_109092_.mulPose(Vector3f.ZP.rotationDegrees(f3)); -+ if(minecraft.currentPass != RenderPass.LEFT && minecraft.currentPass != RenderPass.RIGHT) { -+ //do what you want, mods, just dont do it to my eyeballs. -+ Object object = Reflector.ForgeHooksClient_onCameraSetup.call(this, camera, pPartialTicks); -+ float f4 = Reflector.callFloat(object, Reflector.EntityViewRenderEvent_CameraSetup_getYaw); -+ float f5 = Reflector.callFloat(object, Reflector.EntityViewRenderEvent_CameraSetup_getPitch); -+ float f3 = Reflector.callFloat(object, Reflector.EntityViewRenderEvent_CameraSetup_getRoll); -+ camera.setAnglesInternal(f4, f5); -+ p_109092_.mulPose(Vector3f.ZP.rotationDegrees(f3)); -+ } - } - -- p_109092_.mulPose(Vector3f.XP.rotationDegrees(camera.getXRot())); -- p_109092_.mulPose(Vector3f.YP.rotationDegrees(camera.getYRot() + 180.0F)); -+ applyVRModelView(minecraft.currentPass, p_109092_); //this is just rotation. -+ //this is not the way -+ -+ //p_109092_.mulPose(Vector3f.XP.rotationDegrees(camera.getXRot())); -+ //p_109092_.mulPose(Vector3f.YP.rotationDegrees(camera.getYRot() + 180.0F)); - Matrix3f matrix3f = p_109092_.last().normal().copy(); - - if (matrix3f.invert()) -@@ -1510,26 +1716,13 @@ - Reflector.callVoid(Reflector.ForgeHooksClient_dispatchRenderLast, this.minecraft.levelRenderer, p_109092_, pPartialTicks, matrix4f, pFinishTimeNano); - } - -- this.minecraft.getProfiler().popPush("hand"); -+ boolean flag2 = false; -+ GL11.glDisable(GL11.GL_STENCIL_TEST); -+ this.minecraft.getProfiler().popPush("ShadersEnd"); - -- if (this.renderHand && !Shaders.isShadowPass) -+ if (flag && !flag2 && this.renderHand && !Shaders.isShadowPass) - { -- if (flag) -- { -- ShadersRender.renderHand1(this, p_109092_, camera, pPartialTicks); -- Shaders.renderCompositeFinal(); -- } -- -- RenderSystem.clear(256, Minecraft.ON_OSX); -- -- if (flag) -- { -- ShadersRender.renderFPOverlay(this, p_109092_, camera, pPartialTicks); -- } -- else -- { -- this.renderItemInHand(p_109092_, camera, pPartialTicks); -- } -+ Shaders.renderCompositeFinal(); - } - - if (flag) -@@ -1537,6 +1730,7 @@ - Shaders.endRender(); - } - -+ this.restoreRVEPos((LivingEntity)this.minecraft.getCameraEntity()); - this.minecraft.getProfiler().pop(); - } - -@@ -1649,8 +1843,6 @@ - - if (!this.initialized) - { -- ReflectorResolver.resolve(); -- - if (Config.getBitsOs() == 64 && Config.getBitsJre() == 32) - { - Config.setNotify64BitJava(true); -@@ -1776,11 +1968,17 @@ - float f5 = this.itemActivationOffX * (float)(pWidthsp / 4); - float f6 = this.itemActivationOffY * (float)(pHeightScaled / 4); - RenderSystem.enableDepthTest(); -+ // -+ RenderSystem.depthFunc(GL11.GL_ALWAYS); -+ - RenderSystem.disableCull(); - PoseStack posestack = new PoseStack(); - posestack.pushPose(); -- posestack.translate((double)((float)(pWidthsp / 2) + f5 * Mth.abs(Mth.sin(f4 * 2.0F))), (double)((float)(pHeightScaled / 2) + f6 * Mth.abs(Mth.sin(f4 * 2.0F))), -50.0D); -- float f7 = 50.0F + 175.0F * Mth.sin(f4); -+ //edit translate -+ posestack.translate(0, 0, -1); -+ //posestack.translate((double)((float)(pWidthsp / 2) + f5 * Mth.abs(Mth.sin(f4 * 2.0F))), (double)((float)(pHeightScaled / 2) + f6 * Mth.abs(Mth.sin(f4 * 2.0F))), -50.0D); -+ float f7 = 0.0F + -1.2F * Mth.sin(f4); -+ //edit scale - posestack.scale(f7, -f7, f7); - posestack.mulPose(Vector3f.YP.rotationDegrees(900.0F * Mth.abs(Mth.sin(f4)))); - posestack.mulPose(Vector3f.XP.rotationDegrees(6.0F * Mth.cos(f * 8.0F))); -@@ -1791,6 +1989,8 @@ - multibuffersource$buffersource.endBatch(); - RenderSystem.enableCull(); - RenderSystem.disableDepthTest(); -+ // -+ RenderSystem.depthFunc(GL11.GL_LEQUAL); - } - } - -@@ -2181,4 +2381,2256 @@ - { - return rendertypeCrumblingShader; - } -+ -+ //VIVECRAFT ADDITIONS ********************************************************* -+ -+ public void drawSizedQuad(float displayWidth, float displayHeight, float size, float[] color) -+ { -+ float f = displayHeight / displayWidth; -+ BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); -+ bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR_NORMAL); -+ bufferbuilder.vertex((double)(-(size / 2.0F)), (double)(-(size * f) / 2.0F), 0.0D).uv(0.0F, 0.0F).color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); -+ bufferbuilder.vertex((double)(size / 2.0F), (double)(-(size * f) / 2.0F), 0.0D).uv(1.0F, 0.0F).color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); -+ bufferbuilder.vertex((double)(size / 2.0F), (double)(size * f / 2.0F), 0.0D).uv(1.0F, 1.0F).color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); -+ bufferbuilder.vertex((double)(-(size / 2.0F)), (double)(size * f / 2.0F), 0.0D).uv(0.0F, 1.0F).color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); -+ bufferbuilder.end(); -+ BufferUploader.end(bufferbuilder); -+ } -+ -+ public void drawSizedQuad(float displayWidth, float displayHeight, float size, float[] color, Matrix4f pMatrix) -+ { -+ RenderSystem.setShader(GameRenderer::getPositionTexColorShader); -+ float f = displayHeight / displayWidth; -+ BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); -+ bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR_NORMAL); -+ bufferbuilder.vertex(pMatrix, (-(size / 2.0F)), (-(size * f) / 2.0F), 0).uv(0.0F, 0.0F).color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); -+ bufferbuilder.vertex(pMatrix, (size / 2.0F), (-(size * f) / 2.0F), 0).uv(1.0F, 0.0F).color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); -+ bufferbuilder.vertex(pMatrix, (size / 2.0F), (size * f / 2.0F), 0).uv(1.0F, 1.0F).color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); -+ bufferbuilder.vertex(pMatrix, (-(size / 2.0F)), (size * f / 2.0F), 0).uv(0.0F, 1.0F).color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); -+ bufferbuilder.end(); -+ BufferUploader.end(bufferbuilder); -+ } -+ public void drawSizedQuad(float displayWidth, float displayHeight, float size) -+ { -+ this.drawSizedQuad(displayWidth, displayHeight, size, new float[] {1,1,1,1}); -+ } -+ -+ public void drawSizedQuadWithLightmap(float displayWidth, float displayHeight, float size, int lighti, float[] color, Matrix4f pMatrix) -+ { -+ RenderSystem.setShader(GameRenderer::getRendertypeCutoutShader); -+ float f = displayHeight / displayWidth; -+ this.lightTexture.turnOnLightLayer(); -+ BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); -+ bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION_TEX_LMAP_COLOR_NORMAL); -+ bufferbuilder.vertex(pMatrix,(-(size / 2.0F)), (-(size * f) / 2.0F), 0).uv(0.0F, 0.0F).uv2(lighti).color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); -+ bufferbuilder.vertex(pMatrix,(size / 2.0F), (-(size * f) / 2.0F), 0).uv(1.0F, 0.0F).uv2(lighti).color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); -+ bufferbuilder.vertex(pMatrix,(size / 2.0F), (size * f / 2.0F), 0).uv(1.0F, 1.0F).uv2(lighti).color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); -+ bufferbuilder.vertex(pMatrix,(-(size / 2.0F)), (size * f / 2.0F), 0).uv(0.0F, 1.0F).uv2(lighti).color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); -+ bufferbuilder.end(); -+ BufferUploader.end(bufferbuilder); -+ this.lightTexture.turnOffLightLayer(); -+ } -+ -+ public void drawSizedQuadWithLightmap(float displayWidth, float displayHeight, float size, int lighti, Matrix4f pMatrix) -+ { -+ this.drawSizedQuadWithLightmap(displayWidth, displayHeight, size, lighti, new float[] {1,1,1,1}, pMatrix); -+ } -+ -+ public void drawScreen(float par1, Screen screen, PoseStack matrixstack) -+ { -+ PoseStack posestack = RenderSystem.getModelViewStack(); -+ posestack.pushPose(); -+ posestack.setIdentity(); -+ posestack.translate(0.0D, 0.0D, -2000.0D); -+ RenderSystem.applyModelViewMatrix(); -+ RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE); -+ screen.render(matrixstack, 0, 0, par1); -+ RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE); -+ posestack.popPose(); -+ RenderSystem.applyModelViewMatrix(); -+ -+ this.minecraft.getMainRenderTarget().bindRead(); -+ this.minecraft.getMainRenderTarget().genMipMaps(); -+ this.minecraft.getMainRenderTarget().unbindRead(); -+ } -+ -+ private void renderTeleportArc(VRPlayer vrPlayer, PoseStack poseStack) -+ { -+ if (this.minecraft.teleportTracker.vrMovementStyle.showBeam && this.minecraft.teleportTracker.isAiming() && this.minecraft.teleportTracker.movementTeleportArcSteps > 1) -+ { -+ this.minecraft.getProfiler().push("teleportArc"); -+ boolean flag = Config.isShaders(); -+ RenderSystem.enableCull(); -+ RenderSystem.setShader(GameRenderer::getPositionColorShader); -+ // Shaders goes crazy without this -+ minecraft.getTextureManager().bindForSetup(new ResourceLocation("vivecraft:textures/white.png")); -+ -+ RenderSystem.setShaderTexture(0, new ResourceLocation("vivecraft:textures/white.png")); -+ RenderSystem.setShaderColor(1, 1, 1, 1); -+ -+ Tesselator tesselator = Tesselator.getInstance(); -+ tesselator.getBuilder().begin(Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_NORMAL); -+ double d0 = this.minecraft.teleportTracker.lastTeleportArcDisplayOffset; -+ Vec3 vec3 = this.minecraft.teleportTracker.getDestination(); -+ boolean flag1 = vec3.x != 0.0D || vec3.y != 0.0D || vec3.z != 0.0D; -+ byte b0 = -1; -+ Vec3i vec3i; -+ -+ if (!flag1) -+ { -+ vec3i = new Vec3i(83, 75, 83); -+ b0 = -128; -+ } -+ else -+ { -+ if (NetworkHelper.isLimitedSurvivalTeleport() && !this.minecraft.player.getAbilities().mayfly) -+ { -+ vec3i = this.tpLimitedColor; -+ } -+ else -+ { -+ vec3i = this.tpUnlimitedColor; -+ } -+ -+ d0 = this.minecraft.vrRenderer.getCurrentTimeSecs() * (double)this.minecraft.teleportTracker.vrMovementStyle.textureScrollSpeed * 0.6D; -+ this.minecraft.teleportTracker.lastTeleportArcDisplayOffset = d0; -+ } -+ -+ float f = this.minecraft.teleportTracker.vrMovementStyle.beamHalfWidth * 0.15F; -+ int i = this.minecraft.teleportTracker.movementTeleportArcSteps - 1; -+ -+ if (this.minecraft.teleportTracker.vrMovementStyle.beamGrow) -+ { -+ i = (int)((double)i * this.minecraft.teleportTracker.movementTeleportProgress); -+ } -+ -+ double d1 = 1.0D / (double)i; -+ Vec3 vec31 = new Vec3(0.0D, 1.0D, 0.0D); -+ -+ for (int j = 0; j < i; ++j) -+ { -+ double d2 = (double)j / (double)i + d0 * d1; -+ int k = Mth.floor(d2); -+ d2 = d2 - (double)((float)k); -+ Vec3 vec32 = this.minecraft.teleportTracker.getInterpolatedArcPosition((float)(d2 - d1 * (double)0.4F)).subtract(this.minecraft.getCameraEntity().position()); -+ Vec3 vec33 = this.minecraft.teleportTracker.getInterpolatedArcPosition((float)d2).subtract(this.minecraft.getCameraEntity().position()); -+ float f2 = (float)d2 * 2.0F; -+ this.renderBox(tesselator, vec32, vec33, -f, f, (-1.0F + f2) * f, (1.0F + f2) * f, vec31, vec3i, b0, poseStack); -+ } -+ -+ tesselator.end(); -+ RenderSystem.disableCull(); -+ -+ if (flag1 && this.minecraft.teleportTracker.movementTeleportProgress >= 1.0D) -+ { -+ Vec3 vec34 = (new Vec3(vec3.x, vec3.y, vec3.z)).subtract(this.minecraft.getCameraEntity().position()); -+ int l = 1; -+ float f1 = 0.01F; -+ double d4 = 0.0D; -+ double d5 = 0.0D; -+ double d3 = 0.0D; -+ -+ if (l == 0) -+ { -+ d5 -= (double)f1; -+ } -+ -+ if (l == 1) -+ { -+ d5 += (double)f1; -+ } -+ -+ if (l == 2) -+ { -+ d3 -= (double)f1; -+ } -+ -+ if (l == 3) -+ { -+ d3 += (double)f1; -+ } -+ -+ if (l == 4) -+ { -+ d4 -= (double)f1; -+ } -+ -+ if (l == 5) -+ { -+ d4 += (double)f1; -+ } -+ -+ this.renderFlatQuad(vec34.add(d4, d5, d3), 0.6F, 0.6F, 0.0F, (int)((double)vec3i.getX() * 1.03D), (int)((double)vec3i.getY() * 1.03D), (int)((double)vec3i.getZ() * 1.03D), 64, poseStack); -+ -+ if (l == 0) -+ { -+ d5 -= (double)f1; -+ } -+ -+ if (l == 1) -+ { -+ d5 += (double)f1; -+ } -+ -+ if (l == 2) -+ { -+ d3 -= (double)f1; -+ } -+ -+ if (l == 3) -+ { -+ d3 += (double)f1; -+ } -+ -+ if (l == 4) -+ { -+ d4 -= (double)f1; -+ } -+ -+ if (l == 5) -+ { -+ d4 += (double)f1; -+ } -+ -+ this.renderFlatQuad(vec34.add(d4, d5, d3), 0.4F, 0.4F, 0.0F, (int)((double)vec3i.getX() * 1.04D), (int)((double)vec3i.getY() * 1.04D), (int)((double)vec3i.getZ() * 1.04D), 64, poseStack); -+ -+ if (l == 0) -+ { -+ d5 -= (double)f1; -+ } -+ -+ if (l == 1) -+ { -+ d5 += (double)f1; -+ } -+ -+ if (l == 2) -+ { -+ d3 -= (double)f1; -+ } -+ -+ if (l == 3) -+ { -+ d3 += (double)f1; -+ } -+ -+ if (l == 4) -+ { -+ d4 -= (double)f1; -+ } -+ -+ if (l == 5) -+ { -+ d4 += (double)f1; -+ } -+ -+ this.renderFlatQuad(vec34.add(d4, d5, d3), 0.2F, 0.2F, 0.0F, (int)((double)vec3i.getX() * 1.05D), (int)((double)vec3i.getY() * 1.05D), (int)((double)vec3i.getZ() * 1.05D), 64, poseStack); -+ } -+ -+ this.minecraft.getProfiler().pop(); -+ RenderSystem.enableCull(); -+ } -+ } -+ -+ public boolean shouldRenderCrosshair() -+ { -+ if (Main.viewonly) -+ { -+ return false; -+ } -+ else if (this.minecraft.level == null) -+ { -+ return false; -+ } -+ else if (this.minecraft.screen != null) -+ { -+ return false; -+ } -+ else -+ { -+ boolean flag = this.dataholder.vrSettings.renderInGameCrosshairMode == VRSettings.RenderPointerElement.ALWAYS || -+ (this.dataholder.vrSettings.renderInGameCrosshairMode == VRSettings.RenderPointerElement.WITH_HUD && !this.minecraft.options.hideGui); -+ -+ if (!flag) -+ { -+ return false; -+ } -+ else if (this.minecraft.currentPass == RenderPass.THIRD) -+ { -+ return false; -+ } -+ else if (this.minecraft.currentPass != RenderPass.SCOPEL && this.minecraft.currentPass != RenderPass.SCOPER) -+ { -+ if (this.minecraft.currentPass == RenderPass.CAMERA) -+ { -+ return false; -+ } -+ else if (KeyboardHandler.Showing) -+ { -+ return false; -+ } -+ else if (RadialHandler.isUsingController(ControllerType.RIGHT)) -+ { -+ return false; -+ } -+ else if (this.dataholder.bowTracker.isNotched()) -+ { -+ return false; -+ } -+ else if (!this.minecraft.vr.getInputAction(this.minecraft.vr.keyVRInteract).isEnabledRaw(ControllerType.RIGHT) && !this.minecraft.vr.keyVRInteract.isDown(ControllerType.RIGHT)) -+ { -+ if (!this.minecraft.vr.getInputAction(this.minecraft.vr.keyClimbeyGrab).isEnabledRaw(ControllerType.RIGHT) && !this.minecraft.vr.keyClimbeyGrab.isDown(ControllerType.RIGHT)) -+ { -+ if (this.minecraft.teleportTracker.isAiming()) -+ { -+ return false; -+ } -+ else if (this.minecraft.climbTracker.isGrabbingLadder(0)) -+ { -+ return false; -+ } -+ else -+ { -+ return !(this.minecraft.vrPlayer.worldScale > 15.0F); -+ } -+ } -+ else -+ { -+ return false; -+ } -+ } -+ else -+ { -+ return false; -+ } -+ } -+ else -+ { -+ return false; -+ } -+ } -+ } -+ -+ private void renderCrosshairAtDepth(boolean depthAlways, PoseStack poseStack) -+ { -+ if (this.shouldRenderCrosshair()) -+ { -+ this.minecraft.getProfiler().popPush("crosshair"); -+ GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); -+ Vec3 vec3 = this.crossVec; -+ Vec3 vec31 = vec3.subtract(this.minecraft.vrPlayer.vrdata_world_render.getController(0).getPosition()); -+ float f = (float)vec31.length(); -+ float f1 = (float)((double)(0.125F * this.dataholder.vrSettings.crosshairScale) * Math.sqrt((double)this.minecraft.vrPlayer.vrdata_world_render.worldScale)); -+ vec3 = vec3.add(vec31.normalize().scale(-0.01D)); -+ poseStack.pushPose(); -+ poseStack.setIdentity(); -+ applyVRModelView(minecraft.currentPass, poseStack); -+ -+ Vec3 vec32 = vec3.subtract(this.minecraft.getCameraEntity().position()); -+ poseStack.translate(vec32.x, vec32.y, vec32.z); -+ -+ if (this.minecraft.hitResult != null && this.minecraft.hitResult.getType() == HitResult.Type.BLOCK) -+ { -+ BlockHitResult blockhitresult = (BlockHitResult)this.minecraft.hitResult; -+ -+ if (blockhitresult.getDirection() == Direction.DOWN) -+ { -+ poseStack.rotateDeg(this.minecraft.vrPlayer.vrdata_world_render.getController(0).getYaw(), 0.0F, 1.0F, 0.0F); -+ poseStack.rotateDeg(-90.0F, 1.0F, 0.0F, 0.0F); -+ } -+ else if (blockhitresult.getDirection() == Direction.EAST) -+ { -+ poseStack.rotateDeg(90.0F, 0.0F, 1.0F, 0.0F); -+ } -+ else if (blockhitresult.getDirection() != Direction.NORTH && blockhitresult.getDirection() != Direction.SOUTH) -+ { -+ if (blockhitresult.getDirection() == Direction.UP) -+ { -+ poseStack.rotateDeg(-this.minecraft.vrPlayer.vrdata_world_render.getController(0).getYaw(), 0.0F, 1.0F, 0.0F); -+ poseStack.rotateDeg(-90.0F, 1.0F, 0.0F, 0.0F); -+ } -+ else if (blockhitresult.getDirection() == Direction.WEST) -+ { -+ poseStack.rotateDeg(90.0F, 0.0F, 1.0F, 0.0F); -+ } -+ } -+ } -+ else -+ { -+ poseStack.rotateDeg(-this.minecraft.vrPlayer.vrdata_world_render.getController(0).getYaw(), 0.0F, 1.0F, 0.0F); -+ poseStack.rotateDeg(-this.minecraft.vrPlayer.vrdata_world_render.getController(0).getPitch(), 1.0F, 0.0F, 0.0F); -+ } -+ -+ if (this.dataholder.vrSettings.crosshairScalesWithDistance) -+ { -+ float f5 = 0.3F + 0.2F * f; -+ f1 *= f5; -+ } -+ -+ this.lightTexture.turnOnLightLayer(); -+ poseStack.scale(f1, f1, f1); -+ RenderSystem.depthMask(true); -+ RenderSystem.enableDepthTest(); -+ //RenderSystem.disableLighting(); -+ RenderSystem.disableCull(); -+ GlStateManager.enableAlphaTest(); -+ -+ if (depthAlways) -+ { -+ RenderSystem.depthFunc(519); -+ } -+ else -+ { -+ RenderSystem.depthFunc(515); -+ } -+ -+ boolean flag = Config.isShaders(); -+ RenderSystem.enableBlend(); -+ RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.ONE_MINUS_DST_COLOR, GlStateManager.DestFactor.ZERO, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); -+ int i = LevelRenderer.getLightColor(this.minecraft.level, new BlockPos(vec3)); -+ float f2 = 1.0F; -+ -+ if (this.minecraft.hitResult == null || this.minecraft.hitResult.getType() == HitResult.Type.MISS) -+ { -+ f2 = 0.5F; -+ } -+ -+ RenderSystem.setShaderTexture(0, Screen.GUI_ICONS_LOCATION); -+ float f3 = 0.00390625F; -+ float f4 = 0.00390625F; -+ -+ BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); -+ -+ RenderSystem.setShader(GameRenderer::getRendertypeCutoutShader); -+ bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION_TEX_LMAP_COLOR_NORMAL); -+ bufferbuilder.vertex(poseStack.last().pose(), -1.0F, 1.0F, 0.0F).uv(0.0F, 15.0F * f4).uv2(i).color(f2, f2, f2, 1.0F).normal(0.0F, 0.0F, 1.0F).endVertex(); -+ bufferbuilder.vertex(poseStack.last().pose(), 1.0F, 1.0F, 0.0F).uv(15.0F * f3, 15.0F * f4).uv2(i).color(f2, f2, f2, 1.0F).normal(0.0F, 0.0F, 1.0F).endVertex(); -+ bufferbuilder.vertex(poseStack.last().pose(), 1.0F, -1.0F, 0.0F).uv(15.0F * f3, 0.0F).uv2(i).color(f2, f2, f2, 1.0F).normal(0.0F, 0.0F, 1.0F).endVertex(); -+ bufferbuilder.vertex(poseStack.last().pose(), -1.0F, -1.0F, 0.0F).uv(0.0F, 0.0F).uv2(i).color(f2, f2, f2, 1.0F).normal(0.0F, 0.0F, 1.0F).endVertex(); -+ Tesselator.getInstance().end(); -+ RenderSystem.defaultBlendFunc(); -+ RenderSystem.disableBlend(); -+ RenderSystem.enableCull(); -+ RenderSystem.depthFunc(515); -+ poseStack.popPose(); -+ } -+ } -+ -+ -+ private void setupOverlayStatus(float partialTicks) -+ { -+ this.inBlock = 0.0F; -+ this.inwater = false; -+ this.onfire = false; -+ -+ if (!this.minecraft.player.isSpectator() && !this.isInMenuRoom() && this.minecraft.player.isAlive()) -+ { -+ Vec3 vec3 = this.minecraft.vrPlayer.vrdata_world_render.getEye(this.minecraft.currentPass).getPosition(); -+ Triple triple = this.itemInHandRenderer.getNearOpaqueBlock(vec3, (double)this.minClipDistance); -+ -+ if (triple != null && !Reflector.callBoolean(Reflector.ForgeEventFactory_renderBlockOverlay, this.minecraft.player, new PoseStack(), Reflector.getFieldValue(Reflector.RenderBlockOverlayEvent_OverlayType_BLOCK), triple.getMiddle(), triple.getRight())) -+ { -+ this.inBlock = triple.getLeft(); -+ } -+ else -+ { -+ this.inBlock = 0.0F; -+ } -+ -+ this.inwater = this.minecraft.player.isEyeInFluid(FluidTags.WATER) && !Reflector.callBoolean(Reflector.ForgeEventFactory_renderWaterOverlay, this.minecraft.player, new PoseStack()); -+ this.onfire = this.minecraft.currentPass != RenderPass.THIRD && this.minecraft.currentPass != RenderPass.CAMERA && this.minecraft.player.isOnFire() && !Reflector.callBoolean(Reflector.ForgeEventFactory_renderFireOverlay, this.minecraft.player, new PoseStack()); -+ } -+ } -+ -+ public boolean shouldOccludeGui() -+ { -+ Vec3 vec3 = this.minecraft.vrPlayer.vrdata_world_render.getEye(this.minecraft.currentPass).getPosition(); -+ -+ if (this.minecraft.currentPass != RenderPass.THIRD && this.minecraft.currentPass != RenderPass.CAMERA) -+ { -+ return !this.isInMenuRoom() && this.minecraft.screen == null && !KeyboardHandler.Showing && !RadialHandler.isShowing() && this.dataholder.vrSettings.hudOcclusion && !this.itemInHandRenderer.isInsideOpaqueBlock(vec3); -+ } -+ else -+ { -+ return true; -+ } -+ } -+ -+ public boolean shouldRenderHands() -+ { -+ if (Main.viewonly) -+ { -+ return false; -+ } -+ else if (this.minecraft.currentPass == RenderPass.THIRD) -+ { -+ return this.dataholder.vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY; -+ } -+ else -+ { -+ return this.minecraft.currentPass != RenderPass.CAMERA; -+ } -+ } -+ -+ private void renderSwingDebug(int c) -+ { -+ } -+ -+ public void setupClipPlanes() -+ { -+ this.renderDistance = (float)(this.minecraft.options.getEffectiveRenderDistance() * 16); -+ this.clipDistance = this.renderDistance + 1024.0F; -+ } -+ -+ void renderMainMenuHand(int c, float partialTicks, boolean depthAlways, PoseStack poseStack) -+ { -+ this.resetProjectionMatrix(this.getProjectionMatrix(this.getFov(mainCamera, partialTicks, false))); -+ poseStack.pushPose(); -+ poseStack.setIdentity(); -+ RenderSystem.disableTexture(); -+ GlStateManager.disableAlphaTest(); -+ RenderSystem.enableDepthTest(); -+ applyVRModelView(minecraft.currentPass, poseStack); -+ SetupRenderingAtController(c, poseStack); -+ -+ if (this.minecraft.getOverlay() == null) -+ { -+ minecraft.getTextureManager().bindForSetup(new ResourceLocation("vivecraft:textures/white.png")); -+ RenderSystem.setShaderTexture(0, new ResourceLocation("vivecraft:textures/white.png")); -+ } -+ -+ Tesselator tesselator = Tesselator.getInstance(); -+ -+ if (depthAlways && c == 0) -+ { -+ RenderSystem.depthFunc(519); -+ } -+ else -+ { -+ RenderSystem.depthFunc(515); -+ } -+ -+ Vec3i vec3i = new Vec3i(64, 64, 64); -+ byte b0 = -1; -+ Vec3 vec3 = new Vec3(0.0D, 0.0D, 0.0D); -+ Vec3 vec31 = this.minecraft.vrPlayer.vrdata_world_render.getController(c).getDirection(); -+ Vec3 vec32 = this.minecraft.vrPlayer.vrdata_world_render.getController(c).getCustomVector(new Vec3(0.0D, 1.0D, 0.0D)); -+ vec32 = new Vec3(0.0D, 1.0D, 0.0D); -+ vec31 = new Vec3(0.0D, 0.0D, -1.0D); -+ Vec3 vec33 = new Vec3(vec3.x - vec31.x * 0.18D, vec3.y - vec31.y * 0.18D, vec3.z - vec31.z * 0.18D); -+ -+ if (this.minecraft.level != null) -+ { -+ float f = (float)this.minecraft.level.getMaxLocalRawBrightness(new BlockPos(this.minecraft.vrPlayer.vrdata_world_render.hmd.getPosition())); -+ int i = Config.isShaders() ? 8 : 4; -+ -+ if (f < (float)i) -+ { -+ f = (float)i; -+ } -+ -+ float f1 = f / (float)this.minecraft.level.getMaxLightLevel(); -+ vec3i = new Vec3i((double)((float)vec3i.getX() * f1), (double)((float)vec3i.getY() * f1), (double)((float)vec3i.getZ() * f1)); -+ } -+ RenderSystem.setShader(GameRenderer::getPositionColorShader); -+ tesselator.getBuilder().begin(Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_NORMAL); -+ this.renderBox(tesselator, vec3, vec33, -0.02F, 0.02F, -0.0125F, 0.0125F, vec32, vec3i, b0, poseStack); -+ tesselator.getBuilder().end(); -+ BufferUploader.end(tesselator.getBuilder()); -+ RenderSystem.enableTexture(); -+ poseStack.popPose(); -+ RenderSystem.depthFunc(515); -+ } -+ -+ private void renderFaceOverlay(float par1, PoseStack pMatrix) -+ { -+ boolean flag = Config.isShaders(); -+ -+ if (flag) -+ { -+ Shaders.beginFPOverlay(); -+ } -+ -+ if (this.inBlock > 0.0F) -+ { -+ this.renderFaceInBlock(); -+ this.renderGuiLayer(par1, true, pMatrix); -+ -+ if (KeyboardHandler.Showing) -+ { -+ if (this.dataholder.vrSettings.physicalKeyboard) -+ { -+ this.renderPhysicalKeyboard(par1, pMatrix); -+ } -+ else -+ { -+ this.render2D(par1, KeyboardHandler.Framebuffer, KeyboardHandler.Pos_room, KeyboardHandler.Rotation_room, true, pMatrix); -+ } -+ } -+ -+ if (RadialHandler.isShowing()) -+ { -+ this.render2D(par1, RadialHandler.Framebuffer, RadialHandler.Pos_room, RadialHandler.Rotation_room, true, pMatrix); -+ } -+ -+ if (this.inBlock >= 1.0F) -+ { -+ this.renderVRHands(par1, true, true, true, true, pMatrix); -+ } -+ } -+ -+ if (flag) -+ { -+ Shaders.endFPOverlay(); -+ } -+ } -+ -+ private void renderFaceInBlock() -+ { -+ Tesselator tesselator = Tesselator.getInstance(); -+ BufferBuilder bufferbuilder = tesselator.getBuilder(); -+ GlStateManager.color4f(0.0F, 0.0F, 0.0F, this.minecraft.gameRenderer.inBlock); -+ Matrix4f mat = new Matrix4f(); -+ mat = mat.orthographic(1, 1, 0, 1); -+ GlStateManager._disableDepthTest(); -+ GlStateManager._disableTexture(); -+ GlStateManager._enableBlend(); -+ GlStateManager._disableCull(); -+ bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION); -+ bufferbuilder.vertex(mat, -1.0F, -1.0F, 0.0F).endVertex(); -+ bufferbuilder.vertex(mat, 2.0F, -1.0F, 0.0F).endVertex(); -+ bufferbuilder.vertex(mat, 2.0F, 2.0F, 0.0F).endVertex(); -+ bufferbuilder.vertex(mat, -1.0F, 2.0F, 0.0F).endVertex(); -+ tesselator.end(); -+ GlStateManager._enableTexture(); -+ GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); -+ } -+ -+ private void renderFireInFirstPerson() -+ { -+ PoseStack posestack = new PoseStack(); -+ this.applyVRModelView(this.minecraft.currentPass, posestack); -+ this.applystereo(this.minecraft.currentPass, posestack); -+ BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); -+ RenderSystem.depthFunc(519); -+ -+ if (this.minecraft.currentPass == RenderPass.THIRD || this.minecraft.currentPass == RenderPass.CAMERA) -+ { -+ GlStateManager._depthFunc(515); -+ } -+ -+ RenderSystem.enableBlend(); -+ RenderSystem.defaultBlendFunc(); -+ TextureAtlasSprite textureatlassprite = ModelBakery.FIRE_1.sprite(); -+ RenderSystem.enableDepthTest(); -+ -+ if (SmartAnimations.isActive()) -+ { -+ SmartAnimations.spriteRendered(textureatlassprite); -+ } -+ -+ RenderSystem.setShader(GameRenderer::getPositionColorTexShader); -+ RenderSystem.setShaderTexture(0, textureatlassprite.atlas().location()); -+ float f = textureatlassprite.getU0(); -+ float f1 = textureatlassprite.getU1(); -+ float f2 = (f + f1) / 2.0F; -+ float f3 = textureatlassprite.getV0(); -+ float f4 = textureatlassprite.getV1(); -+ float f5 = (f3 + f4) / 2.0F; -+ float f6 = textureatlassprite.uvShrinkRatio(); -+ float f7 = Mth.lerp(f6, f, f2); -+ float f8 = Mth.lerp(f6, f1, f2); -+ float f9 = Mth.lerp(f6, f3, f5); -+ float f10 = Mth.lerp(f6, f4, f5); -+ float f11 = 1.0F; -+ float f12 = 0.3F; -+ float f13 = (float)(this.minecraft.vrPlayer.vrdata_world_render.getHeadPivot().y - this.minecraft.gameRenderer.rveY); -+ -+ for (int i = 0; i < 4; ++i) -+ { -+ posestack.pushPose(); -+ posestack.mulPose(Vector3f.YP.rotationDegrees((float)i * 90.0F - this.minecraft.vrPlayer.vrdata_world_render.getBodyYaw())); -+ posestack.translate(0.0D, (double)(-f13), 0.0D); -+ Matrix4f matrix4f = posestack.last().pose(); -+ bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_TEX); -+ bufferbuilder.vertex(matrix4f, -f12, 0.0F, -f12).color(1.0F, 1.0F, 1.0F, 0.9F).uv(f8, f10).endVertex(); -+ bufferbuilder.vertex(matrix4f, f12, 0.0F, -f12).color(1.0F, 1.0F, 1.0F, 0.9F).uv(f7, f10).endVertex(); -+ bufferbuilder.vertex(matrix4f, f12, f13, -f12).color(1.0F, 1.0F, 1.0F, 0.9F).uv(f7, f9).endVertex(); -+ bufferbuilder.vertex(matrix4f, -f12, f13, -f12).color(1.0F, 1.0F, 1.0F, 0.9F).uv(f8, f9).endVertex(); -+ bufferbuilder.end(); -+ BufferUploader.end(bufferbuilder); -+ posestack.popPose(); -+ } -+ -+ RenderSystem.depthFunc(515); -+ RenderSystem.disableBlend(); -+ } -+ -+ private void renderVRSelfEffects(float par1) -+ { -+ if (this.onfire && this.minecraft.currentPass != RenderPass.THIRD && this.minecraft.currentPass != RenderPass.CAMERA) -+ { -+ -+ if (this.onfire) -+ { -+ this.renderFireInFirstPerson(); -+ } -+ -+ this.renderItemActivationAnimation(0, 0, par1); -+ } -+ } -+ -+ private void renderVrShadow(float par1, boolean depthAlways, PoseStack poseStack) -+ { -+ if (this.minecraft.currentPass != RenderPass.THIRD && this.minecraft.currentPass != RenderPass.CAMERA) -+ { -+ if (this.minecraft.player.isAlive()) -+ { -+ if (!(this.minecraft.player.getRoomYOffsetFromPose() < 0.0D)) -+ { -+ if (this.minecraft.player.getVehicle() == null) -+ { -+ AABB aabb = this.minecraft.player.getBoundingBox(); -+ -+ if (this.dataholder.vrSettings.vrShowBlueCircleBuddy && aabb != null) -+ { -+ -+ poseStack.pushPose(); -+ poseStack.setIdentity(); -+ GlStateManager._disableCull(); -+ this.applyVRModelView(minecraft.currentPass, poseStack); -+ Vec3 vec3 = this.minecraft.vrPlayer.vrdata_world_render.getEye(this.minecraft.currentPass).getPosition(); -+ LocalPlayer localplayer = this.minecraft.player; -+ Vec3 vec31 = new Vec3(this.rvelastX + (this.rveX - this.rvelastX) * (double)par1, this.rvelastY + (this.rveY - this.rvelastY) * (double)par1, this.rvelastZ + (this.rveZ - this.rvelastZ) * (double)par1); -+ Vec3 vec32 = vec31.subtract(vec3).add(0.0D, 0.005D, 0.0D); -+ this.setupPolyRendering(true); -+ RenderSystem.enableDepthTest(); -+ -+ if (depthAlways) -+ { -+ RenderSystem.depthFunc(519); -+ } -+ else -+ { -+ GlStateManager._depthFunc(515); -+ } -+ -+ RenderSystem.setShader(GameRenderer::getPositionColorShader); -+ minecraft.getTextureManager().bindForSetup(new ResourceLocation("vivecraft:textures/white.png")); -+ RenderSystem.setShaderTexture(0, new ResourceLocation("vivecraft:textures/white.png")); -+ this.renderFlatQuad(vec32, (float)(aabb.maxX - aabb.minX), (float)(aabb.maxZ - aabb.minZ), 0.0F, 0, 0, 0, 64, poseStack); -+ RenderSystem.depthFunc(515); -+ this.setupPolyRendering(false); -+ poseStack.popPose(); -+ GlStateManager._enableCull(); -+ } -+ } -+ } -+ } -+ } -+ } -+ -+ void DrawScopeFB(PoseStack matrixStackIn, int i) -+ { -+ if (this.minecraft.currentPass != RenderPass.SCOPEL && this.minecraft.currentPass != RenderPass.SCOPER) -+ { -+ this.lightTexture.turnOffLightLayer(); -+ matrixStackIn.pushPose(); -+ RenderSystem.enableDepthTest(); -+ RenderSystem.enableTexture(); -+ -+ if (i == 0) -+ { -+ this.minecraft.vrRenderer.telescopeFramebufferR.bindRead(); -+ RenderSystem.setShaderTexture(0, this.minecraft.vrRenderer.telescopeFramebufferR.getColorTextureId()); -+ } -+ else -+ { -+ this.minecraft.vrRenderer.telescopeFramebufferL.bindRead(); -+ RenderSystem.setShaderTexture(0, this.minecraft.vrRenderer.telescopeFramebufferL.getColorTextureId()); -+ } -+ -+ float scale = 0.0785F; -+ //actual framebuffer -+ float f = TelescopeTracker.viewPercent(i); -+ this.drawSizedQuad(720.0F, 720.0F, scale, new float[]{f, f, f, 1}, matrixStackIn.last().pose()); -+ -+ RenderSystem.setShaderTexture(0, Gui.SPYGLASS_SCOPE_LOCATION); -+ RenderSystem.enableBlend(); -+ matrixStackIn.translate(0.0D, 0.0D, 0.00001D); -+ int light = LevelRenderer.getLightColor(this.minecraft.level, new BlockPos(minecraft.vrPlayer.vrdata_world_render.getController(i).getPosition())); -+ this.drawSizedQuadWithLightmap(720.0F, 720.0F, scale, light, matrixStackIn.last().pose()); -+ -+ matrixStackIn.popPose(); -+ this.lightTexture.turnOnLightLayer(); -+ } -+ } -+ -+ void drawEyeStencil(boolean shaders) -+ { -+ if (this.minecraft.currentPass != RenderPass.SCOPEL && this.minecraft.currentPass != RenderPass.SCOPER) -+ { -+ if ((this.minecraft.currentPass == RenderPass.LEFT || this.minecraft.currentPass == RenderPass.RIGHT) && this.dataholder.vrSettings.vrUseStencil) -+ { -+ net.optifine.shaders.Program program = Shaders.activeProgram; -+ -+ if (shaders && Shaders.dfb != null) -+ { -+ Shaders.dfb.bindFramebuffer(); -+ Shaders.useProgram(Shaders.ProgramNone); -+ -+ for (int i = 0; i < Shaders.usedDepthBuffers; ++i) -+ { -+ GlStateManager._bindTexture(Shaders.dfb.depthTextures.get(i)); -+ this.minecraft.vrRenderer.doStencil(false); -+ } -+ -+ Shaders.useProgram(program); -+ } -+ else -+ { -+ this.minecraft.vrRenderer.doStencil(false); -+ } -+ } -+ else -+ { -+ GL11.glDisable(GL11.GL_STENCIL_TEST); -+ } -+ } -+ else -+ { -+ //this.minecraft.vrRenderer.doStencil(true); -+ } -+ } -+ -+ public void applyVRModelView(RenderPass currentPass, PoseStack matrix) -+ { -+ matrix.last().pose().multiply(this.minecraft.vrPlayer.vrdata_world_render.getEye(currentPass).getMatrix().transposed().toMCMatrix()); -+ } -+ -+ public void applystereo(RenderPass currentPass, PoseStack matrix) -+ { -+ if (currentPass == RenderPass.LEFT || currentPass == RenderPass.RIGHT) -+ { -+ Vec3 vec3 = this.minecraft.vrPlayer.vrdata_world_render.getEye(currentPass).getPosition().subtract(this.minecraft.vrPlayer.vrdata_world_render.getEye(RenderPass.CENTER).getPosition()); -+ matrix.translate((double)((float)(-vec3.x)), (double)((float)(-vec3.y)), (double)((float)(-vec3.z))); -+ } -+ } -+ -+ public void removeStereo(RenderPass currentPass, PoseStack matrix) -+ { -+ if (currentPass == RenderPass.LEFT || currentPass == RenderPass.RIGHT) -+ { -+ Vec3 vec3 = this.minecraft.vrPlayer.vrdata_world_render.getEye(currentPass).getPosition().subtract(this.minecraft.vrPlayer.vrdata_world_render.getEye(RenderPass.CENTER).getPosition()); -+ matrix.translate((double)((float)vec3.x), (double)((float)vec3.y), (double)((float)vec3.z)); -+ } -+ } -+ -+ private void setupPolyRendering(boolean enable) -+ { -+ boolean flag = Config.isShaders(); -+ -+ if (enable) -+ { -+ this.polyblendsrca = GlStateManager.BLEND.srcAlpha; -+ this.polyblenddsta = GlStateManager.BLEND.dstAlpha; -+ this.polyblendsrcrgb = GlStateManager.BLEND.srcRgb; -+ this.polyblenddstrgb = GlStateManager.BLEND.dstRgb; -+ this.polyblend = GL11.glIsEnabled(GL11.GL_BLEND); -+ this.polytex = GL11.glIsEnabled(GL11.GL_TEXTURE_2D); -+ this.polylight = GL11.glIsEnabled(GL11.GL_LIGHTING); -+ this.polycull = GL11.glIsEnabled(GL11.GL_CULL_FACE); -+ GlStateManager._enableBlend(); -+ RenderSystem.defaultBlendFunc(); -+ GlStateManager._disableTexture(); -+ //GlStateManager._disableLighting(); -+ GlStateManager._disableCull(); -+ -+ if (flag) -+ { -+ this.prog = Shaders.activeProgram; -+ Shaders.useProgram(Shaders.ProgramTextured); -+ } -+ } -+ else -+ { -+ RenderSystem.blendFuncSeparate(this.polyblendsrcrgb, this.polyblenddstrgb, this.polyblendsrca, this.polyblenddsta); -+ -+ if (!this.polyblend) -+ { -+ GlStateManager._disableBlend(); -+ } -+ -+ if (this.polytex) -+ { -+ GlStateManager._enableTexture(); -+ } -+ -+ if (this.polylight) -+ { -+ //GlStateManager._enableLighting(); -+ } -+ -+ if (this.polycull) -+ { -+ GlStateManager._enableCull(); -+ } -+ -+ if (flag && this.polytex) -+ { -+ Shaders.useProgram(this.prog); -+ } -+ } -+ } -+ -+ public void setupRVE() -+ { -+ if (this.cached) -+ { -+ VRData.VRDevicePose vrdata$vrdevicepose = this.minecraft.vrPlayer.vrdata_world_render.getEye(this.minecraft.currentPass); -+ Vec3 vec3 = vrdata$vrdevicepose.getPosition(); -+ LivingEntity livingentity = (LivingEntity)this.minecraft.getCameraEntity(); -+ livingentity.setPosRaw(vec3.x, vec3.y, vec3.z); -+ livingentity.xOld = vec3.x; -+ livingentity.yOld = vec3.y; -+ livingentity.zOld = vec3.z; -+ livingentity.xo = vec3.x; -+ livingentity.yo = vec3.y; -+ livingentity.zo = vec3.z; -+ livingentity.setXRot(-vrdata$vrdevicepose.getPitch()); -+ livingentity.xRotO = livingentity.getXRot(); -+ livingentity.setYRot(vrdata$vrdevicepose.getYaw()); -+ livingentity.yHeadRot = livingentity.getYRot(); -+ livingentity.yHeadRotO = livingentity.getYRot(); -+ -+ MCReflection.Entity_eyeHeight.set(livingentity, 0); -+ } -+ } -+ -+ public void cacheRVEPos(LivingEntity e) -+ { -+ if (this.minecraft.getCameraEntity() != null) -+ { -+ if (!this.cached) -+ { -+ this.rveX = e.getX(); -+ this.rveY = e.getY(); -+ this.rveZ = e.getZ(); -+ this.rvelastX = e.xOld; -+ this.rvelastY = e.yOld; -+ this.rvelastZ = e.zOld; -+ this.rveprevX = e.xo; -+ this.rveprevY = e.yo; -+ this.rveprevZ = e.zo; -+ this.rveyaw = e.yHeadRot; -+ this.rvepitch = e.getXRot(); -+ this.rvelastyaw = e.yHeadRotO; -+ this.rvelastpitch = e.xRotO; -+ this.rveHeight = e.getEyeHeight(); -+ this.cached = true; -+ } -+ } -+ } -+ -+ public void restoreRVEPos(LivingEntity e) -+ { -+ if (e != null) -+ { -+ e.setPosRaw(this.rveX, this.rveY, this.rveZ); -+ e.xOld = this.rvelastX; -+ e.yOld = this.rvelastY; -+ e.zOld = this.rvelastZ; -+ e.xo = this.rveprevX; -+ e.yo = this.rveprevY; -+ e.zo = this.rveprevZ; -+ e.setYRot(this.rveyaw); -+ e.setXRot(this.rvepitch); -+ e.yRotO = this.rvelastyaw; -+ e.xRotO = this.rvelastpitch; -+ e.yHeadRot = this.rveyaw; -+ e.yHeadRotO = this.rvelastyaw; -+ MCReflection.Entity_eyeHeight.set(e, this.rveHeight); -+ this.cached = false; -+ } -+ } -+ -+ public boolean isInMenuRoom() -+ { -+ return this.minecraft.level == null || this.minecraft.screen instanceof WinScreen || this.minecraft.integratedServerLaunchInProgress || this.minecraft.getOverlay() != null; -+ } -+ -+ void renderVRHands(float partialTicks, boolean renderright, boolean renderleft, boolean menuhandright, boolean menuhandleft, PoseStack poseStack) -+ { -+ this.minecraft.getProfiler().push("hands"); -+ -+ if (renderright) -+ { -+ this.minecraft.getItemRenderer(); -+ ItemRenderer.ismainhand = true; -+ -+ if (menuhandright) -+ { -+ this.renderMainMenuHand(0, partialTicks, false, poseStack); -+ } -+ else -+ { -+ this.resetProjectionMatrix(this.getProjectionMatrix(this.getFov(this.mainCamera, partialTicks, true))); -+ PoseStack posestack = new PoseStack(); -+ posestack.last().pose().setIdentity(); -+ this.applyVRModelView(this.minecraft.currentPass, posestack); -+ this.renderVRHand_Main(posestack, partialTicks); -+ this.renderSwingDebug(0); -+ } -+ -+ this.minecraft.getItemRenderer(); -+ ItemRenderer.ismainhand = false; -+ } -+ -+ if (renderleft) -+ { -+ if (menuhandleft) -+ { -+ this.renderMainMenuHand(1, partialTicks, false, poseStack); -+ } -+ else -+ { -+ this.resetProjectionMatrix(this.getProjectionMatrix(this.getFov(this.mainCamera, partialTicks, true))); -+ PoseStack posestack1 = new PoseStack(); -+ posestack1.last().pose().setIdentity(); -+ this.applyVRModelView(this.minecraft.currentPass, posestack1); -+ this.renderVRHand_Offhand(partialTicks, true, posestack1); -+ this.renderSwingDebug(1); -+ } -+ } -+ -+ this.minecraft.getProfiler().pop(); -+ } -+ -+ private void renderVRHand_Main(PoseStack matrix, float partialTicks) -+ { -+ matrix.pushPose(); -+ this.SetupRenderingAtController(0, matrix); -+ ItemStack itemstack = this.minecraft.player.getMainHandItem(); -+ ItemStack itemstack1 = null; //this.minecraft.physicalGuiManager.getHeldItemOverride(); -+ -+ if (itemstack1 != null) -+ { -+ itemstack = itemstack1; -+ } -+ -+ if (this.minecraft.climbTracker.isClimbeyClimb() && itemstack.getItem() != Items.SHEARS) -+ { -+ itemstack = itemstack1 == null ? this.minecraft.player.getOffhandItem() : itemstack1; -+ } -+ -+ if (BowTracker.isHoldingBow(this.minecraft.player, InteractionHand.MAIN_HAND)) -+ { -+ int i = 0; -+ -+ if (this.dataholder.vrSettings.reverseShootingEye) -+ { -+ i = 1; -+ } -+ -+ ItemStack itemstack2 = this.minecraft.player.getProjectile(this.minecraft.player.getMainHandItem()); -+ -+ if (itemstack2 != ItemStack.EMPTY && !this.dataholder.bowTracker.isNotched()) -+ { -+ itemstack = itemstack2; -+ } -+ else -+ { -+ itemstack = ItemStack.EMPTY; -+ } -+ } -+ else if (BowTracker.isHoldingBow(this.minecraft.player, InteractionHand.OFF_HAND) && this.dataholder.bowTracker.isNotched()) -+ { -+ int j = 0; -+ -+ if (this.dataholder.vrSettings.reverseShootingEye) -+ { -+ j = 1; -+ } -+ -+ itemstack = ItemStack.EMPTY; -+ } -+ -+ boolean flag = false; -+ -+ if (Config.isShaders()) -+ { -+ Shaders.beginHand(matrix, flag); -+ } -+ else -+ { -+ matrix.pushPose(); -+ } -+ -+ this.lightTexture.turnOnLightLayer(); -+ MultiBufferSource.BufferSource multibuffersource$buffersource = this.renderBuffers.bufferSource(); -+ this.itemInHandRenderer.renderArmWithItem(this.minecraft.player, partialTicks, 0.0F, InteractionHand.MAIN_HAND, this.minecraft.player.getAttackAnim(partialTicks), itemstack, 0.0F, matrix, multibuffersource$buffersource, this.minecraft.getEntityRenderDispatcher().getPackedLightCoords(this.minecraft.player, partialTicks)); -+ multibuffersource$buffersource.endBatch(); -+ this.lightTexture.turnOffLightLayer(); -+ -+ if (Config.isShaders()) -+ { -+ Shaders.endHand(matrix); -+ } -+ else -+ { -+ matrix.popPose(); -+ } -+ -+ matrix.popPose(); -+ } -+ -+ private void renderVRHand_Offhand(float partialTicks, boolean renderTeleport, PoseStack matrix) -+ { -+ boolean flag = Config.isShaders(); -+ boolean flag1 = false; -+ -+ if (flag) -+ { -+ flag1 = Shaders.isShadowPass; -+ } -+ -+ matrix.pushPose(); -+ this.SetupRenderingAtController(1, matrix); -+ ItemStack itemstack = this.minecraft.player.getOffhandItem(); -+ ItemStack itemstack1 = null;//this.minecraft.physicalGuiManager.getOffhandOverride(); -+ -+ if (itemstack1 != null) -+ { -+ itemstack = itemstack1; -+ } -+ -+ if (this.minecraft.climbTracker.isClimbeyClimb() && (itemstack == null || itemstack.getItem() != Items.SHEARS)) -+ { -+ itemstack = this.minecraft.player.getMainHandItem(); -+ } -+ -+ if (BowTracker.isHoldingBow(this.minecraft.player, InteractionHand.MAIN_HAND)) -+ { -+ int i = 1; -+ -+ if (this.dataholder.vrSettings.reverseShootingEye) -+ { -+ i = 0; -+ } -+ -+ itemstack = this.minecraft.player.getMainHandItem(); -+ } -+ -+ boolean flag2 = false; -+ -+ if (Config.isShaders()) -+ { -+ Shaders.beginHand(matrix, flag2); -+ } -+ else -+ { -+ matrix.pushPose(); -+ } -+ -+ this.lightTexture.turnOnLightLayer(); -+ MultiBufferSource.BufferSource multibuffersource$buffersource = this.renderBuffers.bufferSource(); -+ this.itemInHandRenderer.renderArmWithItem(this.minecraft.player, partialTicks, 0.0F, InteractionHand.OFF_HAND, this.minecraft.player.getAttackAnim(partialTicks), itemstack, 0.0F, matrix, multibuffersource$buffersource, this.minecraft.getEntityRenderDispatcher().getPackedLightCoords(this.minecraft.player, partialTicks)); -+ multibuffersource$buffersource.endBatch(); -+ this.lightTexture.turnOffLightLayer(); -+ -+ if (Config.isShaders()) -+ { -+ Shaders.endHand(matrix); -+ } -+ else -+ { -+ matrix.popPose(); -+ } -+ -+ matrix.popPose(); -+ -+ if (renderTeleport) -+ { -+ matrix.pushPose(); -+ matrix.setIdentity(); -+ this.applyVRModelView(minecraft.currentPass, matrix); -+ net.optifine.shaders.Program program = Shaders.activeProgram; -+ -+ if (Config.isShaders()) -+ { -+ Shaders.useProgram(Shaders.ProgramTexturedLit); -+ } -+ -+ GlStateManager.enableAlphaTest(); -+ RenderSystem.enableBlend(); -+ RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); -+ RenderSystem.disableTexture(); -+ -+ if (NetworkHelper.isLimitedSurvivalTeleport() && !this.minecraft.vrPlayer.getFreeMove() && this.minecraft.gameMode.hasMissTime() && this.minecraft.teleportTracker.vrMovementStyle.arcAiming && !this.dataholder.bowTracker.isActive(this.minecraft.player)) -+ { -+ matrix.pushPose(); -+ this.SetupRenderingAtController(1, matrix); -+ Vec3 vec3 = new Vec3(0.0D, 0.005D, 0.03D); -+ float f1 = 0.03F; -+ float f; -+ -+ if (this.minecraft.teleportTracker.isAiming()) -+ { -+ f = 2.0F * (float)((double)this.minecraft.teleportTracker.getTeleportEnergy() - 4.0D * this.minecraft.teleportTracker.movementTeleportDistance) / 100.0F * f1; -+ } -+ else -+ { -+ f = 2.0F * this.minecraft.teleportTracker.getTeleportEnergy() / 100.0F * f1; -+ } -+ -+ if (f < 0.0F) -+ { -+ f = 0.0F; -+ } -+ RenderSystem.setShader(GameRenderer::getPositionColorShader); -+ minecraft.getTextureManager().bindForSetup(new ResourceLocation("vivecraft:textures/white.png")); -+ RenderSystem.setShaderTexture(0, new ResourceLocation("vivecraft:textures/white.png")); -+ this.renderFlatQuad(vec3.add(0.0D, 0.05001D, 0.0D), f, f, 0.0F, this.tpLimitedColor.getX(), this.tpLimitedColor.getY(), this.tpLimitedColor.getZ(), 128, matrix); -+ this.renderFlatQuad(vec3.add(0.0D, 0.05D, 0.0D), f1, f1, 0.0F, this.tpLimitedColor.getX(), this.tpLimitedColor.getY(), this.tpLimitedColor.getZ(), 50, matrix); -+ matrix.popPose(); -+ } -+ -+ if (this.minecraft.teleportTracker.isAiming()) -+ { -+ RenderSystem.enableDepthTest(); -+ -+ if (this.minecraft.teleportTracker.vrMovementStyle.arcAiming) -+ { -+ this.renderTeleportArc(this.minecraft.vrPlayer, matrix); -+ } -+ -+ } -+ -+ RenderSystem.enableTexture(); -+ RenderSystem.defaultBlendFunc(); -+ -+ if (Config.isShaders()) -+ { -+ Shaders.useProgram(program); -+ } -+ -+ matrix.popPose(); -+ } -+ } -+ -+ -+ void render2D(float par1, RenderTarget framebuffer, Vec3 pos, org.vivecraft.utils.math.Matrix4f rot, boolean depthAlways, PoseStack poseStack) -+ { -+ if (!this.dataholder.bowTracker.isDrawing) -+ { -+ boolean flag = this.isInMenuRoom(); -+ this.resetProjectionMatrix(this.getProjectionMatrix(this.getFov(this.mainCamera, par1, true))); -+ poseStack.pushPose(); -+ poseStack.setIdentity(); -+ this.applyVRModelView(minecraft.currentPass, poseStack); -+ Vec3 vec3 = this.minecraft.vrPlayer.vrdata_world_render.getEye(minecraft.currentPass).getPosition(); -+ Vec3 vec31 = new Vec3(0.0D, 0.0D, 0.0D); -+ float f = GuiHandler.guiScale; -+ VRPlayer vrplayer = this.minecraft.vrPlayer; -+ Vec3 guipos = VRPlayer.room_to_world_pos(pos, this.minecraft.vrPlayer.vrdata_world_render); -+ org.vivecraft.utils.math.Matrix4f matrix4f = org.vivecraft.utils.math.Matrix4f.rotationY(this.minecraft.vrPlayer.vrdata_world_render.rotation_radians); -+ org.vivecraft.utils.math.Matrix4f guirot = org.vivecraft.utils.math.Matrix4f.multiply(matrix4f, rot); -+ -+ poseStack.translate((float)(guipos.x - vec3.x), (float)(guipos.y - vec3.y), (float)(guipos.z - vec3.z)); -+ poseStack.mulPoseMatrix(guirot.toMCMatrix()); -+ poseStack.translate((float)vec31.x, (float)vec31.y, (float)vec31.z); -+ float f1 = f * this.minecraft.vrPlayer.vrdata_world_render.worldScale; -+ poseStack.scale(f1, f1, f1); -+ -+ framebuffer.bindRead(); -+ GlStateManager._disableCull(); -+ GlStateManager._enableTexture(); -+ RenderSystem.setShader(GameRenderer::getPositionTexShader); -+ RenderSystem.setShaderTexture(0, framebuffer.getColorTextureId()); -+// RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, 33071); -+// RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, 33071); -+// RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR_MIPMAP_LINEAR); -+// RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); -+// RenderSystem.texParameter(GL11.GL_TEXTURE_2D, 34046, 16); -+ float[] color = new float[] {1,1,1,1}; -+ if (!flag) -+ { -+ if (this.minecraft.screen == null) -+ { -+ color[3] = this.dataholder.vrSettings.hudOpacity; -+ } -+ -+ if (this.minecraft.player != null && this.minecraft.player.isShiftKeyDown()) -+ { -+ color[3] *= 0.75F; -+ } -+ -+ GlStateManager._enableBlend(); -+ RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE_MINUS_DST_ALPHA, GlStateManager.DestFactor.ONE); -+ } -+ else -+ { -+ GlStateManager._disableBlend(); -+ } -+ -+ if (depthAlways) -+ { -+ GlStateManager._depthFunc(519); -+ } -+ else -+ { -+ GlStateManager._depthFunc(515); -+ } -+ -+ GlStateManager.alphaFunc(516, 0.003921569F); -+ GlStateManager._depthMask(true); -+ GlStateManager._enableDepthTest(); -+ -+ if (flag) -+ { -+ GlStateManager.disableAlphaTest(); -+ } -+ else -+ { -+ GlStateManager.enableAlphaTest(); -+ } -+ -+ //GlStateManager._disableLighting(); -+ -+ if (this.minecraft.level != null) -+ { -+ if (this.itemInHandRenderer.isInsideOpaqueBlock(vec3)) -+ { -+ vec3 = this.minecraft.vrPlayer.vrdata_world_render.hmd.getPosition(); -+ } -+ -+ int i = Config.isShaders() ? 8 : 4; -+ int j = Utils.getCombinedLightWithMin(this.minecraft.level, new BlockPos(vec3), i); -+ this.drawSizedQuadWithLightmap((float)this.minecraft.getWindow().getGuiScaledWidth(), (float)this.minecraft.getWindow().getGuiScaledHeight(), 1.5F, j, color, poseStack.last().pose()); -+ } -+ else -+ { -+ this.drawSizedQuad((float)this.minecraft.getWindow().getGuiScaledWidth(), (float)this.minecraft.getWindow().getGuiScaledHeight(), 1.5F, color, poseStack.last().pose()); -+ } -+ -+ //GlStateManager._blendColor(1.0F, 1.0F, 1.0F, 1.0F); -+ RenderSystem.defaultBlendFunc(); -+ GlStateManager._depthFunc(515); -+ GlStateManager._enableCull(); -+ -+ poseStack.popPose(); -+ } -+ } -+ -+ void renderPhysicalKeyboard(float partialTicks, PoseStack poseStack) -+ { -+ if (!this.dataholder.bowTracker.isDrawing) -+ { -+ this.resetProjectionMatrix(this.getProjectionMatrix(this.getFov(this.mainCamera, partialTicks, true))); -+ poseStack.pushPose(); -+ poseStack.setIdentity(); -+ //RenderSystem.enableRescaleNormal(); -+ //Lighting.setupFor3DItems(); -+ -+ this.minecraft.getProfiler().push("applyPhysicalKeyboardModelView"); -+ Vec3 vec3 = this.minecraft.vrPlayer.vrdata_world_render.getEye(minecraft.currentPass).getPosition(); -+ VRPlayer vrplayer = this.minecraft.vrPlayer; -+ Vec3 guipos = VRPlayer.room_to_world_pos(KeyboardHandler.Pos_room, this.minecraft.vrPlayer.vrdata_world_render); -+ org.vivecraft.utils.math.Matrix4f matrix4f = org.vivecraft.utils.math.Matrix4f.rotationY(this.minecraft.vrPlayer.vrdata_world_render.rotation_radians); -+ org.vivecraft.utils.math.Matrix4f guirot = org.vivecraft.utils.math.Matrix4f.multiply(matrix4f, KeyboardHandler.Rotation_room); -+ poseStack.mulPoseMatrix(this.minecraft.vrPlayer.vrdata_world_render.getEye(minecraft.currentPass).getMatrix().transposed().toMCMatrix()); -+ poseStack.translate((float)(guipos.x - vec3.x), (float)(guipos.y - vec3.y), (float)(guipos.z - vec3.z)); -+ //GlStateManager._multMatrix(guirot.transposed().toFloatBuffer()); -+ poseStack.mulPoseMatrix(guirot.toMCMatrix()); -+ float f = this.minecraft.vrPlayer.vrdata_world_render.worldScale; -+ poseStack.scale(f, f, f); -+ this.minecraft.getProfiler().pop(); -+ -+ KeyboardHandler.physicalKeyboard.render(poseStack); -+ //Lighting.turnOff(); -+ //RenderSystem.disableRescaleNormal(); -+ poseStack.popPose(); -+ RenderSystem.applyModelViewMatrix(); -+ } -+ } -+ -+ private void renderGuiLayer(float par1, boolean depthAlways, PoseStack pMatrix) -+ { -+ if (!this.dataholder.bowTracker.isDrawing) -+ { -+ if (this.minecraft.screen != null || !this.minecraft.options.hideGui) -+ { -+ if (!RadialHandler.isShowing()) -+ { -+ boolean flag = this.isInMenuRoom(); -+ -+ PoseStack poseStack = RenderSystem.getModelViewStack(); -+ poseStack.pushPose(); -+ poseStack.setIdentity(); -+ RenderSystem.applyModelViewMatrix(); -+ -+ if (flag) -+ { -+ pMatrix.pushPose(); -+ Vec3 eye = minecraft.vrPlayer.vrdata_world_render.getEye(minecraft.currentPass).getPosition(); -+ pMatrix.translate((minecraft.vrPlayer.vrdata_world_render.origin.x - eye.x), (minecraft.vrPlayer.vrdata_world_render.origin.y - eye.y), (minecraft.vrPlayer.vrdata_world_render.origin.z - eye.z)); -+ -+ if (this.minecraft.menuWorldRenderer != null && this.minecraft.menuWorldRenderer.isReady()) -+ { -+ try -+ { -+ this.renderTechjarsAwesomeMainMenuRoom(); -+ } -+ catch (Exception exception) -+ { -+ System.out.println("Error rendering main menu world, unloading to prevent more errors"); -+ exception.printStackTrace(); -+ this.minecraft.menuWorldRenderer.destroy(); -+ } -+ } -+ else -+ { -+ this.renderJrbuddasAwesomeMainMenuRoomNew(pMatrix); -+ } -+ pMatrix.popPose(); -+ } -+ -+ pMatrix.pushPose(); -+ Vec3 vec31 = GuiHandler.applyGUIModelView(this.minecraft.currentPass, pMatrix); -+ GuiHandler.guiFramebuffer.bindRead(); -+ RenderSystem.disableCull(); -+ RenderSystem.enableTexture(); -+ RenderSystem.setShaderTexture(0, GuiHandler.guiFramebuffer.getColorTextureId()); -+// GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, 33071.0F); -+// GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, 33071.0F); -+// GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR_MIPMAP_LINEAR); -+// GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); -+// GL11.glTexParameterf(GL11.GL_TEXTURE_2D, 34046, 16.0F); -+ float[] color = new float[] {1.0F, 1.0F, 1.0F, 1.0F}; -+ if (!flag) -+ { -+ if (this.minecraft.screen == null) -+ { -+ color[3] = this.dataholder.vrSettings.hudOpacity; -+ } -+ -+ if (this.minecraft.player != null && this.minecraft.player.isShiftKeyDown()) -+ { -+ color[3] *= 0.75F; -+ } -+ -+ RenderSystem.enableBlend(); -+ RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE_MINUS_DST_ALPHA, GlStateManager.DestFactor.ONE); -+ } -+ else -+ { -+ RenderSystem.disableBlend(); -+ } -+ -+ if (depthAlways) -+ { -+ RenderSystem.depthFunc(519); -+ } -+ else -+ { -+ RenderSystem.depthFunc(515); -+ } -+ -+ GlStateManager.alphaFunc(516, 0.003921569F); -+ RenderSystem.depthMask(true); -+ RenderSystem.enableDepthTest(); -+ -+ if (flag) -+ { -+ GlStateManager.disableAlphaTest(); -+ } -+ else -+ { -+ GlStateManager.enableAlphaTest(); -+ } -+ -+ //RenderSystem.disableLighting(); -+ -+ if (this.minecraft.level != null) -+ { -+ if (this.itemInHandRenderer.isInsideOpaqueBlock(vec31)) -+ { -+ vec31 = this.minecraft.vrPlayer.vrdata_world_render.hmd.getPosition(); -+ } -+ -+ int i = Config.isShaders() ? 8 : 4; -+ int j = Utils.getCombinedLightWithMin(this.minecraft.level, new BlockPos(vec31), i); -+ this.drawSizedQuadWithLightmap((float)this.minecraft.getWindow().getGuiScaledWidth(), (float)this.minecraft.getWindow().getGuiScaledHeight(), 1.5F, j, color, pMatrix.last().pose()); -+ } -+ else -+ { -+ RenderSystem.setShader(GameRenderer::getPositionTexShader); -+ this.drawSizedQuad((float)this.minecraft.getWindow().getGuiScaledWidth(), (float)this.minecraft.getWindow().getGuiScaledHeight(), 1.5F, color, pMatrix.last().pose()); -+ } -+ -+ //RenderSystem.blendColor(1.0F, 1.0F, 1.0F, 1.0F); -+ RenderSystem.depthFunc(515); -+ RenderSystem.enableDepthTest(); -+ //RenderSystem.defaultAlphaFunc(); -+ RenderSystem.defaultBlendFunc(); -+ RenderSystem.enableCull(); -+ pMatrix.popPose(); -+ -+ poseStack.popPose(); -+ RenderSystem.applyModelViewMatrix(); -+ } -+ } -+ } -+ } -+ -+ public void renderDebugAxes(int r, int g, int b, float radius) -+ { -+ this.setupPolyRendering(true); -+ minecraft.getTextureManager().bindForSetup(new ResourceLocation("vivecraft:textures/white.png")); -+ RenderSystem.setShaderTexture(0, new ResourceLocation("vivecraft:textures/white.png")); -+ this.renderCircle(new Vec3(0.0D, 0.0D, 0.0D), radius, 32, r, g, b, 255, 0); -+ this.renderCircle(new Vec3(0.0D, 0.01D, 0.0D), radius * 0.75F, 32, r, g, b, 255, 0); -+ this.renderCircle(new Vec3(0.0D, 0.02D, 0.0D), radius * 0.25F, 32, r, g, b, 255, 0); -+ this.renderCircle(new Vec3(0.0D, 0.0D, 0.15D), radius * 0.5F, 32, r, g, b, 255, 2); -+ this.setupPolyRendering(false); -+ } -+ -+ public void drawFramebufferNEW(float partialTicks, boolean renderWorldIn, PoseStack matrixstack) -+ { -+ if (!this.minecraft.noRender) -+ { -+ Window window = this.minecraft.getWindow(); -+ Matrix4f matrix4f = Matrix4f.orthographic(0.0F, (float)((double)window.getWidth() / window.getGuiScale()), 0.0F, (float)((double)window.getHeight() / window.getGuiScale()), 1000.0F, 3000.0F); -+ RenderSystem.setProjectionMatrix(matrix4f); -+ PoseStack posestack = RenderSystem.getModelViewStack(); -+ posestack.pushPose(); -+ posestack.setIdentity(); -+ posestack.translate(0.0D, 0.0D, -2000.0D); -+ RenderSystem.applyModelViewMatrix(); -+ Lighting.setupFor3DItems(); -+ PoseStack posestack1 = new PoseStack(); -+ -+ int i = (int)(this.minecraft.mouseHandler.xpos() * (double)this.minecraft.getWindow().getGuiScaledWidth() / (double)this.minecraft.getWindow().getScreenWidth()); -+ int j = (int)(this.minecraft.mouseHandler.ypos() * (double)this.minecraft.getWindow().getGuiScaledHeight() / (double)this.minecraft.getWindow().getScreenHeight()); -+ -+ // Window window = this.minecraft.getWindow(); -+ // RenderSystem.clearColor(0.0F, 0.0F, 0.0F, 0.0F); -+ // RenderSystem.clear(16640, Minecraft.ON_OSX); -+ // GL43.glMatrixMode(5889); -+ // GL43.glPushMatrix(); -+ // GL43.glLoadIdentity(); -+ // GL43.glOrtho(0.0D, (double)window.getScreenWidth() / window.getGuiScale(), (double)window.getScreenHeight() / window.getGuiScale(), 0.0D, 1000.0D, 3000.0D); -+ // GL43.glMatrixMode(5888); -+ // GL43.glPushMatrix(); -+ // GL43.glLoadIdentity(); -+ // GL43.glTranslatef(0.0F, 0.0F, -2000.0F); -+ // Lighting.setupFor3DItems(); -+ // RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE); -+ GlStateManager.alphaFunc(516, 0.01F); -+ -+ if (this.lightTexture.isCustom()) -+ { -+ this.lightTexture.setAllowed(false); -+ } -+ -+ //this.lightTexture.turnOffLightLayer(); -+ this.minecraft.pumpkineffect = 0.0F; -+ -+ if (renderWorldIn && this.minecraft.level != null && (!this.minecraft.options.hideGui || this.minecraft.screen != null)) -+ { -+ this.minecraft.getProfiler().popPush("gui"); -+ -+ if (Reflector.ForgeIngameGui.exists()) -+ { -+ //RenderSystem.defaultAlphaFunc(); -+ Reflector.ForgeIngameGui_renderVignette.setValue(false); -+ Reflector.ForgeIngameGui_renderPortal.setValue(false); -+ Reflector.ForgeIngameGui_renderCrosshairs.setValue(false); -+ } -+ -+ //no thanks. -+ // if (this.minecraft.player != null) -+ // { -+ // float f = Mth.lerp(pPartialTicks, this.minecraft.player.oPortalTime, this.minecraft.player.portalTime); -+ // -+ // if (f > 0.0F && this.minecraft.player.hasEffect(MobEffects.CONFUSION) && this.minecraft.options.screenEffectScale < 1.0F) -+ // { -+ // this.renderConfusionOverlay(f * (1.0F - this.minecraft.options.screenEffectScale)); -+ // } -+ // } -+ -+ if (!Main.viewonly) -+ { -+ this.minecraft.gui.render(posestack1, partialTicks); -+ } -+ -+ if (this.minecraft.options.ofShowFps && !this.minecraft.options.renderDebug) -+ { -+ Config.drawFps(matrixstack); -+ } -+ -+ if (this.minecraft.options.renderDebug) -+ { -+ Lagometer.showLagometer(matrixstack, (int)this.minecraft.getWindow().getGuiScale()); -+ } -+ -+ this.minecraft.getProfiler().pop(); -+ RenderSystem.clear(256, Minecraft.ON_OSX); -+ } -+ -+ -+ if (this.guiLoadingVisible != (this.minecraft.getOverlay() != null)) -+ { -+ if (this.minecraft.getOverlay() != null) -+ { -+ LoadingOverlay.registerTextures(this.minecraft); -+ -+ if (this.minecraft.getOverlay() instanceof LoadingOverlay) -+ { -+ LoadingOverlay loadingoverlay = (LoadingOverlay)this.minecraft.getOverlay(); -+ loadingoverlay.update(); -+ } -+ } -+ -+ this.guiLoadingVisible = this.minecraft.getOverlay() != null; -+ } -+ -+ if (this.minecraft.getOverlay() != null) -+ { -+ try -+ { -+ this.minecraft.getOverlay().render(posestack1, i, j, this.minecraft.getDeltaFrameTime()); -+ } -+ catch (Throwable throwable1) -+ { -+ CrashReport crashreport2 = CrashReport.forThrowable(throwable1, "Rendering overlay"); -+ CrashReportCategory crashreportcategory2 = crashreport2.addCategory("Overlay render details"); -+ crashreportcategory2.setDetail("Overlay name", () -> -+ { -+ return this.minecraft.getOverlay().getClass().getCanonicalName(); -+ }); -+ throw new ReportedException(crashreport2); -+ } -+ } -+ else if (this.minecraft.screen != null) -+ { -+ try -+ { -+ if (Config.isCustomEntityModels()) -+ { -+ CustomEntityModels.onRenderScreen(this.minecraft.screen); -+ } -+ -+ if (Reflector.ForgeHooksClient_drawScreen.exists()) -+ { -+ Reflector.callVoid(Reflector.ForgeHooksClient_drawScreen, this.minecraft.screen, posestack1, i, j, this.minecraft.getDeltaFrameTime()); -+ } -+ else -+ { -+ this.minecraft.screen.render(posestack1, i, j, this.minecraft.getDeltaFrameTime()); -+ } -+ //Vivecraft -+ this.minecraft.gui.drawMouseMenuQuad(i, j); -+ } -+ catch (Throwable throwable2) -+ { -+ CrashReport crashreport = CrashReport.forThrowable(throwable2, "Rendering screen"); -+ CrashReportCategory crashreportcategory = crashreport.addCategory("Screen render details"); -+ crashreportcategory.setDetail("Screen name", () -> -+ { -+ return this.minecraft.screen.getClass().getCanonicalName(); -+ }); -+ crashreportcategory.setDetail("Mouse location", () -> -+ { -+ return String.format(Locale.ROOT, "Scaled: (%d, %d). Absolute: (%f, %f)", i, j, this.minecraft.mouseHandler.xpos(), this.minecraft.mouseHandler.ypos()); -+ }); -+ crashreportcategory.setDetail("Screen size", () -> -+ { -+ return String.format(Locale.ROOT, "Scaled: (%d, %d). Absolute: (%d, %d). Scale factor of %f", this.minecraft.getWindow().getGuiScaledWidth(), this.minecraft.getWindow().getGuiScaledHeight(), this.minecraft.getWindow().getWidth(), this.minecraft.getWindow().getHeight(), this.minecraft.getWindow().getGuiScale()); -+ }); -+ throw new ReportedException(crashreport); -+ } -+ -+ try -+ { -+ if (this.minecraft.screen != null) -+ { -+ this.minecraft.screen.handleDelayedNarration(); -+ } -+ } -+ catch (Throwable throwable1) -+ { -+ CrashReport crashreport1 = CrashReport.forThrowable(throwable1, "Narrating screen"); -+ CrashReportCategory crashreportcategory1 = crashreport1.addCategory("Screen details"); -+ crashreportcategory1.setDetail("Screen name", () -> -+ { -+ return this.minecraft.screen.getClass().getCanonicalName(); -+ }); -+ throw new ReportedException(crashreport1); -+ } -+ } -+ -+ this.lightTexture.setAllowed(true); -+ posestack.popPose(); -+ RenderSystem.applyModelViewMatrix(); -+ } -+ -+ if (this.minecraft.options.renderDebugCharts && !this.minecraft.options.hideGui) -+ { -+ this.minecraft.drawProfiler(); -+ } -+ -+ this.frameFinish(); -+ this.waitForServerThread(); -+ MemoryMonitor.update(); -+ Lagometer.updateLagometer(); -+ -+ if (this.minecraft.options.ofProfiler) -+ { -+ this.minecraft.options.renderDebugCharts = true; -+ } -+ -+ //TODO: does this do anything? -+ this.minecraft.getMainRenderTarget().bindRead(); -+ this.minecraft.getMainRenderTarget().genMipMaps(); -+ this.minecraft.getMainRenderTarget().unbindRead(); -+ -+ } -+ -+ public Vec3 getControllerRenderPos(int c) -+ { -+ if (!this.dataholder.vrSettings.seated) -+ { -+ return this.minecraft.vrPlayer.vrdata_world_render.getController(c).getPosition(); -+ } -+ else -+ { -+ Vec3 vec3; -+ -+ if (this.minecraft.getCameraEntity() != null && this.minecraft.level != null) -+ { -+ Vec3 vec32 = this.minecraft.vrPlayer.vrdata_world_render.hmd.getDirection(); -+ vec32 = vec32.yRot((float)Math.toRadians(c == 0 ? -35.0D : 35.0D)); -+ vec32 = new Vec3(vec32.x, 0.0D, vec32.z); -+ vec32 = vec32.normalize(); -+ RenderPass renderpass = RenderPass.CENTER; -+ vec3 = this.minecraft.vrPlayer.vrdata_world_render.getEye(renderpass).getPosition().add(vec32.x * 0.3D * (double)this.minecraft.vrPlayer.vrdata_world_render.worldScale, -0.4D * (double)this.minecraft.vrPlayer.vrdata_world_render.worldScale, vec32.z * 0.3D * (double)this.minecraft.vrPlayer.vrdata_world_render.worldScale); -+ -+ if (TelescopeTracker.isTelescope(minecraft.player.getUseItem())){ -+ if (c==0 && minecraft.player.getUsedItemHand() == InteractionHand.MAIN_HAND) -+ vec3 = this.minecraft.vrPlayer.vrdata_world_render.eye0.getPosition().add(this.minecraft.vrPlayer.vrdata_world_render.hmd.getDirection().scale(0.2*this.minecraft.vrPlayer.vrdata_world_render.worldScale)); -+ if (c==1 && minecraft.player.getUsedItemHand() == InteractionHand.OFF_HAND) -+ vec3 = this.minecraft.vrPlayer.vrdata_world_render.eye1.getPosition().add(this.minecraft.vrPlayer.vrdata_world_render.hmd.getDirection().scale(0.2*this.minecraft.vrPlayer.vrdata_world_render.worldScale)); -+ } -+ -+ } -+ else -+ { -+ Vec3 vec31 = this.minecraft.vrPlayer.vrdata_world_render.hmd.getDirection(); -+ vec31 = vec31.yRot((float)Math.toRadians(c == 0 ? -35.0D : 35.0D)); -+ vec31 = new Vec3(vec31.x, 0.0D, vec31.z); -+ vec31 = vec31.normalize(); -+ vec3 = this.minecraft.vrPlayer.vrdata_world_render.hmd.getPosition().add(vec31.x * 0.3D, -0.4D, vec31.z * 0.3D); -+ } -+ -+ return vec3; -+ } -+ } -+ -+ public void SetupRenderingAtController(int controller, PoseStack matrix) -+ { -+ Vec3 vec3 = this.getControllerRenderPos(controller); -+ vec3 = vec3.subtract(this.minecraft.vrPlayer.getVRDataWorld().getEye(this.minecraft.currentPass).getPosition()); -+ matrix.translate((double)((float)vec3.x), (double)((float)vec3.y), (double)((float)vec3.z)); -+ float sc = this.minecraft.vrPlayer.vrdata_world_render.worldScale; -+ if (minecraft.level != null && TelescopeTracker.isTelescope(minecraft.player.getUseItem())) { -+ matrix.mulPoseMatrix(this.minecraft.vrPlayer.vrdata_world_render.hmd.getMatrix().inverted().transposed().toMCMatrix()); -+ matrix.rotateDegXp(90); -+ matrix.translate(controller==0?0.075*sc:-0.075*sc,-0.025*sc, 0.0325*sc); -+ } else { -+ matrix.mulPoseMatrix(this.minecraft.vrPlayer.vrdata_world_render.getController(controller).getMatrix().inverted().transposed().toMCMatrix()); -+ } -+ -+ matrix.scale(sc, sc, sc); -+ -+ } -+ -+ public void renderFlatQuad(Vec3 pos, float width, float height, float yaw, int r, int g, int b, int a, PoseStack poseStack) -+ { -+ Tesselator tesselator = Tesselator.getInstance(); -+ tesselator.getBuilder().begin(Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_NORMAL); -+ Vec3 vec3 = (new Vec3((double)(-width / 2.0F), 0.0D, (double)(height / 2.0F))).yRot((float)Math.toRadians((double)(-yaw))); -+ Vec3 vec31 = (new Vec3((double)(-width / 2.0F), 0.0D, (double)(-height / 2.0F))).yRot((float)Math.toRadians((double)(-yaw))); -+ Vec3 vec32 = (new Vec3((double)(width / 2.0F), 0.0D, (double)(-height / 2.0F))).yRot((float)Math.toRadians((double)(-yaw))); -+ Vec3 vec33 = (new Vec3((double)(width / 2.0F), 0.0D, (double)(height / 2.0F))).yRot((float)Math.toRadians((double)(-yaw))); -+ Matrix4f mat = poseStack.last().pose(); -+ tesselator.getBuilder().vertex(mat, (float)(pos.x + vec3.x), (float)pos.y, (float)(pos.z + vec3.z)).color(r, g, b, a).normal(0.0F, 1.0F, 0.0F).endVertex(); -+ tesselator.getBuilder().vertex(mat, (float)(pos.x + vec31.x), (float)pos.y, (float)(pos.z + vec31.z)).color(r, g, b, a).normal(0.0F, 1.0F, 0.0F).endVertex(); -+ tesselator.getBuilder().vertex(mat, (float)(pos.x + vec32.x), (float)pos.y, (float)(pos.z + vec32.z)).color(r, g, b, a).normal(0.0F, 1.0F, 0.0F).endVertex(); -+ tesselator.getBuilder().vertex(mat, (float)(pos.x + vec33.x), (float)pos.y, (float)(pos.z + vec33.z)).color(r, g, b, a).normal(0.0F, 1.0F, 0.0F).endVertex(); -+ tesselator.end(); -+ } -+ -+ public void renderCircle(Vec3 pos, float radius, int edges, int r, int g, int b, int a, int side) -+ { -+ Tesselator tesselator = Tesselator.getInstance(); -+ tesselator.getBuilder().begin(Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION_COLOR); -+ tesselator.getBuilder().vertex(pos.x, pos.y, pos.z).color(r, g, b, a).endVertex(); -+ -+ for (int i = 0; i < edges + 1; ++i) -+ { -+ float f = (float)i / (float)edges * (float)Math.PI * 2.0F; -+ -+ if (side != 0 && side != 1) -+ { -+ if (side != 2 && side != 3) -+ { -+ if (side == 4 || side == 5) -+ { -+ float f5 = (float)pos.x; -+ float f7 = (float)pos.y + (float)Math.cos((double)f) * radius; -+ float f9 = (float)pos.z + (float)Math.sin((double)f) * radius; -+ tesselator.getBuilder().vertex((double)f5, (double)f7, (double)f9).color(r, g, b, a).endVertex(); -+ } -+ } -+ else -+ { -+ float f4 = (float)pos.x + (float)Math.cos((double)f) * radius; -+ float f6 = (float)pos.y + (float)Math.sin((double)f) * radius; -+ float f8 = (float)pos.z; -+ tesselator.getBuilder().vertex((double)f4, (double)f6, (double)f8).color(r, g, b, a).endVertex(); -+ } -+ } -+ else -+ { -+ float f1 = (float)pos.x + (float)Math.cos((double)f) * radius; -+ float f2 = (float)pos.y; -+ float f3 = (float)pos.z + (float)Math.sin((double)f) * radius; -+ tesselator.getBuilder().vertex((double)f1, (double)f2, (double)f3).color(r, g, b, a).endVertex(); -+ } -+ } -+ -+ tesselator.end(); -+ } -+ -+ private void renderBox(Tesselator tes, Vec3 start, Vec3 end, float minX, float maxX, float minY, float maxY, Vec3 up, Vec3i color, byte alpha, PoseStack poseStack) -+ { -+ Vec3 vec3 = start.subtract(end).normalize(); -+ Vec3 vec31 = vec3.cross(up); -+ up = vec31.cross(vec3); -+ Vec3 vec32 = new Vec3(vec31.x * (double)minX, vec31.y * (double)minX, vec31.z * (double)minX); -+ vec31 = vec31.scale((double)maxX); -+ Vec3 vec33 = new Vec3(up.x * (double)minY, up.y * (double)minY, up.z * (double)minY); -+ up = up.scale((double)maxY); -+ org.vivecraft.utils.lwjgl.Vector3f vector3f = Utils.convertToVector3f(vec3); -+ org.vivecraft.utils.lwjgl.Vector3f vector3f1 = Utils.convertToVector3f(up.normalize()); -+ org.vivecraft.utils.lwjgl.Vector3f vector3f2 = Utils.convertToVector3f(vec31.normalize()); -+ Vec3 vec34 = start.add(vec31.x + vec33.x, vec31.y + vec33.y, vec31.z + vec33.z); -+ Vec3 vec35 = start.add(vec31.x + up.x, vec31.y + up.y, vec31.z + up.z); -+ Vec3 vec36 = start.add(vec32.x + vec33.x, vec32.y + vec33.y, vec32.z + vec33.z); -+ Vec3 vec37 = start.add(vec32.x + up.x, vec32.y + up.y, vec32.z + up.z); -+ Vec3 vec38 = end.add(vec31.x + vec33.x, vec31.y + vec33.y, vec31.z + vec33.z); -+ Vec3 vec39 = end.add(vec31.x + up.x, vec31.y + up.y, vec31.z + up.z); -+ Vec3 vec310 = end.add(vec32.x + vec33.x, vec32.y + vec33.y, vec32.z + vec33.z); -+ Vec3 vec311 = end.add(vec32.x + up.x, vec32.y + up.y, vec32.z + up.z); -+ BufferBuilder bufferbuilder = tes.getBuilder(); -+ Matrix4f mat = poseStack.last().pose(); -+ bufferbuilder.vertex(mat,(float)vec34.x, (float)vec34.y, (float)vec34.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f.x, vector3f.y, vector3f.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec36.x, (float)vec36.y, (float)vec36.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f.x, vector3f.y, vector3f.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec37.x, (float)vec37.y, (float)vec37.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f.x, vector3f.y, vector3f.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec35.x, (float)vec35.y, (float)vec35.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f.x, vector3f.y, vector3f.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec310.x,(float) vec310.y, (float)vec310.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f.x, -vector3f.y, -vector3f.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec38.x, (float)vec38.y, (float)vec38.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f.x, -vector3f.y, -vector3f.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec39.x, (float)vec39.y, (float)vec39.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f.x, -vector3f.y, -vector3f.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec311.x, (float)vec311.y, (float)vec311.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f.x, -vector3f.y, -vector3f.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec38.x, (float)vec38.y, (float)vec38.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f2.x, vector3f2.y, vector3f2.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec34.x, (float)vec34.y, (float)vec34.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f2.x, vector3f2.y, vector3f2.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec35.x, (float)vec35.y, (float)vec35.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f2.x, vector3f2.y, vector3f2.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec39.x, (float)vec39.y, (float)vec39.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f2.x, vector3f2.y, vector3f2.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec36.x, (float)vec36.y, (float)vec36.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f2.x, -vector3f2.y, -vector3f2.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec310.x, (float)vec310.y, (float)vec310.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f2.x, -vector3f2.y, -vector3f2.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec311.x, (float)vec311.y, (float)vec311.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f2.x, -vector3f2.y, -vector3f2.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec37.x, (float)vec37.y, (float)vec37.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f2.x, -vector3f2.y, -vector3f2.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec37.x, (float)vec37.y, (float)vec37.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f1.x, vector3f1.y, vector3f1.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec311.x, (float)vec311.y, (float)vec311.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f1.x, vector3f1.y, vector3f1.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec39.x, (float)vec39.y, (float)vec39.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f1.x, vector3f1.y, vector3f1.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec35.x, (float)vec35.y, (float)vec35.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f1.x, vector3f1.y, vector3f1.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec310.x, (float)vec310.y, (float)vec310.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f1.x, -vector3f1.y, -vector3f1.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec36.x, (float)vec36.y, (float)vec36.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f1.x, -vector3f1.y, -vector3f1.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec34.x, (float)vec34.y, (float)vec34.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f1.x, -vector3f1.y, -vector3f1.z).endVertex(); -+ bufferbuilder.vertex(mat,(float)vec38.x, (float)vec38.y, (float)vec38.z).color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f1.x, -vector3f1.y, -vector3f1.z).endVertex(); -+ } -+ -+ private void renderJrbuddasAwesomeMainMenuRoomNew(PoseStack pMatrixStack) -+ { -+ int i = 4; -+ float f = 2.5F; -+ float f1 = 1.3F; -+ float[] afloat = this.minecraft.vr.getPlayAreaSize(); -+ if(afloat == null) -+ afloat = new float[]{2,2}; -+ -+ BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); -+ RenderSystem.setShader(GameRenderer::getPositionTexColorShader); -+ RenderSystem.depthFunc(519); -+ RenderSystem.depthMask(false); -+ RenderSystem.enableBlend(); -+ RenderSystem.defaultBlendFunc(); -+ RenderSystem.enableTexture(); -+ RenderSystem.setShaderTexture(0, Screen.BACKGROUND_LOCATION); -+ RenderSystem.setShaderColor(1,1,1,1); -+ pMatrixStack.pushPose(); -+ float f2 = afloat[0] + f1; -+ float f3 = afloat[1] + f1; -+ pMatrixStack.translate(-f2 / 2.0F, 0.0F, -f3 / 2.0F); -+ -+ Matrix4f matrix4f = pMatrixStack.last().pose(); -+ bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR_NORMAL); -+ -+ float a, b, c, d; -+ a = b = c= d= 0.8f; -+ -+ bufferbuilder.vertex(matrix4f, 0,0,0).uv(0,0).color(a,b,c,d).normal(0,1,0).endVertex(); -+ bufferbuilder.vertex(matrix4f, 0,0,f3).uv(0,i*f3).color(a,b,c,d).normal(0,1,0).endVertex(); -+ bufferbuilder.vertex(matrix4f, f2,0,f3).uv(i*f2,i*f3).color(a,b,c,d).normal(0,1,0).endVertex(); -+ bufferbuilder.vertex(matrix4f, f2,0,0).uv(i*f2,0).color(a,b,c,d).normal(0,1,0).endVertex(); -+ -+ bufferbuilder.vertex(matrix4f, 0,f,f3).uv(0,0).color(a,b,c,d).normal(0,-1,0).endVertex(); -+ bufferbuilder.vertex(matrix4f, 0,f,0).uv(0,i*f3).color(a,b,c,d).normal(0,-1,0).endVertex(); -+ bufferbuilder.vertex(matrix4f, f2,f,0).uv(i*f2,i*f3).color(a,b,c,d).normal(0,-1,0).endVertex(); -+ bufferbuilder.vertex(matrix4f, f2,f,f3).uv(i*f2,0).color(a,b,c,d).normal(0,-1,0).endVertex(); -+ -+ bufferbuilder.vertex(matrix4f, 0,0,0).uv(0,0).color(a,b,c,d).normal(1,0,0).endVertex(); -+ bufferbuilder.vertex(matrix4f, 0,f,0).uv(0,i*f).color(a,b,c,d).normal(1,0,0).endVertex(); -+ bufferbuilder.vertex(matrix4f, 0,f,f3).uv(i*f3,i*f).color(a,b,c,d).normal(1,0,0).endVertex(); -+ bufferbuilder.vertex(matrix4f, 0,0,f3).uv(i*f3,0).color(a,b,c,d).normal(1,0,0).endVertex(); -+ -+ bufferbuilder.vertex(matrix4f, f2,0,0).uv(0,0).color(a,b,c,d).normal(-1,0,0).endVertex(); -+ bufferbuilder.vertex(matrix4f, f2,0,f3).uv(i*f3,0).color(a,b,c,d).normal(-1,0,0).endVertex(); -+ bufferbuilder.vertex(matrix4f, f2,f,f3).uv(i*f3,i*f).color(a,b,c,d).normal(-1,0,0).endVertex(); -+ bufferbuilder.vertex(matrix4f, f2,f,0).uv(0,i*f).color(a,b,c,d).normal(-1,0,0).endVertex(); -+ -+ bufferbuilder.vertex(matrix4f, 0,0,0).uv(0,0).color(a,b,c,d).normal(0,0,1).endVertex(); -+ bufferbuilder.vertex(matrix4f, f2,0,0).uv(i*f2,0).color(a,b,c,d).normal(0,0,1).endVertex(); -+ bufferbuilder.vertex(matrix4f, f2,f,0).uv(i*f2,i*f).color(a,b,c,d).normal(0,0,1).endVertex(); -+ bufferbuilder.vertex(matrix4f, 0,f,0).uv(0,i*f).color(a,b,c,d).normal(0,0,1).endVertex(); -+ -+ bufferbuilder.vertex(matrix4f, 0,0,f3).uv(0,0).color(a,b,c,d).normal(0,0,-1).endVertex(); -+ bufferbuilder.vertex(matrix4f, 0,f,f3).uv(0,i*f).color(a,b,c,d).normal(0,0,-1).endVertex(); -+ bufferbuilder.vertex(matrix4f, f2,f,f3).uv(i*f2,i*f).color(a,b,c,d).normal(0,0,-1).endVertex(); -+ bufferbuilder.vertex(matrix4f, f2,0,f3).uv(i*f2,0).color(a,b,c,d).normal(0,0,-1).endVertex(); -+ -+ bufferbuilder.end(); -+ BufferUploader.end(bufferbuilder); -+ pMatrixStack.popPose(); -+ -+ } -+ -+// private void renderJrbuddasAwesomeMainMenuRoom() -+// { -+// GlStateManager._clearColor(0.1F, 0.1F, 0.1F, 0.1F); -+// GlStateManager.clear(16384); -+// GlStateManager._disableBlend(); -+// GlStateManager.color4f(0.5F, 0.5F, 0.5F, 1.0F); -+// GlStateManager._enableDepthTest(); -+// GlStateManager._enableTexture(); -+// //GlStateManager._enableLighting(); -+// //GlStateManager._enableLight(0); -+// GlStateManager._enableCull(); -+// //GlStateManager._enableColorMaterial(); -+// //GlStateManager._colorMaterial(1032, 5634); -+// Minecraft.getInstance().getTextureManager().bindForSetup(Screen.BACKGROUND_LOCATION); -+// int i = 4; -+// float f = 2.5F; -+// float f1 = 1.3F; -+// float[] afloat = this.minecraft.vr.getPlayAreaSize(); -+// -+// if (afloat != null) -+// { -+// float f2 = afloat[0] + f1; -+// float f3 = afloat[1] + f1; -+// GL43.glPushMatrix(); -+// GL11.glTranslatef(-f2 / 2.0F, 0.0F, -f3 / 2.0F); -+// GL11.glLightfv(16384, 4611, this.setColorBuffer(f2 / 2.0F, 1.8F, f3 / 2.0F, 1.0F)); -+// GL11.glLightfv(16384, 4609, this.setColorBuffer(1.0F, 1.0F, 1.0F, 1.0F)); -+// GL11.glLightfv(16384, 4608, this.setColorBuffer(0.2F, 0.2F, 0.2F, 1.0F)); -+// GL11.glLightfv(16384, 4610, this.setColorBuffer(1.0F, 1.0F, 1.0F, 1.0F)); -+// GL11.glLightfv(16384, 4615, this.setColorBuffer(1.0F, 0.0F, 0.0F, 0.0F)); -+// GL11.glLightfv(16384, 4616, this.setColorBuffer(0.0F, 0.0F, 0.0F, 0.0F)); -+// GL11.glLightfv(16384, 4617, this.setColorBuffer(0.0F, 0.0F, 0.0F, 0.0F)); -+// GL11.glLightModelfv(2899, this.setColorBuffer(0.0F, 0.0F, 0.0F, 1.0F)); -+// //GlStateManager._shadeModel(7425); -+// GL11.glBegin(GL11.GL_QUADS); -+// GL11.glNormal3f(0.0F, 1.0F, 0.0F); -+// GL11.glTexCoord2f(0.0F, 0.0F); -+// GL11.glVertex3f(0.0F, 0.0F, 0.0F); -+// GL11.glTexCoord2f(0.0F, (float)i * f3); -+// GL11.glVertex3f(0.0F, 0.0F, f3); -+// GL11.glTexCoord2f((float)i * f2, (float)i * f3); -+// GL11.glVertex3f(f2, 0.0F, f3); -+// GL11.glTexCoord2f((float)i * f2, 0.0F); -+// GL11.glVertex3f(f2, 0.0F, 0.0F); -+// GL11.glEnd(); -+// -+// GL11.glBegin(GL11.GL_QUADS); -+// GL11.glNormal3f(0.0F, -1.0F, 0.0F); -+// GL11.glTexCoord2f(0.0F, 0.0F); -+// GL11.glVertex3f(0.0F, f, 0.0F); -+// GL11.glTexCoord2f((float)i * f2, 0.0F); -+// GL11.glVertex3f(f2, f, 0.0F); -+// GL11.glTexCoord2f((float)i * f2, (float)i * f3); -+// GL11.glVertex3f(f2, f, f3); -+// GL11.glTexCoord2f(0.0F, (float)i * f3); -+// GL11.glVertex3f(0.0F, f, f3); -+// GL11.glEnd(); -+// -+// GL11.glBegin(GL11.GL_QUADS); -+// GL11.glNormal3f(1.0F, 0.0F, 0.0F); -+// GL11.glTexCoord2f(0.0F, 0.0F); -+// GL11.glVertex3f(0.0F, 0.0F, 0.0F); -+// GL11.glTexCoord2f(0.0F, (float)i * f); -+// GL11.glVertex3f(0.0F, f, 0.0F); -+// GL11.glTexCoord2f((float)i * f3, (float)i * f); -+// GL11.glVertex3f(0.0F, f, f3); -+// GL11.glTexCoord2f((float)i * f3, 0.0F); -+// GL11.glVertex3f(0.0F, 0.0F, f3); -+// GL11.glEnd(); -+// -+// GL11.glBegin(GL11.GL_QUADS); -+// GL11.glNormal3f(-1.0F, 0.0F, 0.0F); -+// GL11.glTexCoord2f(0.0F, 0.0F); -+// GL11.glVertex3f(f2, 0.0F, 0.0F); -+// GL11.glTexCoord2f((float)i * f3, 0.0F); -+// GL11.glVertex3f(f2, 0.0F, f3); -+// GL11.glTexCoord2f((float)i * f3, (float)i * f); -+// GL11.glVertex3f(f2, f, f3); -+// GL11.glTexCoord2f(0.0F, (float)i * f); -+// GL11.glVertex3f(f2, f, 0.0F); -+// GL11.glEnd(); -+// -+// GL11.glBegin(GL11.GL_QUADS); -+// GL11.glNormal3f(0.0F, 0.0F, 1.0F); -+// GL11.glTexCoord2f(0.0F, 0.0F); -+// GL11.glVertex3f(0.0F, 0.0F, 0.0F); -+// GL11.glTexCoord2f((float)i * f2, 0.0F); -+// GL11.glVertex3f(f2, 0.0F, 0.0F); -+// GL11.glTexCoord2f((float)i * f2, (float)i * f); -+// GL11.glVertex3f(f2, f, 0.0F); -+// GL11.glTexCoord2f(0.0F, (float)i * f); -+// GL11.glVertex3f(0.0F, f, 0.0F); -+// GL11.glEnd(); -+// GL11.glBegin(GL11.GL_QUADS); -+// GL11.glNormal3f(0.0F, 0.0F, -1.0F); -+// GL11.glTexCoord2f(0.0F, 0.0F); -+// GL11.glVertex3f(0.0F, 0.0F, f3); -+// GL11.glTexCoord2f(0.0F, (float)i * f); -+// GL11.glVertex3f(0.0F, f, f3); -+// GL11.glTexCoord2f((float)i * f2, (float)i * f); -+// GL11.glVertex3f(f2, f, f3); -+// GL11.glTexCoord2f((float)i * f2, 0.0F); -+// GL11.glVertex3f(f2, 0.0F, f3); -+// GL11.glEnd(); -+// GL43.glPopMatrix(); -+// } -+// -+// //Lighting.turnOff(); -+// } -+ -+ private void renderTechjarsAwesomeMainMenuRoom() -+ {/* -+ GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); -+ GlStateManager._enableDepthTest(); -+ GlStateManager._enableTexture(); -+ GlStateManager._enableBlend(); -+ GlStateManager.enableAlphaTest(); -+ GlStateManager._enableCull(); -+ GlStateManager.alphaFunc(516, 0.1F); -+ //GL43.glPushMatrix(); -+ int i = Calendar.getInstance().get(15); -+ this.minecraft.menuWorldRenderer.time = this.menuWorldFastTime ? (long)((float)(this.minecraft.tickCounter * 10) + 10.0F * this.minecraft.getFrameTime()) : (long)((double)(System.currentTimeMillis() + (long)i - 21600000L) / 8.64E7D * 24000.0D); -+ Vec3 vec3 = this.minecraft.menuWorldRenderer.getEyePos(); -+ float f = (float)vec3.x; -+ float f1 = (float)vec3.y; -+ float f2 = (float)vec3.z; -+ this.minecraft.menuWorldRenderer.fogRenderer.updateFogColor(); -+ this.minecraft.menuWorldRenderer.fogRenderer.setupFog(-1); -+ GlStateManager.clear(16640); -+ this.minecraft.menuWorldRenderer.renderSky(f, f1, f2, 2); -+ this.minecraft.menuWorldRenderer.fogRenderer.setupFog(0); -+ -+ if ((double)f1 < 128.0D + this.minecraft.options.ofCloudsHeight * 128.0D) -+ { -+ this.minecraft.menuWorldRenderer.renderClouds(2, (double)f, (double)f1, (double)f2); -+ } -+ -+ RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); -+ GlStateManager._enableBlend(); -+ this.minecraft.menuWorldRenderer.updateLightmap(); -+ this.minecraft.menuWorldRenderer.fogRenderer.setupFog(0); -+ this.minecraft.menuWorldRenderer.render(); -+ -+ if ((double)f1 >= 128.0D + this.minecraft.options.ofCloudsHeight * 128.0D) -+ { -+ this.minecraft.menuWorldRenderer.renderClouds(2, (double)f, (double)f1, (double)f2); -+ RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); -+ GlStateManager._enableBlend(); -+ } -+ -+ float[] afloat = this.minecraft.vr.getPlayAreaSize(); -+ -+ if (afloat != null) -+ { -+ float f3 = (float)Math.ceil((double)afloat[0]); -+ float f4 = (float)Math.ceil((double)afloat[1]); -+ Minecraft.getInstance().getTextureManager().bindForSetup(Screen.BACKGROUND_LOCATION); -+ float f5 = this.minecraft.menuWorldRenderer.getSunBrightness(); -+ GlStateManager.color4f(f5, f5, f5, 0.3F); -+ GL11.glTranslatef(-f3 / 2.0F, 0.0F, -f4 / 2.0F); -+ GL11.glBegin(GL11.GL_QUADS); -+ GL11.glNormal3f(0.0F, 1.0F, 0.0F); -+ GL11.glTexCoord2f(0.0F, 0.0F); -+ GL11.glVertex3f(0.0F, 0.005F, 0.0F); -+ GL11.glTexCoord2f(0.0F, f4); -+ GL11.glVertex3f(0.0F, 0.005F, f4); -+ GL11.glTexCoord2f(f3, f4); -+ GL11.glVertex3f(f3, 0.005F, f4); -+ GL11.glTexCoord2f(f3, 0.0F); -+ GL11.glVertex3f(f3, 0.005F, 0.0F); -+ GL11.glEnd(); -+ } -+ -+ GL43.glPopMatrix(); -+ //GlStateManager._disableFog(); -+ RenderSystem.defaultBlendFunc(); -+ */} -+ -+ public void renderVRFabulous(float partialTicks, LevelRenderer worldrendererin, boolean menuhandright, boolean menuhandleft, PoseStack pMatrix) -+ { -+ if(minecraft.currentPass == RenderPass.SCOPEL || minecraft.currentPass == RenderPass.SCOPER) return; -+ this.minecraft.getProfiler().popPush("VR"); -+ this.renderCrosshairAtDepth(!this.dataholder.vrSettings.useCrosshairOcclusion, pMatrix); -+ this.minecraft.getMainRenderTarget().unbindWrite(); -+ worldrendererin.alphaSortVROccludedFramebuffer.clear(Minecraft.ON_OSX); -+ worldrendererin.alphaSortVROccludedFramebuffer.copyDepthFrom(this.minecraft.getMainRenderTarget()); -+ worldrendererin.alphaSortVROccludedFramebuffer.bindWrite(true); -+ -+ if (this.shouldOccludeGui()) -+ { -+ this.renderGuiLayer(partialTicks, false, pMatrix); -+ this.renderVrShadow(partialTicks, false, pMatrix); -+ -+ if (KeyboardHandler.Showing) -+ { -+ if (this.dataholder.vrSettings.physicalKeyboard) -+ { -+ this.renderPhysicalKeyboard(partialTicks, pMatrix); -+ } -+ else -+ { -+ this.render2D(partialTicks, KeyboardHandler.Framebuffer, KeyboardHandler.Pos_room, KeyboardHandler.Rotation_room, false, pMatrix); -+ } -+ } -+ -+ if (RadialHandler.isShowing()) -+ { -+ this.render2D(partialTicks, RadialHandler.Framebuffer, RadialHandler.Pos_room, RadialHandler.Rotation_room, false, pMatrix); -+ } -+ } -+ -+ worldrendererin.alphaSortVRUnoccludedFramebuffer.clear(Minecraft.ON_OSX); -+ worldrendererin.alphaSortVRUnoccludedFramebuffer.bindWrite(true); -+ -+ if (!this.shouldOccludeGui()) -+ { -+ this.renderGuiLayer(partialTicks, false, pMatrix); -+ this.renderVrShadow(partialTicks, false, pMatrix); -+ -+ if (KeyboardHandler.Showing) -+ { -+ if (this.dataholder.vrSettings.physicalKeyboard) -+ { -+ this.renderPhysicalKeyboard(partialTicks, pMatrix); -+ } -+ else -+ { -+ this.render2D(partialTicks, KeyboardHandler.Framebuffer, KeyboardHandler.Pos_room, KeyboardHandler.Rotation_room, false, pMatrix); -+ } -+ } -+ -+ if (RadialHandler.isShowing()) -+ { -+ this.render2D(partialTicks, RadialHandler.Framebuffer, RadialHandler.Pos_room, RadialHandler.Rotation_room, false, pMatrix); -+ } -+ } -+ -+ this.renderVRSelfEffects(partialTicks); -+ VRWidgetHelper.renderVRThirdPersonCamWidget(); -+ VRWidgetHelper.renderVRHandheldCameraWidget(); -+ boolean flag = this.shouldRenderHands(); -+ this.renderVRHands(partialTicks, flag && menuhandright, flag && menuhandleft, true, true, pMatrix); -+ worldrendererin.alphaSortVRHandsFramebuffer.clear(Minecraft.ON_OSX); -+ worldrendererin.alphaSortVRHandsFramebuffer.copyDepthFrom(this.minecraft.getMainRenderTarget()); -+ worldrendererin.alphaSortVRHandsFramebuffer.bindWrite(true); -+ this.renderVRHands(partialTicks, flag && !menuhandright, flag && !menuhandleft, false, false, pMatrix); -+ RenderSystem.enableTexture(); -+ RenderSystem.defaultBlendFunc(); -+ //RenderSystem.defaultAlphaFunc(); -+ GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); -+ //Lighting.turnBackOn(); -+ //Lighting.turnOff(); -+ this.minecraft.getMainRenderTarget().bindWrite(true); -+ } -+ -+ public void renderVrFast(float partialTicks, boolean secondpass, boolean menuright, boolean menuleft, PoseStack pMatrix) -+ { -+ if(minecraft.currentPass == RenderPass.SCOPEL || minecraft.currentPass == RenderPass.SCOPER) return; -+ this.minecraft.getProfiler().popPush("VR"); -+ this.lightTexture.turnOffLightLayer(); -+ -+ if (secondpass) -+ { -+ this.renderVrShadow(partialTicks, !this.shouldOccludeGui(), pMatrix); -+ } -+ -+ if (!secondpass) -+ { -+ this.renderCrosshairAtDepth(!this.dataholder.vrSettings.useCrosshairOcclusion, pMatrix); -+ } -+ -+ if (!secondpass) -+ { -+ VRWidgetHelper.renderVRThirdPersonCamWidget(); -+ } -+ -+ if (!secondpass) -+ { -+ VRWidgetHelper.renderVRHandheldCameraWidget(); -+ } -+ -+ if (secondpass) -+ { -+ this.renderGuiLayer(partialTicks, !this.shouldOccludeGui(), pMatrix); -+ } -+ -+ if (secondpass && KeyboardHandler.Showing) -+ { -+ if (this.dataholder.vrSettings.physicalKeyboard) -+ { -+ this.renderPhysicalKeyboard(partialTicks, pMatrix); -+ } -+ else -+ { -+ this.render2D(partialTicks, KeyboardHandler.Framebuffer, KeyboardHandler.Pos_room, KeyboardHandler.Rotation_room, !this.shouldOccludeGui(), pMatrix); -+ } -+ } -+ -+ if (secondpass && RadialHandler.isShowing()) -+ { -+ this.render2D(partialTicks, RadialHandler.Framebuffer, RadialHandler.Pos_room, RadialHandler.Rotation_room, !this.shouldOccludeGui(), pMatrix); -+ } -+ -+ this.renderVRHands(partialTicks, this.shouldRenderHands(), this.shouldRenderHands(), menuright, menuleft, pMatrix); -+ this.renderVRSelfEffects(partialTicks); -+ -+ } - } diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/GameRendererVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client/renderer/GameRendererVRMixin.java deleted file mode 100644 index c03b41706..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/GameRendererVRMixin.java +++ /dev/null @@ -1,2491 +0,0 @@ -package org.vivecraft.mixin.client.renderer; - - -import com.mojang.blaze3d.pipeline.RenderTarget; -import com.mojang.blaze3d.platform.GlStateManager; -import com.mojang.blaze3d.platform.Lighting; -import com.mojang.blaze3d.platform.MemoryTracker; -import com.mojang.blaze3d.platform.Window; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.*; -import com.mojang.blaze3d.vertex.VertexFormat.Mode; -import com.mojang.math.Matrix3f; -import com.mojang.math.Matrix4f; -import com.mojang.math.Vector3f; -import me.jellysquid.mods.lithium.common.util.Pos; -import net.minecraft.CrashReport; -import net.minecraft.CrashReportCategory; -import net.minecraft.ReportedException; -import net.minecraft.Util; -import net.minecraft.client.Camera; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.LoadingOverlay; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.gui.screens.WinScreen; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.player.LocalPlayer; -import net.minecraft.client.renderer.*; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.model.ModelBakery; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.core.Vec3i; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.resources.ResourceManagerReloadListener; -import net.minecraft.tags.FluidTags; -import net.minecraft.util.Mth; -import net.minecraft.util.profiling.ProfilerFiller; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.HitResult; -import net.minecraft.world.phys.Vec3; -import org.apache.commons.lang3.tuple.Triple; -import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL43C; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.*; -import org.spongepowered.asm.mixin.injection.At.Shift; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.IrisHelper; -import org.vivecraft.MethodHolder; -import org.vivecraft.Xevents; -import org.vivecraft.Xplat; -import org.vivecraft.extensions.GameRendererExtension; -import org.vivecraft.extensions.GuiExtension; -import org.vivecraft.extensions.ItemInHandRendererExtension; -import org.vivecraft.extensions.LevelRendererExtension; -import org.vivecraft.extensions.MinecraftExtension; -import org.vivecraft.extensions.PlayerExtension; -import org.vivecraft.extensions.RenderTargetExtension; -import org.vivecraft.api.ClientNetworkHelper; -import org.vivecraft.api.VRData; -import org.vivecraft.gameplay.VRPlayer; -import org.vivecraft.gameplay.screenhandlers.GuiHandler; -import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; -import org.vivecraft.gameplay.screenhandlers.RadialHandler; -import org.vivecraft.gameplay.trackers.BowTracker; -import org.vivecraft.gameplay.trackers.TelescopeTracker; -import org.vivecraft.mixin.blaze3d.systems.RenderSystemAccessor; -import org.vivecraft.provider.ControllerType; -import org.vivecraft.render.RenderPass; -import org.vivecraft.render.VRCamera; -import org.vivecraft.render.VRWidgetHelper; -import org.vivecraft.settings.VRSettings; -import org.vivecraft.utils.Utils; - -import java.nio.FloatBuffer; -import java.util.Locale; - -@Mixin(GameRenderer.class) -public abstract class GameRendererVRMixin - implements ResourceManagerReloadListener, AutoCloseable, GameRendererExtension { - - private static final ClientDataHolder DATA_HOLDER = ClientDataHolder.getInstance(); - @Unique - public float minClipDistance = 0.02F; - @Unique - public Vec3 crossVec; - @Unique - private final FloatBuffer matrixBuffer = MemoryTracker.create(16).asFloatBuffer(); - @Unique - public Matrix4f thirdPassProjectionMatrix = new Matrix4f(); - @Unique - public boolean menuWorldFastTime; - @Unique - public boolean inwater; - @Unique - public boolean wasinwater; - @Unique - public boolean inportal; - @Unique - public boolean onfire; - @Unique - public float inBlock = 0.0F; - @Unique - private boolean always_true = true; - @Unique - public double rveX; - @Unique - public double rveY; - @Unique - public double rveZ; - @Unique - public double rvelastX; - @Unique - public double rvelastY; - @Unique - public double rvelastZ; - @Unique - public double rveprevX; - @Unique - public double rveprevY; - @Unique - public double rveprevZ; - @Unique - public float rveyaw; - @Unique - public float rvepitch; - @Unique - private float rvelastyaw; - @Unique - private float rvelastpitch; - @Unique - private float rveHeight; - @Unique - private boolean cached; - @Unique - private int polyblendsrca; - @Unique - private int polyblenddsta; - @Unique - private int polyblendsrcrgb; - @Unique - private int polyblenddstrgb; - // private net.optifine.shaders.Program prog; - @Unique - private boolean polyblend; - @Unique - private boolean polytex; - @Unique - private boolean polylight; - @Unique - private boolean polycull; - @Unique - private Vec3i tpUnlimitedColor = new Vec3i(-83, -40, -26); - @Unique - private Vec3i tpLimitedColor = new Vec3i(-51, -87, -51); - @Unique - private Vec3i tpInvalidColor = new Vec3i(83, 83, 83); - - @Shadow - @Final - @Mutable - private final Camera mainCamera = new VRCamera(); - - @Unique // TODO added by optifine... - private float clipDistance = 128.0F; - - @Unique // TODO added by optifine... - private boolean guiLoadingVisible; - - @Unique - private PoseStack stack; - - @Shadow - @Final - private Minecraft minecraft; - - @Shadow - private float renderDistance; - - @Shadow - @Final - private LightTexture lightTexture; - @Shadow - private float zoom; - @Shadow - private float zoomX; - @Shadow - private float zoomY; - @Shadow - @Final - private RenderBuffers renderBuffers; - @Shadow - @Final - public ItemInHandRenderer itemInHandRenderer; - @Shadow - private int tick; - @Shadow - private boolean renderHand; - - @Shadow - public abstract Matrix4f getProjectionMatrix(double fov); - - @Shadow - protected abstract double getFov(Camera mainCamera2, float partialTicks, boolean b); - - @Shadow - public abstract void resetProjectionMatrix(Matrix4f projectionMatrix); - - @Shadow - protected abstract void renderItemActivationAnimation(int i, int j, float par1); - - @Shadow - public abstract void pick(float f); - - @Shadow - private boolean effectActive; - - @Shadow - private long lastActiveTime; - - @Override - public double getRveY() { - return rveY; - } - - @Override - public float inBlock() { - return inBlock; - } - - // TODO check - public void init() { - if (this.minecraft.gameRenderer != null) { - System.out.println("**********NEW GAME RENDERER ***********"); - Thread.dumpStack(); - } - } - - @Redirect(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;level:Lnet/minecraft/client/multiplayer/ClientLevel;"), method = "pick") - public ClientLevel appendCheck(Minecraft instance) { - return ClientDataHolder.getInstance().vrPlayer.vrdata_world_render == null ? null : instance.level; - } - - @ModifyVariable(at = @At("STORE"), method = "pick(F)V", ordinal = 0) - public Vec3 rayTrace(Vec3 original) { - this.minecraft.hitResult = GameRendererVRMixin.DATA_HOLDER.vrPlayer.rayTraceBlocksVR(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render, 0, this.minecraft.gameMode.getPickRange(), false); - this.crossVec = GameRendererVRMixin.DATA_HOLDER.vrPlayer.AimedPointAtDistance(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render, 0, this.minecraft.gameMode.getPickRange()); - return GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(0).getPosition(); - } - - @ModifyVariable(at = @At("STORE"), method = "pick(F)V", ordinal = 1) - public Vec3 vrVec31(Vec3 original) { - return GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(0).getDirection(); - } - - //TODO Vivecraft add riding check in case your hand is somewhere inappropriate - - @Inject(at = @At("HEAD"), method = "getFov(Lnet/minecraft/client/Camera;FZ)D", cancellable = true) - public void fov(Camera camera, float f, boolean bl, CallbackInfoReturnable info) { - if (this.minecraft.level == null) { // Vivecraft: using this on the main menu - info.setReturnValue(this.minecraft.options.fov); - } - } - - @Inject(at = @At("HEAD"), method = "getProjectionMatrix(D)Lcom/mojang/math/Matrix4f;", cancellable = true) - public void projection(double d, CallbackInfoReturnable info) { - PoseStack posestack = new PoseStack(); - setupClipPlanes(); - if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.LEFT) { - posestack.mulPoseMatrix(GameRendererVRMixin.DATA_HOLDER.vrRenderer.eyeproj[0]); - } else if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.RIGHT) { - posestack.mulPoseMatrix(GameRendererVRMixin.DATA_HOLDER.vrRenderer.eyeproj[1]); - } else if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.THIRD) { - if (GameRendererVRMixin.DATA_HOLDER.vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY) { - posestack.mulPoseMatrix( - Matrix4f.perspective((double) GameRendererVRMixin.DATA_HOLDER.vrSettings.mixedRealityFov, - GameRendererVRMixin.DATA_HOLDER.vrSettings.mixedRealityAspectRatio, this.minClipDistance, - this.clipDistance)); - } else { - posestack.mulPoseMatrix( - Matrix4f.perspective((double) GameRendererVRMixin.DATA_HOLDER.vrSettings.mixedRealityFov, - (float) this.minecraft.getWindow().getScreenWidth() - / (float) this.minecraft.getWindow().getScreenHeight(), - this.minClipDistance, this.clipDistance)); - } - this.thirdPassProjectionMatrix = new Matrix4f(posestack.last().pose()); - } else if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.CAMERA) { - posestack.mulPoseMatrix(Matrix4f.perspective((double) GameRendererVRMixin.DATA_HOLDER.vrSettings.handCameraFov, - (float) GameRendererVRMixin.DATA_HOLDER.vrRenderer.cameraFramebuffer.viewWidth - / (float) GameRendererVRMixin.DATA_HOLDER.vrRenderer.cameraFramebuffer.viewHeight, - this.minClipDistance, this.clipDistance)); - } else if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.SCOPEL - || GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.SCOPER) { - posestack.mulPoseMatrix(Matrix4f.perspective(70f / 8f, 1.0F, 0.05F, this.clipDistance)); - - } else { - if (this.zoom != 1.0F) { - posestack.translate((double) this.zoomX, (double) (-this.zoomY), 0.0D); - posestack.scale(this.zoom, this.zoom, 1.0F); - } - posestack.mulPoseMatrix(Matrix4f.perspective(d, (float) this.minecraft.getWindow().getScreenWidth() - / (float) this.minecraft.getWindow().getScreenHeight(), 0.05F, this.clipDistance)); - } - info.setReturnValue(posestack.last().pose()); - } - - // TODO optifine? -// public void initFrame() { -// if (this.minecraft.currentPass == RenderPass.LEFT) { -// this.frameInit(); -// -// if (!this.always_true && !this.minecraft.isWindowActive() && this.minecraft.options.pauseOnLostFocus -// && (!this.minecraft.options.touchscreen || !this.minecraft.mouseHandler.isRightPressed())) { -// if (Util.getMillis() - this.lastActiveTime > 500L) { -// this.minecraft.pauseGame(false); -// } -// } else { -// this.lastActiveTime = Util.getMillis(); -// } -// } -// } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;isWindowActive()Z"), method = "render") - public boolean focus(Minecraft instance) { - return true; - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;pauseGame(Z)V"), method = "render") - public void pause(Minecraft instance, boolean bl) { - if (ClientDataHolder.getInstance().currentPass == RenderPass.LEFT ){ - instance.pauseGame(bl); - } - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/Util;getMillis()J"), method = "render") - public long active() { - if (ClientDataHolder.getInstance().currentPass == RenderPass.LEFT) { - return Util.getMillis(); - } - return this.lastActiveTime; - } - - @Inject(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;viewport(IIII)V", shift = Shift.AFTER), method = "Lnet/minecraft/client/renderer/GameRenderer;render(FJZ)V") - public void matrix(float partialTicks, long nanoTime, boolean renderWorldIn, CallbackInfo info) { - this.resetProjectionMatrix(this.getProjectionMatrix(minecraft.options.fov)); - RenderSystem.getModelViewStack().setIdentity(); - RenderSystem.applyModelViewMatrix(); - } - - @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;renderLevel(FJLcom/mojang/blaze3d/vertex/PoseStack;)V"), method = "render") - public PoseStack newStack(PoseStack poseStack) { - this.stack = poseStack; - return poseStack; - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;renderLevel(FJLcom/mojang/blaze3d/vertex/PoseStack;)V", shift = Shift.AFTER), method = "Lnet/minecraft/client/renderer/GameRenderer;render(FJZ)V") - public void renderoverlay(float f, long l, boolean bl, CallbackInfo ci) { - if (GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.THIRD - && GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.CAMERA) { - this.renderFaceOverlay(f, this.stack); - } - } - - @Redirect(at = @At(value = "FIELD", target = "Lnet/minecraft/client/renderer/GameRenderer;effectActive:Z"), method = "render") - public boolean effect(GameRenderer instance) { - return this.effectActive && ClientDataHolder.getInstance().currentPass != RenderPass.THIRD; - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getWindow()Lcom/mojang/blaze3d/platform/Window;", shift = Shift.BEFORE, ordinal = 6), method = "Lnet/minecraft/client/renderer/GameRenderer;render(FJZ)V", cancellable = true) - public void mainMenu(float partialTicks, long nanoTime, boolean renderWorldIn, CallbackInfo info) { - if (renderWorldIn && this.minecraft.level != null) { - - } - else { - this.minecraft.getProfiler().push("MainMenu"); - GL11.glDisable(GL11.GL_STENCIL_TEST); - - PoseStack pMatrixStack = new PoseStack(); - applyVRModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, pMatrixStack); - this.renderGuiLayer(partialTicks, true, pMatrixStack); - - if (KeyboardHandler.Showing) { - if (GameRendererVRMixin.DATA_HOLDER.vrSettings.physicalKeyboard) { - this.renderPhysicalKeyboard(partialTicks, pMatrixStack); - } else { - this.render2D(partialTicks, KeyboardHandler.Framebuffer, KeyboardHandler.Pos_room, - KeyboardHandler.Rotation_room, false, pMatrixStack); - } - } - - if ((GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.THIRD - || GameRendererVRMixin.DATA_HOLDER.vrSettings.mixedRealityRenderHands) - && GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.CAMERA) { - this.renderVRHands(partialTicks, true, true, true, true, pMatrixStack); - } - } - this.minecraft.getProfiler().pop(); - info.cancel(); - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;pick(F)V"), method = "renderLevel(FJLcom/mojang/blaze3d/vertex/PoseStack;)V") - public void renderpick(GameRenderer g, float pPartialTicks) { - if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.LEFT) { - this.pick(pPartialTicks); - - if (this.minecraft.hitResult != null && this.minecraft.hitResult.getType() != HitResult.Type.MISS) { - this.crossVec = this.minecraft.hitResult.getLocation(); - } - - if (this.minecraft.screen == null) { - GameRendererVRMixin.DATA_HOLDER.teleportTracker.updateTeleportDestinations((GameRenderer)(Object)this, this.minecraft, - this.minecraft.player); - } - } - - this.cacheRVEPos((LivingEntity) this.minecraft.getCameraEntity()); - this.setupRVE(); - this.setupOverlayStatus(pPartialTicks); - } - - @Inject(at = @At("HEAD"), method = "bobHurt", cancellable = true) - public void removeBobHurt(PoseStack poseStack, float f, CallbackInfo ci) { - ci.cancel(); - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;bobView(Lcom/mojang/blaze3d/vertex/PoseStack;F)V"), method = "renderLevel") - public void removeBobView(GameRenderer instance, PoseStack poseStack, float f) { - return; - } - - public void limiti() { - - } - - public void changeVariable() { - - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/profiling/ProfilerFiller;popPush(Ljava/lang/String;)V", ordinal = 1), method = "renderLevel") - public void noHandProfiler(ProfilerFiller instance, String s) { - GL11.glDisable(GL11.GL_STENCIL_TEST); - this.minecraft.getProfiler().popPush("ShadersEnd"); //TODO needed? - return; - } - @Redirect(at = @At(value = "FIELD", target = "Lnet/minecraft/client/renderer/GameRenderer;renderHand:Z"), method = "renderLevel") - public boolean noHands(GameRenderer instance) { - return false; - } - - @Inject(at = @At(value = "TAIL", shift = Shift.BEFORE), method = "renderLevel(FJLcom/mojang/blaze3d/vertex/PoseStack;)V") - public void restoreVE(float f, long j, PoseStack p, CallbackInfo i) { - this.restoreRVEPos((LivingEntity) this.minecraft.getCameraEntity()); - } - - private void setupOverlayStatus(float partialTicks) { - this.inBlock = 0.0F; - this.inwater = false; - this.onfire = false; - - if (!this.minecraft.player.isSpectator() && !this.isInMenuRoom() && this.minecraft.player.isAlive()) { - Vec3 vec3 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getEye(GameRendererVRMixin.DATA_HOLDER.currentPass).getPosition(); - Triple triple = ((ItemInHandRendererExtension) this.itemInHandRenderer).getNearOpaqueBlock(vec3, (double) this.minClipDistance); - - if (triple != null && !Xevents.renderBlockOverlay(this.minecraft.player, new PoseStack(), triple.getMiddle(), triple.getRight())) { - this.inBlock = triple.getLeft(); - } else { - this.inBlock = 0.0F; - } - - this.inwater = this.minecraft.player.isEyeInFluid(FluidTags.WATER) && !Xevents.renderWaterOverlay(this.minecraft.player, new PoseStack()); - this.onfire = GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.THIRD - && GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.CAMERA && this.minecraft.player.isOnFire() && !Xevents.renderFireOverlay(this.minecraft.player, new PoseStack()); - } - } - - @Override - public void setupRVE() { - if (this.cached) { - VRData.VRDevicePose vrdata$vrdevicepose = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render - .getEye(GameRendererVRMixin.DATA_HOLDER.currentPass); - Vec3 vec3 = vrdata$vrdevicepose.getPosition(); - LivingEntity livingentity = (LivingEntity) this.minecraft.getCameraEntity(); - livingentity.setPosRaw(vec3.x, vec3.y, vec3.z); - livingentity.xOld = vec3.x; - livingentity.yOld = vec3.y; - livingentity.zOld = vec3.z; - livingentity.xo = vec3.x; - livingentity.yo = vec3.y; - livingentity.zo = vec3.z; - livingentity.setXRot(-vrdata$vrdevicepose.getPitch()); - livingentity.xRotO = livingentity.getXRot(); - livingentity.setYRot(vrdata$vrdevicepose.getYaw()); - livingentity.yHeadRot = livingentity.getYRot(); - livingentity.yHeadRotO = livingentity.getYRot(); - livingentity.eyeHeight = 0; - } - } - - @Override - public void cacheRVEPos(LivingEntity e) { - if (this.minecraft.getCameraEntity() != null) { - if (!this.cached) { - this.rveX = e.getX(); - this.rveY = e.getY(); - this.rveZ = e.getZ(); - this.rvelastX = e.xOld; - this.rvelastY = e.yOld; - this.rvelastZ = e.zOld; - this.rveprevX = e.xo; - this.rveprevY = e.yo; - this.rveprevZ = e.zo; - this.rveyaw = e.yHeadRot; - this.rvepitch = e.getXRot(); - this.rvelastyaw = e.yHeadRotO; - this.rvelastpitch = e.xRotO; - this.rveHeight = e.getEyeHeight(); - this.cached = true; - } - } - } - - void renderMainMenuHand(int c, float partialTicks, boolean depthAlways, PoseStack poseStack) { - this.resetProjectionMatrix(this.getProjectionMatrix(this.getFov(mainCamera, partialTicks, false))); - poseStack.pushPose(); - poseStack.setIdentity(); - RenderSystem.disableTexture(); - RenderSystem.enableDepthTest(); - RenderSystem.defaultBlendFunc(); - applyVRModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, poseStack); - SetupRenderingAtController(c, poseStack); - - if (this.minecraft.getOverlay() == null) { - RenderSystem.setShaderTexture(0, new ResourceLocation("vivecraft:textures/white.png")); - } - - Tesselator tesselator = Tesselator.getInstance(); - - if (depthAlways && c == 0) { - RenderSystem.depthFunc(519); - } else { - RenderSystem.depthFunc(515); - } - - Vec3i vec3i = new Vec3i(64, 64, 64); - byte b0 = -1; - Vec3 vec3 = new Vec3(0.0D, 0.0D, 0.0D); - Vec3 vec31 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(c).getDirection(); - Vec3 vec32 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(c) - .getCustomVector(new Vec3(0.0D, 1.0D, 0.0D)); - vec32 = new Vec3(0.0D, 1.0D, 0.0D); - vec31 = new Vec3(0.0D, 0.0D, -1.0D); - Vec3 vec33 = new Vec3(vec3.x - vec31.x * 0.18D, vec3.y - vec31.y * 0.18D, vec3.z - vec31.z * 0.18D); - - if (this.minecraft.level != null) { - float f = (float) this.minecraft.level.getMaxLocalRawBrightness( - new BlockPos(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.hmd.getPosition())); - // int i = Config.isShaders() ? 8 : 4; TODO - int i = 4; - if (Xplat.isModLoaded("iris") || Xplat.isModLoaded("oculus")) { - i = IrisHelper.ShaderLight(); - } - - if (f < (float) i) { - f = (float) i; - } - - float f1 = f / (float) this.minecraft.level.getMaxLightLevel(); - vec3i = new Vec3i((double) ((float) vec3i.getX() * f1), (double) ((float) vec3i.getY() * f1), - (double) ((float) vec3i.getZ() * f1)); - } - RenderSystem.setShader(GameRenderer::getPositionColorShader); - tesselator.getBuilder().begin(Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_NORMAL); - this.renderBox(tesselator, vec3, vec33, -0.02F, 0.02F, -0.0125F, 0.0125F, vec32, vec3i, b0, poseStack); - tesselator.getBuilder().end(); - BufferUploader.end(tesselator.getBuilder()); - RenderSystem.enableTexture(); - poseStack.popPose(); - RenderSystem.depthFunc(515); - } - - private void renderVRHands(float partialTicks, boolean renderright, boolean renderleft, boolean menuhandright, - boolean menuhandleft, PoseStack poseStack) { - this.minecraft.getProfiler().push("hands"); - - if (renderright) { - this.minecraft.getItemRenderer(); - ClientDataHolder.ismainhand = true; - - if (menuhandright) { - this.renderMainMenuHand(0, partialTicks, false, poseStack); - } else { - this.resetProjectionMatrix(this.getProjectionMatrix(this.getFov(this.mainCamera, partialTicks, true))); - PoseStack posestack = new PoseStack(); - posestack.last().pose().setIdentity(); - this.applyVRModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, posestack); - this.renderVRHand_Main(posestack, partialTicks); - } - - this.minecraft.getItemRenderer(); - ClientDataHolder.ismainhand = false; - } - - if (renderleft) { - if (menuhandleft) { - this.renderMainMenuHand(1, partialTicks, false, poseStack); - } else { - this.resetProjectionMatrix(this.getProjectionMatrix(this.getFov(this.mainCamera, partialTicks, true))); - PoseStack posestack1 = new PoseStack(); - posestack1.last().pose().setIdentity(); - this.applyVRModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, posestack1); - this.renderVRHand_Offhand(partialTicks, true, posestack1); - } - } - - this.minecraft.getProfiler().pop(); - } - - @Override - public boolean isInWater() { - return inwater; - } - - @Override - public boolean isInMenuRoom() { - return this.minecraft.level == null || this.minecraft.screen instanceof WinScreen || ClientDataHolder.getInstance().integratedServerLaunchInProgress || this.minecraft.getOverlay() != null; - } - - @Override - public Vec3 getControllerRenderPos(int c) { - ClientDataHolder dataholder = GameRendererVRMixin.DATA_HOLDER; - if (!dataholder.vrSettings.seated) { - return dataholder.vrPlayer.vrdata_world_render.getController(c).getPosition(); - } else { - Vec3 vec3; - - if (this.minecraft.getCameraEntity() != null && this.minecraft.level != null) { - Vec3 vec32 = dataholder.vrPlayer.vrdata_world_render.hmd.getDirection(); - vec32 = vec32.yRot((float) Math.toRadians(c == 0 ? -35.0D : 35.0D)); - vec32 = new Vec3(vec32.x, 0.0D, vec32.z); - vec32 = vec32.normalize(); - RenderPass renderpass = RenderPass.CENTER; - vec3 = dataholder.vrPlayer.vrdata_world_render.getEye(renderpass).getPosition().add( - vec32.x * 0.3D * (double) dataholder.vrPlayer.vrdata_world_render.worldScale, - -0.4D * (double) dataholder.vrPlayer.vrdata_world_render.worldScale, - vec32.z * 0.3D * (double) dataholder.vrPlayer.vrdata_world_render.worldScale); - - if (TelescopeTracker.isTelescope(minecraft.player.getUseItem())) { - if (c == 0 && minecraft.player.getUsedItemHand() == InteractionHand.MAIN_HAND) - vec3 = dataholder.vrPlayer.vrdata_world_render.eye0.getPosition() - .add(dataholder.vrPlayer.vrdata_world_render.hmd.getDirection() - .scale(0.2 * dataholder.vrPlayer.vrdata_world_render.worldScale)); - if (c == 1 && minecraft.player.getUsedItemHand() == InteractionHand.OFF_HAND) - vec3 = dataholder.vrPlayer.vrdata_world_render.eye1.getPosition() - .add(dataholder.vrPlayer.vrdata_world_render.hmd.getDirection() - .scale(0.2 * dataholder.vrPlayer.vrdata_world_render.worldScale)); - } - - } else { - Vec3 vec31 = dataholder.vrPlayer.vrdata_world_render.hmd.getDirection(); - vec31 = vec31.yRot((float) Math.toRadians(c == 0 ? -35.0D : 35.0D)); - vec31 = new Vec3(vec31.x, 0.0D, vec31.z); - vec31 = vec31.normalize(); - vec3 = dataholder.vrPlayer.vrdata_world_render.hmd.getPosition().add(vec31.x * 0.3D, -0.4D, - vec31.z * 0.3D); - } - - return vec3; - } - } - - @Override - public Vec3 getCrossVec() { - return crossVec; - } - - @Override - public void setMenuWorldFastTime(boolean b) { - this.menuWorldFastTime = b; - } - - @Override - public void setupClipPlanes() { - this.renderDistance = (float) (this.minecraft.options.renderDistance * 16); - -// if (Config.isFogOn()) { TODO -// this.renderDistance *= 0.95F; -// } - - this.clipDistance = this.renderDistance + 1024.0F; - - } - - @Override - public float getMinClipDistance() { - return this.minClipDistance; - } - - @Override - public float getClipDistance() { - return this.clipDistance; - } - - @Override - public void applyVRModelView(RenderPass currentPass, PoseStack poseStack) { - Matrix4f modelView = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getEye(currentPass) - .getMatrix().transposed().toMCMatrix(); - poseStack.last().pose().multiply(modelView); - poseStack.last().normal().mul(new Matrix3f(modelView)); - } - - @Override - public void renderDebugAxes(int r, int g, int b, float radius) { - this.setupPolyRendering(true); - RenderSystem.setShaderTexture(0, new ResourceLocation("vivecraft:textures/white.png")); - this.renderCircle(new Vec3(0.0D, 0.0D, 0.0D), radius, 32, r, g, b, 255, 0); - this.renderCircle(new Vec3(0.0D, 0.01D, 0.0D), radius * 0.75F, 32, r, g, b, 255, 0); - this.renderCircle(new Vec3(0.0D, 0.02D, 0.0D), radius * 0.25F, 32, r, g, b, 255, 0); - this.renderCircle(new Vec3(0.0D, 0.0D, 0.15D), radius * 0.5F, 32, r, g, b, 255, 2); - this.setupPolyRendering(false); - } - - public void renderCircle(Vec3 pos, float radius, int edges, int r, int g, int b, int a, int side) { - Tesselator tesselator = Tesselator.getInstance(); - tesselator.getBuilder().begin(Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION_COLOR); - tesselator.getBuilder().vertex(pos.x, pos.y, pos.z).color(r, g, b, a).endVertex(); - - for (int i = 0; i < edges + 1; i++) { - float f = (float) i / (float) edges * (float) Math.PI * 2.0F; - - if (side != 0 && side != 1) { - if (side != 2 && side != 3) { - if (side == 4 || side == 5) { - float f5 = (float) pos.x; - float f7 = (float) pos.y + (float) Math.cos((double) f) * radius; - float f9 = (float) pos.z + (float) Math.sin((double) f) * radius; - tesselator.getBuilder().vertex((double) f5, (double) f7, (double) f9).color(r, g, b, a) - .endVertex(); - } - } else { - float f4 = (float) pos.x + (float) Math.cos((double) f) * radius; - float f6 = (float) pos.y + (float) Math.sin((double) f) * radius; - float f8 = (float) pos.z; - tesselator.getBuilder().vertex((double) f4, (double) f6, (double) f8).color(r, g, b, a).endVertex(); - } - } else { - float f1 = (float) pos.x + (float) Math.cos((double) f) * radius; - float f2 = (float) pos.y; - float f3 = (float) pos.z + (float) Math.sin((double) f) * radius; - tesselator.getBuilder().vertex((double) f1, (double) f2, (double) f3).color(r, g, b, a).endVertex(); - } - } - - tesselator.end(); - } - - private void setupPolyRendering(boolean enable) { -// boolean flag = Config.isShaders(); TODO - boolean flag = false; - - if (enable) { - this.polyblendsrca = GlStateManager.BLEND.srcAlpha; - this.polyblenddsta = GlStateManager.BLEND.dstAlpha; - this.polyblendsrcrgb = GlStateManager.BLEND.srcRgb; - this.polyblenddstrgb = GlStateManager.BLEND.dstRgb; - this.polyblend = GL43C.glIsEnabled(GL11.GL_BLEND); - this.polytex = true; - this.polylight = false; - this.polycull = true; - GlStateManager._enableBlend(); - RenderSystem.defaultBlendFunc(); - GlStateManager._disableTexture(); - // GlStateManager._disableLighting(); - GlStateManager._disableCull(); - - if (flag) { -// this.prog = Shaders.activeProgram; TODO -// Shaders.useProgram(Shaders.ProgramTexturedLit); - } - } else { - RenderSystem.blendFuncSeparate(this.polyblendsrcrgb, this.polyblenddstrgb, this.polyblendsrca, - this.polyblenddsta); - - if (!this.polyblend) { - GlStateManager._disableBlend(); - } - - if (this.polytex) { - GlStateManager._enableTexture(); - } - - if (this.polylight) { - // GlStateManager._enableLighting(); - } - - if (this.polycull) { - GlStateManager._enableCull(); - } - -// if (flag && this.polytex) { -// Shaders.useProgram(this.prog); TODO -// } - } - } - - @Override - public void drawScreen(float f, Screen screen, PoseStack poseStack) { - PoseStack posestack = RenderSystem.getModelViewStack(); - posestack.pushPose(); - posestack.setIdentity(); - posestack.translate(0.0D, 0.0D, -2000.0D); - RenderSystem.applyModelViewMatrix(); - RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, - GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, - GlStateManager.DestFactor.ONE); - screen.render(poseStack, 0, 0, f); - RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, - GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, - GlStateManager.DestFactor.ONE); - posestack.popPose(); - RenderSystem.applyModelViewMatrix(); - - this.minecraft.getMainRenderTarget().bindRead(); - ((RenderTargetExtension) this.minecraft.getMainRenderTarget()).genMipMaps(); - this.minecraft.getMainRenderTarget().unbindRead(); - } - - @Override - public boolean wasInWater() { - return wasinwater; - } - - @Override - public void setWasInWater(boolean b) { - this.wasinwater = b; - } - - @Override - public boolean isInPortal() { - return this.inportal; - } - - @Override - public Matrix4f getThirdPassProjectionMatrix() { - return thirdPassProjectionMatrix; - } - - @Override - public void drawFramebufferNEW(float partialTicks, boolean renderWorldIn, PoseStack matrixstack) { - if (!this.minecraft.noRender) { - Window window = this.minecraft.getWindow(); - Matrix4f matrix4f = Matrix4f.orthographic(0.0F, (float) ((double) window.getWidth() / window.getGuiScale()), - 0.0F, (float) ((double) window.getHeight() / window.getGuiScale()), 1000.0F, 3000.0F); - RenderSystem.setProjectionMatrix(matrix4f); - PoseStack posestack = RenderSystem.getModelViewStack(); - posestack.pushPose(); - posestack.setIdentity(); - posestack.translate(0.0D, 0.0D, -2000.0D); - RenderSystem.applyModelViewMatrix(); - Lighting.setupFor3DItems(); - PoseStack posestack1 = new PoseStack(); - - int i = (int) (this.minecraft.mouseHandler.xpos() * (double) this.minecraft.getWindow().getGuiScaledWidth() - / (double) this.minecraft.getWindow().getScreenWidth()); - int j = (int) (this.minecraft.mouseHandler.ypos() * (double) this.minecraft.getWindow().getGuiScaledHeight() - / (double) this.minecraft.getWindow().getScreenHeight()); - - - GameRendererVRMixin.DATA_HOLDER.pumpkineffect = 0.0F; - - if (renderWorldIn && this.minecraft.level != null - && (!this.minecraft.options.hideGui || this.minecraft.screen != null)) { - this.minecraft.getProfiler().popPush("gui"); -// if (Reflector.ForgeIngameGui.exists()) { -// // RenderSystem.defaultAlphaFunc(); -// Reflector.ForgeIngameGui_renderVignette.setValue(false); -// Reflector.ForgeIngameGui_renderPortal.setValue(false); -// Reflector.ForgeIngameGui_renderCrosshairs.setValue(false); -// } - - // no thanks. - // if (this.minecraft.player != null) - // { - // float f = Mth.lerp(pPartialTicks, this.minecraft.player.oPortalTime, - // this.minecraft.player.portalTime); - // - // if (f > 0.0F && this.minecraft.player.hasEffect(MobEffects.CONFUSION) && - // this.minecraft.options.screenEffectScale < 1.0F) - // { - // this.renderConfusionOverlay(f * (1.0F - - // this.minecraft.options.screenEffectScale)); - // } - // } - - if (!ClientDataHolder.viewonly) { - this.minecraft.gui.render(posestack1, partialTicks); - } - -// if (this.minecraft.options.ofShowFps && !this.minecraft.options.renderDebug) { TODO -// Config.drawFps(matrixstack); -// } - -// if (this.minecraft.options.renderDebug) { TODO -// Lagometer.showLagometer(matrixstack, (int) this.minecraft.getWindow().getGuiScale()); -// } - - this.minecraft.getProfiler().pop(); - RenderSystem.clear(256, Minecraft.ON_OSX); - } - - if (this.guiLoadingVisible != (this.minecraft.getOverlay() != null)) { - if (this.minecraft.getOverlay() != null) { - LoadingOverlay.registerTextures(this.minecraft); - - if (this.minecraft.getOverlay() instanceof LoadingOverlay) { - LoadingOverlay loadingoverlay = (LoadingOverlay) this.minecraft.getOverlay(); - //loadingoverlay.update(); - } - } - - this.guiLoadingVisible = this.minecraft.getOverlay() != null; - } - - if (this.minecraft.getOverlay() != null) { - try { - this.minecraft.getOverlay().render(posestack1, i, j, this.minecraft.getDeltaFrameTime()); - } catch (Throwable throwable1) { - CrashReport crashreport2 = CrashReport.forThrowable(throwable1, "Rendering overlay"); - CrashReportCategory crashreportcategory2 = crashreport2.addCategory("Overlay render details"); - crashreportcategory2.setDetail("Overlay name", () -> { - return this.minecraft.getOverlay().getClass().getCanonicalName(); - }); - throw new ReportedException(crashreport2); - } - } else if (this.minecraft.screen != null) { - try { -// if (Config.isCustomEntityModels()) { TODO -// CustomEntityModels.onRenderScreen(this.minecraft.screen); -// } - -// if (Reflector.ForgeHooksClient_drawScreen.exists()) { TODO -// Reflector.callVoid(Reflector.ForgeHooksClient_drawScreen, this.minecraft.screen, posestack1, i, -// j, this.minecraft.getDeltaFrameTime()); -// } else { - //this.minecraft.screen.render(posestack1, i, j, this.minecraft.getDeltaFrameTime()); -// } - Xevents.drawScreen(this.minecraft.screen, posestack1, i, j, this.minecraft.getDeltaFrameTime()); - - // Vivecraft - ((GuiExtension) this.minecraft.gui).drawMouseMenuQuad(i, j); - } catch (Throwable throwable2) { - CrashReport crashreport = CrashReport.forThrowable(throwable2, "Rendering screen"); - CrashReportCategory crashreportcategory = crashreport.addCategory("Screen render details"); - crashreportcategory.setDetail("Screen name", () -> { - return this.minecraft.screen.getClass().getCanonicalName(); - }); - crashreportcategory.setDetail("Mouse location", () -> { - return String.format(Locale.ROOT, "Scaled: (%d, %d). Absolute: (%f, %f)", i, j, - this.minecraft.mouseHandler.xpos(), this.minecraft.mouseHandler.ypos()); - }); - crashreportcategory.setDetail("Screen size", () -> { - return String.format(Locale.ROOT, "Scaled: (%d, %d). Absolute: (%d, %d). Scale factor of %f", - this.minecraft.getWindow().getGuiScaledWidth(), - this.minecraft.getWindow().getGuiScaledHeight(), this.minecraft.getWindow().getWidth(), - this.minecraft.getWindow().getHeight(), this.minecraft.getWindow().getGuiScale()); - }); - throw new ReportedException(crashreport); - } - - try { - if (this.minecraft.screen != null) { - this.minecraft.screen.handleDelayedNarration(); - } - } catch (Throwable throwable1) { - CrashReport crashreport1 = CrashReport.forThrowable(throwable1, "Narrating screen"); - CrashReportCategory crashreportcategory1 = crashreport1.addCategory("Screen details"); - crashreportcategory1.setDetail("Screen name", () -> { - return this.minecraft.screen.getClass().getCanonicalName(); - }); - throw new ReportedException(crashreport1); - } - } - - // this.lightTexture.setAllowed(true); - posestack.popPose(); - RenderSystem.applyModelViewMatrix(); - } - - if (this.minecraft.options.renderDebugCharts && !this.minecraft.options.hideGui) { - ((MinecraftExtension)this.minecraft).drawProfiler(); - } - -// this.frameFinish(); -// this.waitForServerThread(); -// MemoryMonitor.update(); TODO -// Lagometer.updateLagometer(); - -// if (this.minecraft.options.ofProfiler) { TODO -// this.minecraft.options.renderDebugCharts = true; -// } - - // TODO: does this do anything? - this.minecraft.getMainRenderTarget().bindRead(); - ((RenderTargetExtension) this.minecraft.getMainRenderTarget()).genMipMaps(); - this.minecraft.getMainRenderTarget().unbindRead(); - - } - - private void renderVRHand_Main(PoseStack matrix, float partialTicks) { - matrix.pushPose(); - this.SetupRenderingAtController(0, matrix); - ItemStack itemstack = this.minecraft.player.getMainHandItem(); - ItemStack itemstack1 = null; // this.minecraft.physicalGuiManager.getHeldItemOverride(); - - if (itemstack1 != null) { - itemstack = itemstack1; - } - - if (GameRendererVRMixin.DATA_HOLDER.climbTracker.isClimbeyClimb() && itemstack.getItem() != Items.SHEARS) { - itemstack = itemstack1 == null ? this.minecraft.player.getOffhandItem() : itemstack1; - } - - if (BowTracker.isHoldingBow(this.minecraft.player, InteractionHand.MAIN_HAND)) { - int i = 0; - - if (GameRendererVRMixin.DATA_HOLDER.vrSettings.reverseShootingEye) { - i = 1; - } - - ItemStack itemstack2 = this.minecraft.player.getProjectile(this.minecraft.player.getMainHandItem()); - - if (itemstack2 != ItemStack.EMPTY && !GameRendererVRMixin.DATA_HOLDER.bowTracker.isNotched()) { - itemstack = itemstack2; - } else { - itemstack = ItemStack.EMPTY; - } - } else if (BowTracker.isHoldingBow(this.minecraft.player, InteractionHand.OFF_HAND) - && GameRendererVRMixin.DATA_HOLDER.bowTracker.isNotched()) { - int j = 0; - - if (GameRendererVRMixin.DATA_HOLDER.vrSettings.reverseShootingEye) { - j = 1; - } - - itemstack = ItemStack.EMPTY; - } - - boolean flag = false; - -// if (Config.isShaders()) { TODO -// Shaders.beginHand(matrix, flag); -// } else { - matrix.pushPose(); -// } - - this.lightTexture.turnOnLightLayer(); - MultiBufferSource.BufferSource multibuffersource$buffersource = this.renderBuffers.bufferSource(); - (this.itemInHandRenderer).renderArmWithItem(this.minecraft.player, partialTicks, - 0.0F, InteractionHand.MAIN_HAND, this.minecraft.player.getAttackAnim(partialTicks), itemstack, 0.0F, - matrix, multibuffersource$buffersource, - this.minecraft.getEntityRenderDispatcher().getPackedLightCoords(this.minecraft.player, partialTicks)); - multibuffersource$buffersource.endBatch(); - this.lightTexture.turnOffLightLayer(); - -// if (Config.isShaders()) { TODO -// Shaders.endHand(matrix); -// } else { - matrix.popPose(); -// } - - matrix.popPose(); - } - - private void renderVRHand_Offhand(float partialTicks, boolean renderTeleport, PoseStack matrix) { - // boolean flag = Config.isShaders();TODO - boolean flag = false; - boolean flag1 = false; - -// if (flag) { -// flag1 = Shaders.isShadowPass; -// } - - matrix.pushPose(); - this.SetupRenderingAtController(1, matrix); - ItemStack itemstack = this.minecraft.player.getOffhandItem(); - ItemStack itemstack1 = null;// this.minecraft.physicalGuiManager.getOffhandOverride(); - - if (itemstack1 != null) { - itemstack = itemstack1; - } - - if (GameRendererVRMixin.DATA_HOLDER.climbTracker.isClimbeyClimb() - && (itemstack == null || itemstack.getItem() != Items.SHEARS)) { - itemstack = this.minecraft.player.getMainHandItem(); - } - - if (BowTracker.isHoldingBow(this.minecraft.player, InteractionHand.MAIN_HAND)) { - int i = 1; - - if (GameRendererVRMixin.DATA_HOLDER.vrSettings.reverseShootingEye) { - i = 0; - } - - itemstack = this.minecraft.player.getMainHandItem(); - } - - boolean flag2 = false; - -// if (Config.isShaders()) { TODO -// Shaders.beginHand(matrix, flag2); -// } else { - matrix.pushPose(); -// } - - this.lightTexture.turnOnLightLayer(); - MultiBufferSource.BufferSource multibuffersource$buffersource = this.renderBuffers.bufferSource(); - this.itemInHandRenderer.renderArmWithItem(this.minecraft.player, partialTicks, - 0.0F, InteractionHand.OFF_HAND, this.minecraft.player.getAttackAnim(partialTicks), itemstack, 0.0F, - matrix, multibuffersource$buffersource, - this.minecraft.getEntityRenderDispatcher().getPackedLightCoords(this.minecraft.player, partialTicks)); - multibuffersource$buffersource.endBatch(); - this.lightTexture.turnOffLightLayer(); - -// if (Config.isShaders()) { TODO -// Shaders.endHand(matrix); -// } else { - matrix.popPose(); -// } - - matrix.popPose(); - - if (renderTeleport) { - matrix.pushPose(); - matrix.setIdentity(); - this.applyVRModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, matrix); -// net.optifine.shaders.Program program = Shaders.activeProgram; TODO - -// if (Config.isShaders()) { -// Shaders.useProgram(Shaders.ProgramTexturedLit); -// } - - RenderSystem.enableBlend(); - RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, - GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, - GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); - RenderSystem.disableTexture(); - - if (ClientNetworkHelper.isLimitedSurvivalTeleport() && !GameRendererVRMixin.DATA_HOLDER.vrPlayer.getFreeMove() - && this.minecraft.gameMode.hasMissTime() - && GameRendererVRMixin.DATA_HOLDER.teleportTracker.vrMovementStyle.arcAiming - && !GameRendererVRMixin.DATA_HOLDER.bowTracker.isActive(this.minecraft.player)) { - matrix.pushPose(); - this.SetupRenderingAtController(1, matrix); - Vec3 vec3 = new Vec3(0.0D, 0.005D, 0.03D); - float f1 = 0.03F; - float f; - - if (GameRendererVRMixin.DATA_HOLDER.teleportTracker.isAiming()) { - f = 2.0F * (float) ((double) GameRendererVRMixin.DATA_HOLDER.teleportTracker.getTeleportEnergy() - - 4.0D * GameRendererVRMixin.DATA_HOLDER.teleportTracker.movementTeleportDistance) / 100.0F * f1; - } else { - f = 2.0F * GameRendererVRMixin.DATA_HOLDER.teleportTracker.getTeleportEnergy() / 100.0F * f1; - } - - if (f < 0.0F) { - f = 0.0F; - } - RenderSystem.setShader(GameRenderer::getPositionColorShader); - RenderSystem.setShaderTexture(0, new ResourceLocation("vivecraft:textures/white.png")); - this.renderFlatQuad(vec3.add(0.0D, 0.05001D, 0.0D), f, f, 0.0F, this.tpLimitedColor.getX(), - this.tpLimitedColor.getY(), this.tpLimitedColor.getZ(), 128, matrix); - this.renderFlatQuad(vec3.add(0.0D, 0.05D, 0.0D), f1, f1, 0.0F, this.tpLimitedColor.getX(), - this.tpLimitedColor.getY(), this.tpLimitedColor.getZ(), 50, matrix); - matrix.popPose(); - } - - if (GameRendererVRMixin.DATA_HOLDER.teleportTracker.isAiming()) { - RenderSystem.enableDepthTest(); - - if (GameRendererVRMixin.DATA_HOLDER.teleportTracker.vrMovementStyle.arcAiming) { - this.renderTeleportArc(GameRendererVRMixin.DATA_HOLDER.vrPlayer, matrix); - } - - } - - RenderSystem.enableTexture(); - RenderSystem.defaultBlendFunc(); - -// if (Config.isShaders()) { -// Shaders.useProgram(program); -// } - - matrix.popPose(); - } - } - - void render2D(float par1, RenderTarget framebuffer, Vec3 pos, org.vivecraft.utils.math.Matrix4f rot, - boolean depthAlways, PoseStack poseStack) { - if (!GameRendererVRMixin.DATA_HOLDER.bowTracker.isDrawing) { - boolean flag = this.isInMenuRoom(); - this.resetProjectionMatrix(this.getProjectionMatrix(this.getFov(this.mainCamera, par1, true))); - poseStack.pushPose(); - poseStack.setIdentity(); - this.applyVRModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, poseStack); - Vec3 vec3 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render - .getEye(GameRendererVRMixin.DATA_HOLDER.currentPass).getPosition(); - Vec3 vec31 = new Vec3(0.0D, 0.0D, 0.0D); - float f = GuiHandler.guiScale; - VRPlayer vrplayer = GameRendererVRMixin.DATA_HOLDER.vrPlayer; - Vec3 guipos = VRPlayer.room_to_world_pos(pos, GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render); - org.vivecraft.utils.math.Matrix4f matrix4f = org.vivecraft.utils.math.Matrix4f - .rotationY(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.rotation_radians); - org.vivecraft.utils.math.Matrix4f guirot = org.vivecraft.utils.math.Matrix4f.multiply(matrix4f, rot); - - poseStack.translate((float) (guipos.x - vec3.x), (float) (guipos.y - vec3.y), (float) (guipos.z - vec3.z)); - poseStack.mulPoseMatrix(guirot.toMCMatrix()); - poseStack.translate((float) vec31.x, (float) vec31.y, (float) vec31.z); - float f1 = f * GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.worldScale; - poseStack.scale(f1, f1, f1); - - framebuffer.bindRead(); - GlStateManager._disableCull(); - GlStateManager._enableTexture(); - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, framebuffer.getColorTextureId()); - - float[] color = new float[] { 1, 1, 1, 1 }; - if (!flag) { - if (this.minecraft.screen == null) { - color[3] = GameRendererVRMixin.DATA_HOLDER.vrSettings.hudOpacity; - } - - if (this.minecraft.player != null && this.minecraft.player.isShiftKeyDown()) { - color[3] *= 0.75F; - } - - GlStateManager._enableBlend(); - RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, - GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE_MINUS_DST_ALPHA, - GlStateManager.DestFactor.ONE); - } else { - GlStateManager._disableBlend(); - } - - if (depthAlways) { - GlStateManager._depthFunc(519); - } else { - GlStateManager._depthFunc(515); - } - - GlStateManager._depthMask(true); - GlStateManager._enableDepthTest(); - - - if (this.minecraft.level != null) { - if (((ItemInHandRendererExtension) this.itemInHandRenderer).isInsideOpaqueBlock(vec3)) { - vec3 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.hmd.getPosition(); - } - -// int i = Config.isShaders() ? 8 : 4; TODO - int i = 4; - if (Xplat.isModLoaded("iris") || Xplat.isModLoaded("oculus")) { - i = IrisHelper.ShaderLight(); - } - int j = Utils.getCombinedLightWithMin(this.minecraft.level, new BlockPos(vec3), i); - this.drawSizedQuadWithLightmap((float) this.minecraft.getWindow().getGuiScaledWidth(), - (float) this.minecraft.getWindow().getGuiScaledHeight(), 1.5F, j, color, - poseStack.last().pose()); - } else { - this.drawSizedQuad((float) this.minecraft.getWindow().getGuiScaledWidth(), - (float) this.minecraft.getWindow().getGuiScaledHeight(), 1.5F, color, poseStack.last().pose()); - } - - RenderSystem.defaultBlendFunc(); - GlStateManager._depthFunc(515); - GlStateManager._enableCull(); - - poseStack.popPose(); - } - } - - void renderPhysicalKeyboard(float partialTicks, PoseStack poseStack) { - if (!GameRendererVRMixin.DATA_HOLDER.bowTracker.isDrawing) { - this.resetProjectionMatrix(this.getProjectionMatrix(this.getFov(this.mainCamera, partialTicks, true))); - poseStack.pushPose(); - poseStack.setIdentity(); - // RenderSystem.enableRescaleNormal(); - // Lighting.setupFor3DItems(); - - this.minecraft.getProfiler().push("applyPhysicalKeyboardModelView"); - Vec3 vec3 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render - .getEye(GameRendererVRMixin.DATA_HOLDER.currentPass).getPosition(); - VRPlayer vrplayer = GameRendererVRMixin.DATA_HOLDER.vrPlayer; - Vec3 guipos = VRPlayer.room_to_world_pos(KeyboardHandler.Pos_room, - GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render); - org.vivecraft.utils.math.Matrix4f matrix4f = org.vivecraft.utils.math.Matrix4f - .rotationY(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.rotation_radians); - org.vivecraft.utils.math.Matrix4f guirot = org.vivecraft.utils.math.Matrix4f.multiply(matrix4f, - KeyboardHandler.Rotation_room); - poseStack.mulPoseMatrix(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render - .getEye(GameRendererVRMixin.DATA_HOLDER.currentPass).getMatrix().transposed().toMCMatrix()); - poseStack.translate((float) (guipos.x - vec3.x), (float) (guipos.y - vec3.y), (float) (guipos.z - vec3.z)); - // GlStateManager._multMatrix(guirot.transposed().toFloatBuffer()); - poseStack.mulPoseMatrix(guirot.toMCMatrix()); - float f = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.worldScale; - poseStack.scale(f, f, f); - this.minecraft.getProfiler().pop(); - - KeyboardHandler.physicalKeyboard.render(poseStack); - // Lighting.turnOff(); - // RenderSystem.disableRescaleNormal(); - poseStack.popPose(); - RenderSystem.applyModelViewMatrix(); - } - } - - private void renderGuiLayer(float par1, boolean depthAlways, PoseStack pMatrix) { - if (!GameRendererVRMixin.DATA_HOLDER.bowTracker.isDrawing) { - if (this.minecraft.screen != null || !this.minecraft.options.hideGui) { - if (!RadialHandler.isShowing()) { - boolean flag = this.isInMenuRoom(); - - PoseStack poseStack = RenderSystem.getModelViewStack(); - poseStack.pushPose(); - poseStack.setIdentity(); - RenderSystem.applyModelViewMatrix(); - - if (flag) { - pMatrix.pushPose(); - Vec3 eye = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render - .getEye(GameRendererVRMixin.DATA_HOLDER.currentPass).getPosition(); - pMatrix.translate((GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.origin.x - eye.x), - (GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.origin.y - eye.y), - (GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.origin.z - eye.z)); - //System.out.println(eye + " eye"); - //System.out.println(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.origin + " world"); - -// if (GameRendererVRMixin.DATA_HOLDER.menuWorldRenderer != null -// && GameRendererVRMixin.DATA_HOLDER.menuWorldRenderer.isReady()) { -// try { -// //this.renderTechjarsAwesomeMainMenuRoom(); -// } catch (Exception exception) { -// System.out.println("Error rendering main menu world, unloading to prevent more errors"); -// exception.printStackTrace(); -// GameRendererVRMixin.DATA_HOLDER.menuWorldRenderer.destroy(); -// } -// } else { - this.renderJrbuddasAwesomeMainMenuRoomNew(pMatrix); -// } - pMatrix.popPose(); - } - - pMatrix.pushPose(); - Vec3 vec31 = GuiHandler.applyGUIModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, pMatrix); - GuiHandler.guiFramebuffer.bindRead(); - RenderSystem.disableCull(); - RenderSystem.enableTexture(); - RenderSystem.setShaderTexture(0, GuiHandler.guiFramebuffer.getColorTextureId()); - - float[] color = new float[] { 1.0F, 1.0F, 1.0F, 1.0F }; - if (!flag) { - if (this.minecraft.screen == null) { - color[3] = GameRendererVRMixin.DATA_HOLDER.vrSettings.hudOpacity; - } - - if (this.minecraft.player != null && this.minecraft.player.isShiftKeyDown()) { - color[3] *= 0.75F; - } - - RenderSystem.enableBlend(); - RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, - GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, - GlStateManager.SourceFactor.ONE_MINUS_DST_ALPHA, GlStateManager.DestFactor.ONE); - if (GameRendererVRMixin.DATA_HOLDER.vrSettings.shaderGUIRender == VRSettings.ShaderGUIRender.BEFORE_TRANSLUCENT_SOLID && (Xplat.isModLoaded("iris") || Xplat.isModLoaded("oculus")) && IrisHelper.isShaderActive()) { - RenderSystem.disableBlend(); - } - } else { - RenderSystem.disableBlend(); - } - - if (depthAlways) { - RenderSystem.depthFunc(519); - } else { - RenderSystem.depthFunc(515); - } - - RenderSystem.depthMask(true); - RenderSystem.enableDepthTest(); - - // RenderSystem.disableLighting(); - - if (this.minecraft.level != null) { - if (((ItemInHandRendererExtension) this.itemInHandRenderer).isInsideOpaqueBlock(vec31)) { - vec31 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.hmd.getPosition(); - } - -// int i = Config.isShaders() ? 8 : 4; TODO - int i = 4; - if (Xplat.isModLoaded("iris") || Xplat.isModLoaded("oculus")) { - i = IrisHelper.ShaderLight(); - } - int j = Utils.getCombinedLightWithMin(this.minecraft.level, new BlockPos(vec31), i); - this.drawSizedQuadWithLightmap((float) this.minecraft.getWindow().getGuiScaledWidth(), - (float) this.minecraft.getWindow().getGuiScaledHeight(), 1.5F, j, color, - pMatrix.last().pose()); - } else { - RenderSystem.setShader(GameRenderer::getPositionTexShader); - this.drawSizedQuad((float) this.minecraft.getWindow().getGuiScaledWidth(), - (float) this.minecraft.getWindow().getGuiScaledHeight(), 1.5F, color, - pMatrix.last().pose()); - } - - // RenderSystem.blendColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.depthFunc(515); - RenderSystem.enableDepthTest(); - // RenderSystem.defaultAlphaFunc(); - RenderSystem.defaultBlendFunc(); - RenderSystem.enableCull(); - pMatrix.popPose(); - - poseStack.popPose(); - RenderSystem.applyModelViewMatrix(); - } - } - } - } - - public void SetupRenderingAtController(int controller, PoseStack matrix) { - Vec3 vec3 = this.getControllerRenderPos(controller); - vec3 = vec3.subtract(GameRendererVRMixin.DATA_HOLDER.vrPlayer.getVRDataWorld() - .getEye(GameRendererVRMixin.DATA_HOLDER.currentPass).getPosition()); - matrix.translate((double) ((float) vec3.x), (double) ((float) vec3.y), (double) ((float) vec3.z)); - float sc = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.worldScale; - if (minecraft.level != null && TelescopeTracker.isTelescope(minecraft.player.getUseItem())) { - matrix.mulPoseMatrix(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.hmd.getMatrix().inverted() - .transposed().toMCMatrix()); - MethodHolder.rotateDegXp(matrix, 90); - matrix.translate(controller == 0 ? 0.075 * sc : -0.075 * sc, -0.025 * sc, 0.0325 * sc); - } else { - matrix.mulPoseMatrix(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(controller) - .getMatrix().inverted().transposed().toMCMatrix()); - } - - matrix.scale(sc, sc, sc); - - } - - public void renderFlatQuad(Vec3 pos, float width, float height, float yaw, int r, int g, int b, int a, - PoseStack poseStack) { - Tesselator tesselator = Tesselator.getInstance(); - tesselator.getBuilder().begin(Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_NORMAL); - Vec3 vec3 = (new Vec3((double) (-width / 2.0F), 0.0D, (double) (height / 2.0F))) - .yRot((float) Math.toRadians((double) (-yaw))); - Vec3 vec31 = (new Vec3((double) (-width / 2.0F), 0.0D, (double) (-height / 2.0F))) - .yRot((float) Math.toRadians((double) (-yaw))); - Vec3 vec32 = (new Vec3((double) (width / 2.0F), 0.0D, (double) (-height / 2.0F))) - .yRot((float) Math.toRadians((double) (-yaw))); - Vec3 vec33 = (new Vec3((double) (width / 2.0F), 0.0D, (double) (height / 2.0F))) - .yRot((float) Math.toRadians((double) (-yaw))); - Matrix4f mat = poseStack.last().pose(); - tesselator.getBuilder().vertex(mat, (float) (pos.x + vec3.x), (float) pos.y, (float) (pos.z + vec3.z)) - .color(r, g, b, a).normal(0.0F, 1.0F, 0.0F).endVertex(); - tesselator.getBuilder().vertex(mat, (float) (pos.x + vec31.x), (float) pos.y, (float) (pos.z + vec31.z)) - .color(r, g, b, a).normal(0.0F, 1.0F, 0.0F).endVertex(); - tesselator.getBuilder().vertex(mat, (float) (pos.x + vec32.x), (float) pos.y, (float) (pos.z + vec32.z)) - .color(r, g, b, a).normal(0.0F, 1.0F, 0.0F).endVertex(); - tesselator.getBuilder().vertex(mat, (float) (pos.x + vec33.x), (float) pos.y, (float) (pos.z + vec33.z)) - .color(r, g, b, a).normal(0.0F, 1.0F, 0.0F).endVertex(); - tesselator.end(); - - } - - private void renderBox(Tesselator tes, Vec3 start, Vec3 end, float minX, float maxX, float minY, float maxY, - Vec3 up, Vec3i color, byte alpha, PoseStack poseStack) { - Vec3 vec3 = start.subtract(end).normalize(); - Vec3 vec31 = vec3.cross(up); - up = vec31.cross(vec3); - Vec3 vec32 = new Vec3(vec31.x * (double) minX, vec31.y * (double) minX, vec31.z * (double) minX); - vec31 = vec31.scale((double) maxX); - Vec3 vec33 = new Vec3(up.x * (double) minY, up.y * (double) minY, up.z * (double) minY); - up = up.scale((double) maxY); - org.vivecraft.utils.lwjgl.Vector3f vector3f = Utils.convertToVector3f(vec3); - org.vivecraft.utils.lwjgl.Vector3f vector3f1 = Utils.convertToVector3f(up.normalize()); - org.vivecraft.utils.lwjgl.Vector3f vector3f2 = Utils.convertToVector3f(vec31.normalize()); - Vec3 vec34 = start.add(vec31.x + vec33.x, vec31.y + vec33.y, vec31.z + vec33.z); - Vec3 vec35 = start.add(vec31.x + up.x, vec31.y + up.y, vec31.z + up.z); - Vec3 vec36 = start.add(vec32.x + vec33.x, vec32.y + vec33.y, vec32.z + vec33.z); - Vec3 vec37 = start.add(vec32.x + up.x, vec32.y + up.y, vec32.z + up.z); - Vec3 vec38 = end.add(vec31.x + vec33.x, vec31.y + vec33.y, vec31.z + vec33.z); - Vec3 vec39 = end.add(vec31.x + up.x, vec31.y + up.y, vec31.z + up.z); - Vec3 vec310 = end.add(vec32.x + vec33.x, vec32.y + vec33.y, vec32.z + vec33.z); - Vec3 vec311 = end.add(vec32.x + up.x, vec32.y + up.y, vec32.z + up.z); - BufferBuilder bufferbuilder = tes.getBuilder(); - Matrix4f mat = poseStack.last().pose(); - bufferbuilder.vertex(mat, (float) vec34.x, (float) vec34.y, (float) vec34.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f.x, vector3f.y, vector3f.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec36.x, (float) vec36.y, (float) vec36.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f.x, vector3f.y, vector3f.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec37.x, (float) vec37.y, (float) vec37.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f.x, vector3f.y, vector3f.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec35.x, (float) vec35.y, (float) vec35.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f.x, vector3f.y, vector3f.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec310.x, (float) vec310.y, (float) vec310.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f.x, -vector3f.y, -vector3f.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec38.x, (float) vec38.y, (float) vec38.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f.x, -vector3f.y, -vector3f.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec39.x, (float) vec39.y, (float) vec39.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f.x, -vector3f.y, -vector3f.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec311.x, (float) vec311.y, (float) vec311.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f.x, -vector3f.y, -vector3f.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec38.x, (float) vec38.y, (float) vec38.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f2.x, vector3f2.y, vector3f2.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec34.x, (float) vec34.y, (float) vec34.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f2.x, vector3f2.y, vector3f2.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec35.x, (float) vec35.y, (float) vec35.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f2.x, vector3f2.y, vector3f2.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec39.x, (float) vec39.y, (float) vec39.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f2.x, vector3f2.y, vector3f2.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec36.x, (float) vec36.y, (float) vec36.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f2.x, -vector3f2.y, -vector3f2.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec310.x, (float) vec310.y, (float) vec310.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f2.x, -vector3f2.y, -vector3f2.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec311.x, (float) vec311.y, (float) vec311.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f2.x, -vector3f2.y, -vector3f2.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec37.x, (float) vec37.y, (float) vec37.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f2.x, -vector3f2.y, -vector3f2.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec37.x, (float) vec37.y, (float) vec37.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f1.x, vector3f1.y, vector3f1.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec311.x, (float) vec311.y, (float) vec311.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f1.x, vector3f1.y, vector3f1.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec39.x, (float) vec39.y, (float) vec39.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f1.x, vector3f1.y, vector3f1.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec35.x, (float) vec35.y, (float) vec35.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f1.x, vector3f1.y, vector3f1.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec310.x, (float) vec310.y, (float) vec310.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f1.x, -vector3f1.y, -vector3f1.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec36.x, (float) vec36.y, (float) vec36.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f1.x, -vector3f1.y, -vector3f1.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec34.x, (float) vec34.y, (float) vec34.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f1.x, -vector3f1.y, -vector3f1.z) - .endVertex(); - bufferbuilder.vertex(mat, (float) vec38.x, (float) vec38.y, (float) vec38.z) - .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f1.x, -vector3f1.y, -vector3f1.z) - .endVertex(); - } - - private void renderJrbuddasAwesomeMainMenuRoomNew(PoseStack pMatrixStack) { - int i = 4; - float f = 2.5F; - float f1 = 1.3F; - float[] afloat = GameRendererVRMixin.DATA_HOLDER.vr.getPlayAreaSize(); - if (afloat == null) - afloat = new float[] { 2, 2 }; - - BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); - RenderSystem.setShader(GameRenderer::getPositionTexColorShader); - RenderSystem.depthFunc(519); - RenderSystem.depthMask(true); //TODO temp fix - RenderSystem.enableBlend(); - RenderSystem.defaultBlendFunc(); - RenderSystem.enableTexture(); - RenderSystem.setShaderTexture(0, Screen.BACKGROUND_LOCATION); - RenderSystem.setShaderColor(1, 1, 1, 1); - pMatrixStack.pushPose(); - float f2 = afloat[0] + f1; - float f3 = afloat[1] + f1; - pMatrixStack.translate(-f2 / 2.0F, 0.0F, -f3 / 2.0F); - - Matrix4f matrix4f = pMatrixStack.last().pose(); - bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR_NORMAL); - - float a, b, c, d; - a = b = c = d = 0.8f; - - bufferbuilder.vertex(matrix4f, 0, 0, 0).uv(0, 0).color(a, b, c, d).normal(0, 1, 0).endVertex(); - bufferbuilder.vertex(matrix4f, 0, 0, f3).uv(0, i * f3).color(a, b, c, d).normal(0, 1, 0).endVertex(); - bufferbuilder.vertex(matrix4f, f2, 0, f3).uv(i * f2, i * f3).color(a, b, c, d).normal(0, 1, 0).endVertex(); - bufferbuilder.vertex(matrix4f, f2, 0, 0).uv(i * f2, 0).color(a, b, c, d).normal(0, 1, 0).endVertex(); - - bufferbuilder.vertex(matrix4f, 0, f, f3).uv(0, 0).color(a, b, c, d).normal(0, -1, 0).endVertex(); - bufferbuilder.vertex(matrix4f, 0, f, 0).uv(0, i * f3).color(a, b, c, d).normal(0, -1, 0).endVertex(); - bufferbuilder.vertex(matrix4f, f2, f, 0).uv(i * f2, i * f3).color(a, b, c, d).normal(0, -1, 0).endVertex(); - bufferbuilder.vertex(matrix4f, f2, f, f3).uv(i * f2, 0).color(a, b, c, d).normal(0, -1, 0).endVertex(); - - bufferbuilder.vertex(matrix4f, 0, 0, 0).uv(0, 0).color(a, b, c, d).normal(1, 0, 0).endVertex(); - bufferbuilder.vertex(matrix4f, 0, f, 0).uv(0, i * f).color(a, b, c, d).normal(1, 0, 0).endVertex(); - bufferbuilder.vertex(matrix4f, 0, f, f3).uv(i * f3, i * f).color(a, b, c, d).normal(1, 0, 0).endVertex(); - bufferbuilder.vertex(matrix4f, 0, 0, f3).uv(i * f3, 0).color(a, b, c, d).normal(1, 0, 0).endVertex(); - - bufferbuilder.vertex(matrix4f, f2, 0, 0).uv(0, 0).color(a, b, c, d).normal(-1, 0, 0).endVertex(); - bufferbuilder.vertex(matrix4f, f2, 0, f3).uv(i * f3, 0).color(a, b, c, d).normal(-1, 0, 0).endVertex(); - bufferbuilder.vertex(matrix4f, f2, f, f3).uv(i * f3, i * f).color(a, b, c, d).normal(-1, 0, 0).endVertex(); - bufferbuilder.vertex(matrix4f, f2, f, 0).uv(0, i * f).color(a, b, c, d).normal(-1, 0, 0).endVertex(); - - bufferbuilder.vertex(matrix4f, 0, 0, 0).uv(0, 0).color(a, b, c, d).normal(0, 0, 1).endVertex(); - bufferbuilder.vertex(matrix4f, f2, 0, 0).uv(i * f2, 0).color(a, b, c, d).normal(0, 0, 1).endVertex(); - bufferbuilder.vertex(matrix4f, f2, f, 0).uv(i * f2, i * f).color(a, b, c, d).normal(0, 0, 1).endVertex(); - bufferbuilder.vertex(matrix4f, 0, f, 0).uv(0, i * f).color(a, b, c, d).normal(0, 0, 1).endVertex(); - - bufferbuilder.vertex(matrix4f, 0, 0, f3).uv(0, 0).color(a, b, c, d).normal(0, 0, -1).endVertex(); - bufferbuilder.vertex(matrix4f, 0, f, f3).uv(0, i * f).color(a, b, c, d).normal(0, 0, -1).endVertex(); - bufferbuilder.vertex(matrix4f, f2, f, f3).uv(i * f2, i * f).color(a, b, c, d).normal(0, 0, -1).endVertex(); - bufferbuilder.vertex(matrix4f, f2, 0, f3).uv(i * f2, 0).color(a, b, c, d).normal(0, 0, -1).endVertex(); - - bufferbuilder.end(); - BufferUploader.end(bufferbuilder); - pMatrixStack.popPose(); - - } - - public void renderVRFabulous(float partialTicks, LevelRenderer worldrendererin, boolean menuhandright, - boolean menuhandleft, PoseStack pMatrix) { - if (ClientDataHolder.getInstance().currentPass == RenderPass.SCOPEL || ClientDataHolder.getInstance().currentPass == RenderPass.SCOPER) - return; - this.minecraft.getProfiler().popPush("VR"); - this.renderCrosshairAtDepth(!ClientDataHolder.getInstance().vrSettings.useCrosshairOcclusion, pMatrix); - this.minecraft.getMainRenderTarget().unbindWrite(); - ((LevelRendererExtension)worldrendererin).getAlphaSortVROccludedFramebuffer().clear(Minecraft.ON_OSX); - ((LevelRendererExtension)worldrendererin).getAlphaSortVROccludedFramebuffer().copyDepthFrom(this.minecraft.getMainRenderTarget()); - ((LevelRendererExtension)worldrendererin).getAlphaSortVROccludedFramebuffer().bindWrite(true); - - if (this.shouldOccludeGui()) { - this.renderGuiLayer(partialTicks, false, pMatrix); - this.renderVrShadow(partialTicks, false, pMatrix); - - if (KeyboardHandler.Showing) { - if (DATA_HOLDER.vrSettings.physicalKeyboard) { - this.renderPhysicalKeyboard(partialTicks, pMatrix); - } else { - this.render2D(partialTicks, KeyboardHandler.Framebuffer, KeyboardHandler.Pos_room, - KeyboardHandler.Rotation_room, false, pMatrix); - } - } - - if (RadialHandler.isShowing()) { - this.render2D(partialTicks, RadialHandler.Framebuffer, RadialHandler.Pos_room, - RadialHandler.Rotation_room, false, pMatrix); - } - } - - ((LevelRendererExtension)worldrendererin).getAlphaSortVRUnoccludedFramebuffer().clear(Minecraft.ON_OSX); - ((LevelRendererExtension)worldrendererin).getAlphaSortVRUnoccludedFramebuffer().bindWrite(true); - - if (!this.shouldOccludeGui()) { - this.renderGuiLayer(partialTicks, false, pMatrix); - this.renderVrShadow(partialTicks, false, pMatrix); - - if (KeyboardHandler.Showing) { - if (DATA_HOLDER.vrSettings.physicalKeyboard) { - this.renderPhysicalKeyboard(partialTicks, pMatrix); - } else { - this.render2D(partialTicks, KeyboardHandler.Framebuffer, KeyboardHandler.Pos_room, - KeyboardHandler.Rotation_room, false, pMatrix); - } - } - - if (RadialHandler.isShowing()) { - this.render2D(partialTicks, RadialHandler.Framebuffer, RadialHandler.Pos_room, - RadialHandler.Rotation_room, false, pMatrix); - } - } - - this.renderVRSelfEffects(partialTicks); - VRWidgetHelper.renderVRThirdPersonCamWidget(); - VRWidgetHelper.renderVRHandheldCameraWidget(); - boolean flag = this.shouldRenderHands(); - this.renderVRHands(partialTicks, flag && menuhandright, flag && menuhandleft, true, true, pMatrix); - ((LevelRendererExtension)worldrendererin).getAlphaSortVRHandsFramebuffer().clear(Minecraft.ON_OSX); - ((LevelRendererExtension)worldrendererin).getAlphaSortVRHandsFramebuffer().copyDepthFrom(this.minecraft.getMainRenderTarget()); - ((LevelRendererExtension)worldrendererin).getAlphaSortVRHandsFramebuffer().bindWrite(true); - this.renderVRHands(partialTicks, flag && !menuhandright, flag && !menuhandleft, false, false, pMatrix); - RenderSystem.enableTexture(); - RenderSystem.defaultBlendFunc(); - // RenderSystem.defaultAlphaFunc(); - RenderSystem.setShaderColor(1,1,1,1); - // Lighting.turnBackOn(); - // Lighting.turnOff(); - this.minecraft.getMainRenderTarget().bindWrite(true); - } - - @Override - public void renderVrFast(float partialTicks, boolean secondpass, boolean menuright, boolean menuleft, - PoseStack pMatrix) { - if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.SCOPEL - || GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.SCOPER) - return; - this.minecraft.getProfiler().popPush("VR"); - this.lightTexture.turnOffLightLayer(); - - if (secondpass) { - this.renderVrShadow(partialTicks, !this.shouldOccludeGui(), pMatrix); - } - - if (!secondpass) { - this.renderCrosshairAtDepth(!GameRendererVRMixin.DATA_HOLDER.vrSettings.useCrosshairOcclusion, pMatrix); - } - - if (!secondpass) { - VRWidgetHelper.renderVRThirdPersonCamWidget(); - } - - if (!secondpass) { - VRWidgetHelper.renderVRHandheldCameraWidget(); - } - - if (secondpass && (Minecraft.getInstance().screen != null || !KeyboardHandler.Showing)) { - this.renderGuiLayer(partialTicks, !this.shouldOccludeGui(), pMatrix); - } - - if (secondpass && KeyboardHandler.Showing) { - if (GameRendererVRMixin.DATA_HOLDER.vrSettings.physicalKeyboard) { - this.renderPhysicalKeyboard(partialTicks, pMatrix); - } else { - this.render2D(partialTicks, KeyboardHandler.Framebuffer, KeyboardHandler.Pos_room, - KeyboardHandler.Rotation_room, !this.shouldOccludeGui(), pMatrix); - } - } - - if (secondpass && RadialHandler.isShowing()) { - this.render2D(partialTicks, RadialHandler.Framebuffer, RadialHandler.Pos_room, RadialHandler.Rotation_room, - !this.shouldOccludeGui(), pMatrix); - } - // render hands in second pass when gui is open - boolean renderHandsSecond = RadialHandler.isShowing() || KeyboardHandler.Showing || Minecraft.getInstance().screen != null; - if (secondpass == renderHandsSecond) { - // should render hands in second pass if menus are open, else in the first pass - // only render the hands only once - this.renderVRHands(partialTicks, this.shouldRenderHands(), this.shouldRenderHands(), menuright, menuleft, - pMatrix); - } - this.renderVRSelfEffects(partialTicks); - } - - public void drawSizedQuad(float displayWidth, float displayHeight, float size, float[] color) { - float f = displayHeight / displayWidth; - BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); - bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR_NORMAL); - bufferbuilder.vertex((double) (-(size / 2.0F)), (double) (-(size * f) / 2.0F), 0.0D).uv(0.0F, 0.0F) - .color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); - bufferbuilder.vertex((double) (size / 2.0F), (double) (-(size * f) / 2.0F), 0.0D).uv(1.0F, 0.0F) - .color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); - bufferbuilder.vertex((double) (size / 2.0F), (double) (size * f / 2.0F), 0.0D).uv(1.0F, 1.0F) - .color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); - bufferbuilder.vertex((double) (-(size / 2.0F)), (double) (size * f / 2.0F), 0.0D).uv(0.0F, 1.0F) - .color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); - bufferbuilder.end(); - BufferUploader.end(bufferbuilder); - } - - public void drawSizedQuad(float displayWidth, float displayHeight, float size, float[] color, Matrix4f pMatrix) { - RenderSystem.setShader(GameRenderer::getPositionTexColorShader); - float f = displayHeight / displayWidth; - BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); - bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR_NORMAL); - bufferbuilder.vertex(pMatrix, (-(size / 2.0F)), (-(size * f) / 2.0F), 0).uv(0.0F, 0.0F) - .color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); - bufferbuilder.vertex(pMatrix, (size / 2.0F), (-(size * f) / 2.0F), 0).uv(1.0F, 0.0F) - .color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); - bufferbuilder.vertex(pMatrix, (size / 2.0F), (size * f / 2.0F), 0).uv(1.0F, 1.0F) - .color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); - bufferbuilder.vertex(pMatrix, (-(size / 2.0F)), (size * f / 2.0F), 0).uv(0.0F, 1.0F) - .color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); - bufferbuilder.end(); - BufferUploader.end(bufferbuilder); - } - - public void drawSizedQuadSolid(float displayWidth, float displayHeight, float size, float[] color, Matrix4f pMatrix) { - RenderSystem.setShader(GameRenderer::getRendertypeEntitySolidShader); - this.lightTexture.turnOnLightLayer(); - float f = displayHeight / displayWidth; - BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); - bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.NEW_ENTITY); - int light = LightTexture.pack(15, 15); - - // store old lights - Vector3f light0Old = RenderSystemAccessor.getShaderLightDirections()[0]; - Vector3f light1Old = RenderSystemAccessor.getShaderLightDirections()[1]; - - // set lights to front - RenderSystem.setShaderLights(new Vector3f(0,0,1), new Vector3f(0,0,1)); - RenderSystem.setupShaderLights(RenderSystem.getShader()); - - bufferbuilder.vertex(pMatrix, (-(size / 2.0F)), (-(size * f) / 2.0F), 0).color(color[0], color[1], color[2], color[3]) - .uv(0.0F, 0.0F).overlayCoords(0).uv2(light).normal(0.0F, 0.0F, 1.0F).endVertex(); - bufferbuilder.vertex(pMatrix, (size / 2.0F), (-(size * f) / 2.0F), 0).color(color[0], color[1], color[2], color[3]) - .uv(1.0F, 0.0F).overlayCoords(0).uv2(light).normal(0.0F, 0.0F, 1.0F).endVertex(); - bufferbuilder.vertex(pMatrix, (size / 2.0F), (size * f / 2.0F), 0).color(color[0], color[1], color[2], color[3]) - .uv(1.0F, 1.0F).overlayCoords(0).uv2(light).normal(0.0F, 0.0F, 1.0F).endVertex(); - bufferbuilder.vertex(pMatrix, (-(size / 2.0F)), (size * f / 2.0F), 0).color(color[0], color[1], color[2], color[3]) - .uv(0.0F, 1.0F).overlayCoords(0).uv2(light).normal(0.0F, 0.0F, 1.0F).endVertex(); - bufferbuilder.end(); - BufferUploader.end(bufferbuilder); - this.lightTexture.turnOffLightLayer(); - - // reset lights - if (light0Old != null && light1Old != null) { - RenderSystem.setShaderLights(light0Old, light1Old); - RenderSystem.setupShaderLights(RenderSystem.getShader()); - } - } - - - public void drawSizedQuad(float displayWidth, float displayHeight, float size) { - this.drawSizedQuad(displayWidth, displayHeight, size, new float[] { 1, 1, 1, 1 }); - } - - public void drawSizedQuadWithLightmap(float displayWidth, float displayHeight, float size, int lighti, - float[] color, Matrix4f pMatrix) { - RenderSystem.setShader(GameRenderer::getRendertypeEntityCutoutNoCullShader); - float f = displayHeight / displayWidth; - this.lightTexture.turnOnLightLayer(); - BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); - bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.NEW_ENTITY); - - // store old lights - Vector3f light0Old = RenderSystemAccessor.getShaderLightDirections()[0]; - Vector3f light1Old = RenderSystemAccessor.getShaderLightDirections()[1]; - - // set lights to front - RenderSystem.setShaderLights(new Vector3f(0,0,1), new Vector3f(0,0,1)); - RenderSystem.setupShaderLights(RenderSystem.getShader()); - - bufferbuilder.vertex(pMatrix, (-(size / 2.0F)), (-(size * f) / 2.0F), 0).color(color[0], color[1], color[2], color[3]) - .uv(0.0F, 0.0F).overlayCoords(0).uv2(lighti).normal(0,0,1).endVertex(); - bufferbuilder.vertex(pMatrix, (size / 2.0F), (-(size * f) / 2.0F), 0).color(color[0], color[1], color[2], color[3]) - .uv(1.0F, 0.0F).overlayCoords(0).uv2(lighti).normal(0,0,1).endVertex(); - bufferbuilder.vertex(pMatrix, (size / 2.0F), (size * f / 2.0F), 0).color(color[0], color[1], color[2], color[3]) - .uv(1.0F, 1.0F).overlayCoords(0).uv2(lighti).normal(0,0,1).endVertex(); - bufferbuilder.vertex(pMatrix, (-(size / 2.0F)), (size * f / 2.0F), 0).color(color[0], color[1], color[2], color[3]) - .uv(0.0F, 1.0F).overlayCoords(0).uv2(lighti).normal(0,0,1).endVertex(); - bufferbuilder.end(); - BufferUploader.end(bufferbuilder); - this.lightTexture.turnOffLightLayer(); - - // reset lights - if (light0Old != null && light1Old != null) { - RenderSystem.setShaderLights(light0Old, light1Old); - RenderSystem.setupShaderLights(RenderSystem.getShader()); - } - } - - public void drawSizedQuadWithLightmap(float displayWidth, float displayHeight, float size, int lighti, - Matrix4f pMatrix) { - this.drawSizedQuadWithLightmap(displayWidth, displayHeight, size, lighti, new float[] { 1, 1, 1, 1 }, pMatrix); - } - - private void renderTeleportArc(VRPlayer vrPlayer, PoseStack poseStack) { - if (GameRendererVRMixin.DATA_HOLDER.teleportTracker.vrMovementStyle.showBeam - && GameRendererVRMixin.DATA_HOLDER.teleportTracker.isAiming() - && GameRendererVRMixin.DATA_HOLDER.teleportTracker.movementTeleportArcSteps > 1) { - this.minecraft.getProfiler().push("teleportArc"); - // boolean flag = Config.isShaders(); - boolean flag = false; - RenderSystem.enableCull(); - RenderSystem.setShader(GameRenderer::getPositionColorShader); - RenderSystem.setShaderTexture(0, new ResourceLocation("vivecraft:textures/white.png")); - Tesselator tesselator = Tesselator.getInstance(); - tesselator.getBuilder().begin(Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_NORMAL); - double d0 = GameRendererVRMixin.DATA_HOLDER.teleportTracker.lastTeleportArcDisplayOffset; - Vec3 vec3 = GameRendererVRMixin.DATA_HOLDER.teleportTracker.getDestination(); - boolean flag1 = vec3.x != 0.0D || vec3.y != 0.0D || vec3.z != 0.0D; - byte b0 = -1; - Vec3i vec3i; - - if (!flag1) { - vec3i = new Vec3i(83, 75, 83); - b0 = -128; - } else { - if (ClientNetworkHelper.isLimitedSurvivalTeleport() && !this.minecraft.player.getAbilities().mayfly) { - vec3i = this.tpLimitedColor; - } else { - vec3i = this.tpUnlimitedColor; - } - - d0 = GameRendererVRMixin.DATA_HOLDER.vrRenderer.getCurrentTimeSecs() - * (double) GameRendererVRMixin.DATA_HOLDER.teleportTracker.vrMovementStyle.textureScrollSpeed * 0.6D; - GameRendererVRMixin.DATA_HOLDER.teleportTracker.lastTeleportArcDisplayOffset = d0; - } - - float f = GameRendererVRMixin.DATA_HOLDER.teleportTracker.vrMovementStyle.beamHalfWidth * 0.15F; - int i = GameRendererVRMixin.DATA_HOLDER.teleportTracker.movementTeleportArcSteps - 1; - - if (GameRendererVRMixin.DATA_HOLDER.teleportTracker.vrMovementStyle.beamGrow) { - i = (int) ((double) i * GameRendererVRMixin.DATA_HOLDER.teleportTracker.movementTeleportProgress); - } - - double d1 = 1.0D / (double) i; - Vec3 vec31 = new Vec3(0.0D, 1.0D, 0.0D); - - for (int j = 0; j < i; ++j) { - double d2 = (double) j / (double) i + d0 * d1; - int k = Mth.floor(d2); - d2 = d2 - (double) ((float) k); - Vec3 vec32 = GameRendererVRMixin.DATA_HOLDER.teleportTracker - .getInterpolatedArcPosition((float) (d2 - d1 * (double) 0.4F)) - .subtract(this.minecraft.getCameraEntity().position()); - Vec3 vec33 = GameRendererVRMixin.DATA_HOLDER.teleportTracker.getInterpolatedArcPosition((float) d2) - .subtract(this.minecraft.getCameraEntity().position()); - float f2 = (float) d2 * 2.0F; - this.renderBox(tesselator, vec32, vec33, -f, f, (-1.0F + f2) * f, (1.0F + f2) * f, vec31, vec3i, b0, - poseStack); - } - - tesselator.end(); - RenderSystem.disableCull(); - - if (flag1 && GameRendererVRMixin.DATA_HOLDER.teleportTracker.movementTeleportProgress >= 1.0D) { - Vec3 vec34 = (new Vec3(vec3.x, vec3.y, vec3.z)).subtract(this.minecraft.getCameraEntity().position()); - int l = 1; - float f1 = 0.01F; - double d4 = 0.0D; - double d5 = 0.0D; - double d3 = 0.0D; - - if (l == 0) { - d5 -= (double) f1; - } - - if (l == 1) { - d5 += (double) f1; - } - - if (l == 2) { - d3 -= (double) f1; - } - - if (l == 3) { - d3 += (double) f1; - } - - if (l == 4) { - d4 -= (double) f1; - } - - if (l == 5) { - d4 += (double) f1; - } - - this.renderFlatQuad(vec34.add(d4, d5, d3), 0.6F, 0.6F, 0.0F, (int) ((double) vec3i.getX() * 1.03D), - (int) ((double) vec3i.getY() * 1.03D), (int) ((double) vec3i.getZ() * 1.03D), 64, poseStack); - - if (l == 0) { - d5 -= (double) f1; - } - - if (l == 1) { - d5 += (double) f1; - } - - if (l == 2) { - d3 -= (double) f1; - } - - if (l == 3) { - d3 += (double) f1; - } - - if (l == 4) { - d4 -= (double) f1; - } - - if (l == 5) { - d4 += (double) f1; - } - - this.renderFlatQuad(vec34.add(d4, d5, d3), 0.4F, 0.4F, 0.0F, (int) ((double) vec3i.getX() * 1.04D), - (int) ((double) vec3i.getY() * 1.04D), (int) ((double) vec3i.getZ() * 1.04D), 64, poseStack); - - if (l == 0) { - d5 -= (double) f1; - } - - if (l == 1) { - d5 += (double) f1; - } - - if (l == 2) { - d3 -= (double) f1; - } - - if (l == 3) { - d3 += (double) f1; - } - - if (l == 4) { - d4 -= (double) f1; - } - - if (l == 5) { - d4 += (double) f1; - } - - this.renderFlatQuad(vec34.add(d4, d5, d3), 0.2F, 0.2F, 0.0F, (int) ((double) vec3i.getX() * 1.05D), - (int) ((double) vec3i.getY() * 1.05D), (int) ((double) vec3i.getZ() * 1.05D), 64, poseStack); - } - - this.minecraft.getProfiler().pop(); - RenderSystem.enableCull(); - } - } - - @Override - public void drawEyeStencil(boolean flag1) { - - if (GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.SCOPEL - && GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.SCOPER) { - if ((GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.LEFT - || GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.RIGHT) - && GameRendererVRMixin.DATA_HOLDER.vrSettings.vrUseStencil) { -// net.optifine.shaders.Program program = Shaders.activeProgram; -// -// if (shaders && Shaders.dfb != null) { -// Shaders.dfb.bindFramebuffer(); -// Shaders.useProgram(Shaders.ProgramNone); -// -// for (int i = 0; i < Shaders.usedDepthBuffers; ++i) { -// GlStateManager._bindTexture(Shaders.dfb.depthTextures.get(i)); -// this.minecraft.vrRenderer.doStencil(false); -// } -// -// Shaders.useProgram(program); -// } else { - GameRendererVRMixin.DATA_HOLDER.vrRenderer.doStencil(false); -// } - } else { - GL11.glDisable(GL11.GL_STENCIL_TEST); - } - } else { - // No stencil for telescope - // GameRendererVRMixin.DATA_HOLDER.vrRenderer.doStencil(true); - } - } - - private void renderFaceOverlay(float par1, PoseStack pMatrix) { -// boolean flag = Config.isShaders(); - boolean flag = false; - -// if (flag) { TODO -// Shaders.beginFPOverlay(); -// } - - if (this.inBlock > 0.0F) { - this.renderFaceInBlock(); - this.renderGuiLayer(par1, true, pMatrix); - - if (KeyboardHandler.Showing) { - if (GameRendererVRMixin.DATA_HOLDER.vrSettings.physicalKeyboard) { - this.renderPhysicalKeyboard(par1, pMatrix); - } else { - this.render2D(par1, KeyboardHandler.Framebuffer, KeyboardHandler.Pos_room, - KeyboardHandler.Rotation_room, true, pMatrix); - } - } - - if (RadialHandler.isShowing()) { - this.render2D(par1, RadialHandler.Framebuffer, RadialHandler.Pos_room, RadialHandler.Rotation_room, - true, pMatrix); - } - - if (this.inBlock >= 1.0F) { - this.renderVRHands(par1, true, true, true, true, pMatrix); - } - } - -// if (flag) { TODO -// Shaders.endFPOverlay(); -// } - } - - private void renderFaceInBlock() { - Tesselator tesselator = Tesselator.getInstance(); - BufferBuilder bufferbuilder = tesselator.getBuilder(); - RenderSystem.setShaderColor(0.0F, 0.0F, 0.0F, ((GameRendererExtension) this.minecraft.gameRenderer).inBlock()); - - // orthographic matrix, (-1, -1) to (1, 1), near = 0.0, far 2.0 - Matrix4f mat = new Matrix4f(); - mat.m00 = 1.0F; - mat.m11 = 1.0F; - mat.m22 = -1.0F; - mat.m33 = 1.0F; - mat.m23 = -1.0F; - - GlStateManager._disableDepthTest(); - GlStateManager._disableTexture(); - GlStateManager._enableBlend(); - GlStateManager._disableCull(); - bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION); - bufferbuilder.vertex(mat, -1.5F, -1.5F, 0.0F).endVertex(); - bufferbuilder.vertex(mat, 1.5F, -1.5F, 0.0F).endVertex(); - bufferbuilder.vertex(mat, 1.5F, 1.5F, 0.0F).endVertex(); - bufferbuilder.vertex(mat, -1.5F, 1.5F, 0.0F).endVertex(); - tesselator.end(); - GlStateManager._enableTexture(); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - } - - public boolean shouldRenderCrosshair() { - if (ClientDataHolder.viewonly) { - return false; - } else if (this.minecraft.level == null) { - return false; - } else if (this.minecraft.screen != null) { - return false; - } else { - boolean flag = GameRendererVRMixin.DATA_HOLDER.vrSettings.renderInGameCrosshairMode == VRSettings.RenderPointerElement.ALWAYS - || (GameRendererVRMixin.DATA_HOLDER.vrSettings.renderInGameCrosshairMode == VRSettings.RenderPointerElement.WITH_HUD - && !this.minecraft.options.hideGui); - - if (!flag) { - return false; - } else if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.THIRD) { - return false; - } else if (GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.SCOPEL - && GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.SCOPER) { - if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.CAMERA) { - return false; - } else if (KeyboardHandler.Showing) { - return false; - } else if (RadialHandler.isUsingController(ControllerType.RIGHT)) { - return false; - } else if (GameRendererVRMixin.DATA_HOLDER.bowTracker.isNotched()) { - return false; - } else if (!GameRendererVRMixin.DATA_HOLDER.vr.getInputAction(GameRendererVRMixin.DATA_HOLDER.vr.keyVRInteract) - .isEnabledRaw(ControllerType.RIGHT) - && !GameRendererVRMixin.DATA_HOLDER.vr.keyVRInteract.isDown(ControllerType.RIGHT)) { - if (!GameRendererVRMixin.DATA_HOLDER.vr.getInputAction(GameRendererVRMixin.DATA_HOLDER.vr.keyClimbeyGrab) - .isEnabledRaw(ControllerType.RIGHT) - && !GameRendererVRMixin.DATA_HOLDER.vr.keyClimbeyGrab.isDown(ControllerType.RIGHT)) { - if (GameRendererVRMixin.DATA_HOLDER.teleportTracker.isAiming()) { - return false; - } else if (GameRendererVRMixin.DATA_HOLDER.climbTracker.isGrabbingLadder(0)) { - return false; - } else { - return !(GameRendererVRMixin.DATA_HOLDER.vrPlayer.worldScale > 15.0F); - } - } else { - return false; - } - } else { - return false; - } - } else { - return false; - } - } - } - - private void renderCrosshairAtDepth(boolean depthAlways, PoseStack poseStack) { - if (this.shouldRenderCrosshair()) { - this.minecraft.getProfiler().popPush("crosshair"); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - Vec3 vec3 = this.crossVec; - Vec3 vec31 = vec3.subtract(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(0).getPosition()); - float f = (float) vec31.length(); - float f1 = (float) ((double) (0.125F * GameRendererVRMixin.DATA_HOLDER.vrSettings.crosshairScale) - * Math.sqrt((double) GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.worldScale)); - vec3 = vec3.add(vec31.normalize().scale(-0.01D)); - poseStack.pushPose(); - poseStack.setIdentity(); - applyVRModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, poseStack); - - Vec3 vec32 = vec3.subtract(this.minecraft.getCameraEntity().position()); - poseStack.translate(vec32.x, vec32.y, vec32.z); - - if (this.minecraft.hitResult != null && this.minecraft.hitResult.getType() == HitResult.Type.BLOCK) { - BlockHitResult blockhitresult = (BlockHitResult) this.minecraft.hitResult; - - if (blockhitresult.getDirection() == Direction.DOWN) { - MethodHolder.rotateDeg(poseStack, - GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(0).getYaw(), 0.0F, 1.0F, - 0.0F); - MethodHolder.rotateDeg(poseStack, -90.0F, 1.0F, 0.0F, 0.0F); - } else if (blockhitresult.getDirection() == Direction.EAST) { - MethodHolder.rotateDeg(poseStack, 90.0F, 0.0F, 1.0F, 0.0F); - } else if (blockhitresult.getDirection() != Direction.NORTH - && blockhitresult.getDirection() != Direction.SOUTH) { - if (blockhitresult.getDirection() == Direction.UP) { - MethodHolder.rotateDeg(poseStack, - -GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(0).getYaw(), 0.0F, - 1.0F, 0.0F); - MethodHolder.rotateDeg(poseStack, -90.0F, 1.0F, 0.0F, 0.0F); - } else if (blockhitresult.getDirection() == Direction.WEST) { - MethodHolder.rotateDeg(poseStack, 90.0F, 0.0F, 1.0F, 0.0F); - } - } - } else { - MethodHolder.rotateDeg(poseStack, - -GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(0).getYaw(), 0.0F, 1.0F, - 0.0F); - MethodHolder.rotateDeg(poseStack, - -GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(0).getPitch(), 1.0F, 0.0F, - 0.0F); - } - - if (GameRendererVRMixin.DATA_HOLDER.vrSettings.crosshairScalesWithDistance) { - float f5 = 0.3F + 0.2F * f; - f1 *= f5; - } - - this.lightTexture.turnOnLightLayer(); - poseStack.scale(f1, f1, f1); - RenderSystem.depthMask(true); - RenderSystem.enableDepthTest(); - // RenderSystem.disableLighting(); - RenderSystem.disableCull(); - - if (depthAlways) { - RenderSystem.depthFunc(519); - } else { - RenderSystem.depthFunc(515); - } - - // boolean flag = Config.isShaders(); - boolean flag = false; - RenderSystem.enableBlend(); - RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.ONE_MINUS_DST_COLOR, - GlStateManager.DestFactor.ZERO, GlStateManager.SourceFactor.ONE, - GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); - int i = LevelRenderer.getLightColor(this.minecraft.level, new BlockPos(vec3)); - float f2 = 1.0F; - - if (this.minecraft.hitResult == null || this.minecraft.hitResult.getType() == HitResult.Type.MISS) { - f2 = 0.5F; - } - - RenderSystem.setShaderTexture(0, Screen.GUI_ICONS_LOCATION); - float f3 = 0.00390625F; - float f4 = 0.00390625F; - - BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); - - RenderSystem.setShader(GameRenderer::getRendertypeCutoutShader); - bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.BLOCK); - - bufferbuilder.vertex(poseStack.last().pose(), -1.0F, 1.0F, 0.0F).color(f2, f2, f2, 1.0F) - .uv(0.0F, 15.0F * f4).uv2(i).normal(0.0F, 0.0F, 1.0F).endVertex(); - bufferbuilder.vertex(poseStack.last().pose(), 1.0F, 1.0F, 0.0F).color(f2, f2, f2, 1.0F) - .uv(15.0F * f3, 15.0F * f4).uv2(i).normal(0.0F, 0.0F, 1.0F).endVertex(); - bufferbuilder.vertex(poseStack.last().pose(), 1.0F, -1.0F, 0.0F).color(f2, f2, f2, 1.0F) - .uv(15.0F * f3, 0.0F).uv2(i).normal(0.0F, 0.0F, 1.0F).endVertex(); - bufferbuilder.vertex(poseStack.last().pose(), -1.0F, -1.0F, 0.0F).color(f2, f2, f2, 1.0F) - .uv(0.0F, 0.0F).uv2(i).normal(0.0F, 0.0F, 1.0F).endVertex(); - - bufferbuilder.end(); - BufferUploader.end(bufferbuilder); - RenderSystem.defaultBlendFunc(); - RenderSystem.disableBlend(); - RenderSystem.enableCull(); - RenderSystem.depthFunc(515); - poseStack.popPose(); - } - } - - public boolean shouldOccludeGui() { - Vec3 vec3 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getEye(GameRendererVRMixin.DATA_HOLDER.currentPass) - .getPosition(); - - if (GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.THIRD - && GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.CAMERA) { - return !this.isInMenuRoom() && this.minecraft.screen == null && !KeyboardHandler.Showing - && !RadialHandler.isShowing() && GameRendererVRMixin.DATA_HOLDER.vrSettings.hudOcclusion - && !((ItemInHandRendererExtension) this.itemInHandRenderer).isInsideOpaqueBlock(vec3); - } else { - return true; - } - } - - private void renderVrShadow(float par1, boolean depthAlways, PoseStack poseStack) { - if (GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.THIRD - && GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.CAMERA) { - if (this.minecraft.player.isAlive()) { - if (!(((PlayerExtension) this.minecraft.player).getRoomYOffsetFromPose() < 0.0D)) { - if (this.minecraft.player.getVehicle() == null) { - AABB aabb = this.minecraft.player.getBoundingBox(); - - if (GameRendererVRMixin.DATA_HOLDER.vrSettings.vrShowBlueCircleBuddy && aabb != null) { - - poseStack.pushPose(); - poseStack.setIdentity(); - GlStateManager._disableCull(); - this.applyVRModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, poseStack); - Vec3 vec3 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render - .getEye(GameRendererVRMixin.DATA_HOLDER.currentPass).getPosition(); - LocalPlayer localplayer = this.minecraft.player; - Vec3 vec31 = new Vec3(this.rvelastX + (this.rveX - this.rvelastX) * (double) par1, - this.rvelastY + (this.rveY - this.rvelastY) * (double) par1, - this.rvelastZ + (this.rveZ - this.rvelastZ) * (double) par1); - Vec3 vec32 = vec31.subtract(vec3).add(0.0D, 0.005D, 0.0D); - this.setupPolyRendering(true); - RenderSystem.enableDepthTest(); - - if (depthAlways) { - RenderSystem.depthFunc(519); - } else { - GlStateManager._depthFunc(515); - } - - RenderSystem.setShader(GameRenderer::getPositionColorShader); - RenderSystem.setShaderTexture(0, new ResourceLocation("vivecraft:textures/white.png")); - this.renderFlatQuad(vec32, (float) (aabb.maxX - aabb.minX), (float) (aabb.maxZ - aabb.minZ), - 0.0F, 0, 0, 0, 64, poseStack); - RenderSystem.depthFunc(515); - this.setupPolyRendering(false); - poseStack.popPose(); - GlStateManager._enableCull(); - } - } - } - } - } - } - - public boolean shouldRenderHands() { - if (GameRendererVRMixin.DATA_HOLDER.viewonly) { - return false; - } else if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.THIRD) { - return GameRendererVRMixin.DATA_HOLDER.vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY; - } else { - return GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.CAMERA; - } - } - - private void renderVRSelfEffects(float par1) { - if (this.onfire && GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.THIRD - && GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.CAMERA) { - - if (this.onfire) { - this.renderFireInFirstPerson(); - } - - this.renderItemActivationAnimation(0, 0, par1); - } - } - - private void renderFireInFirstPerson() { - PoseStack posestack = new PoseStack(); - this.applyVRModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, posestack); - this.applystereo(GameRendererVRMixin.DATA_HOLDER.currentPass, posestack); - BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); - RenderSystem.depthFunc(519); - - if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.THIRD - || GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.CAMERA) { - GlStateManager._depthFunc(515); - } - - RenderSystem.enableBlend(); - RenderSystem.defaultBlendFunc(); - TextureAtlasSprite textureatlassprite = ModelBakery.FIRE_1.sprite(); - RenderSystem.enableDepthTest(); - -// if (SmartAnimations.isActive()) { TODO -// SmartAnimations.spriteRendered(textureatlassprite); -// } - - RenderSystem.setShader(GameRenderer::getPositionTexColorShader); - RenderSystem.setShaderTexture(0, textureatlassprite.atlas().location()); - float f = textureatlassprite.getU0(); - float f1 = textureatlassprite.getU1(); - float f2 = (f + f1) / 2.0F; - float f3 = textureatlassprite.getV0(); - float f4 = textureatlassprite.getV1(); - float f5 = (f3 + f4) / 2.0F; - float f6 = textureatlassprite.uvShrinkRatio(); - float f7 = Mth.lerp(f6, f, f2); - float f8 = Mth.lerp(f6, f1, f2); - float f9 = Mth.lerp(f6, f3, f5); - float f10 = Mth.lerp(f6, f4, f5); - float f11 = 1.0F; - float f12 = 0.3F; - float f13 = (float) (GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getHeadPivot().y - - ((GameRendererExtension) this.minecraft.gameRenderer).getRveY()); - - for (int i = 0; i < 4; ++i) { - posestack.pushPose(); - posestack.mulPose(Vector3f.YP.rotationDegrees( - (float) i * 90.0F - GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getBodyYaw())); - posestack.translate(0.0D, (double) (-f13), 0.0D); - Matrix4f matrix4f = posestack.last().pose(); - bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); - bufferbuilder.vertex(matrix4f, -f12, 0.0F, -f12).uv(f8, f10).color(1.0F, 1.0F, 1.0F, 0.9F).endVertex(); - bufferbuilder.vertex(matrix4f, f12, 0.0F, -f12).uv(f7, f10).color(1.0F, 1.0F, 1.0F, 0.9F).endVertex(); - bufferbuilder.vertex(matrix4f, f12, f13, -f12).uv(f7, f9).color(1.0F, 1.0F, 1.0F, 0.9F).endVertex(); - bufferbuilder.vertex(matrix4f, -f12, f13, -f12).uv(f8, f9).color(1.0F, 1.0F, 1.0F, 0.9F).endVertex(); - bufferbuilder.end(); - BufferUploader.end(bufferbuilder); - posestack.popPose(); - } - - RenderSystem.depthFunc(515); - RenderSystem.disableBlend(); - } - - public void applystereo(RenderPass currentPass, PoseStack matrix) { - if (currentPass == RenderPass.LEFT || currentPass == RenderPass.RIGHT) { - Vec3 vec3 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getEye(currentPass).getPosition() - .subtract(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getEye(RenderPass.CENTER) - .getPosition()); - matrix.translate((double) ((float) (-vec3.x)), (double) ((float) (-vec3.y)), (double) ((float) (-vec3.z))); - } - } - - @Override - public void restoreRVEPos(LivingEntity e) { - if (e != null) { - e.setPosRaw(this.rveX, this.rveY, this.rveZ); - e.xOld = this.rvelastX; - e.yOld = this.rvelastY; - e.zOld = this.rvelastZ; - e.xo = this.rveprevX; - e.yo = this.rveprevY; - e.zo = this.rveprevZ; - e.setYRot(this.rveyaw); - e.setXRot(this.rvepitch); - e.yRotO = this.rvelastyaw; - e.xRotO = this.rvelastpitch; - e.yHeadRot = this.rveyaw; - e.yHeadRotO = this.rvelastyaw; - e.eyeHeight = this.rveHeight; - this.cached = false; - } - } - - @Override - public void DrawScopeFB(PoseStack matrixStackIn, int i) { - if (ClientDataHolder.getInstance().currentPass != RenderPass.SCOPEL && ClientDataHolder.getInstance().currentPass != RenderPass.SCOPER) { - //this.lightTexture.turnOffLightLayer(); - matrixStackIn.pushPose(); - RenderSystem.enableDepthTest(); - RenderSystem.enableTexture(); - - if (i == 0) { - ClientDataHolder.getInstance().vrRenderer.telescopeFramebufferR.bindRead(); - RenderSystem.setShaderTexture(0, ClientDataHolder.getInstance().vrRenderer.telescopeFramebufferR.getColorTextureId()); - } - else { - ClientDataHolder.getInstance().vrRenderer.telescopeFramebufferL.bindRead(); - RenderSystem.setShaderTexture(0, ClientDataHolder.getInstance().vrRenderer.telescopeFramebufferL.getColorTextureId()); - } - - float scale = 0.0785F; - //actual framebuffer - float f = TelescopeTracker.viewPercent(i); - // this.drawSizedQuad(720.0F, 720.0F, scale, new float[]{f, f, f, 1}, matrixStackIn.last().pose()); - this.drawSizedQuadSolid(720.0F, 720.0F, scale, new float[]{f, f, f, 1}, matrixStackIn.last().pose()); - - RenderSystem.setShaderTexture(0, new ResourceLocation("textures/misc/spyglass_scope.png")); - RenderSystem.enableBlend(); - matrixStackIn.translate(0.0D, 0.0D, 0.00001D); - int light = LevelRenderer.getLightColor(this.minecraft.level, new BlockPos(ClientDataHolder.getInstance().vrPlayer.vrdata_world_render.getController(i).getPosition())); - this.drawSizedQuadWithLightmap(720.0F, 720.0F, scale, light, matrixStackIn.last().pose()); - - matrixStackIn.popPose(); - this.lightTexture.turnOnLightLayer(); - } - } -} \ No newline at end of file diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/ItemInHandRenderer.java.patch b/common/src/main/java/org/vivecraft/mixin/client/renderer/ItemInHandRenderer.java.patch deleted file mode 100644 index 2fd08ab12..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/ItemInHandRenderer.java.patch +++ /dev/null @@ -1,864 +0,0 @@ ---- a/net/minecraft/client/renderer/ItemInHandRenderer.java -+++ b/net/minecraft/client/renderer/ItemInHandRenderer.java -@@ -6,8 +6,14 @@ - import com.mojang.blaze3d.vertex.PoseStack; - import com.mojang.blaze3d.vertex.VertexConsumer; - import com.mojang.math.Matrix4f; -+import com.mojang.math.Quaternion; - import com.mojang.math.Vector3f; -+ - import java.util.Objects; -+import java.util.Optional; -+import java.util.stream.Stream; -+import javax.annotation.Nullable; -+import net.minecraft.Util; - import net.minecraft.client.Minecraft; - import net.minecraft.client.player.AbstractClientPlayer; - import net.minecraft.client.player.LocalPlayer; -@@ -16,21 +22,48 @@ - import net.minecraft.client.renderer.entity.ItemRenderer; - import net.minecraft.client.renderer.entity.player.PlayerRenderer; - import net.minecraft.client.renderer.texture.OverlayTexture; -+import net.minecraft.client.resources.model.BakedModel; -+import net.minecraft.core.BlockPos; - import net.minecraft.resources.ResourceLocation; - import net.minecraft.util.Mth; - import net.minecraft.world.InteractionHand; - import net.minecraft.world.entity.HumanoidArm; - import net.minecraft.world.entity.LivingEntity; -+import net.minecraft.world.item.ArrowItem; -+import net.minecraft.world.item.BlockItem; -+import net.minecraft.world.item.CompassItem; - import net.minecraft.world.item.CrossbowItem; -+import net.minecraft.world.item.FishingRodItem; -+import net.minecraft.world.item.FoodOnAStickItem; -+import net.minecraft.world.item.Item; - import net.minecraft.world.item.ItemStack; - import net.minecraft.world.item.Items; - import net.minecraft.world.item.MapItem; -+import net.minecraft.world.item.ShieldItem; -+import net.minecraft.world.item.SwordItem; -+import net.minecraft.world.item.TridentItem; -+import net.minecraft.world.item.UseAnim; -+import net.minecraft.world.item.enchantment.EnchantmentHelper; -+import net.minecraft.world.level.block.Block; -+import net.minecraft.world.level.block.TorchBlock; -+import net.minecraft.world.level.block.state.BlockState; - import net.minecraft.world.level.saveddata.maps.MapItemSavedData; -+import net.minecraft.world.phys.AABB; -+import net.minecraft.world.phys.Vec3; - import net.optifine.Config; - import net.optifine.CustomItems; - import net.optifine.reflect.Reflector; - import net.optifine.shaders.Shaders; -- -+import org.apache.commons.lang3.tuple.Triple; -+import org.vivecraft.gameplay.trackers.BowTracker; -+import org.vivecraft.gameplay.trackers.SwingTracker; -+import org.vivecraft.gameplay.trackers.TelescopeTracker; -+import org.vivecraft.provider.ControllerType; -+import org.vivecraft.render.RenderPass; -+import org.vivecraft.render.VRArmRenderer; -+import org.vivecraft.render.VRFirstPersonArmSwing; -+import org.vivecraft.render.VivecraftItemRendering; -+//TODO: this needs a lot of work - public class ItemInHandRenderer - { - private static final RenderType MAP_BACKGROUND = RenderType.text(new ResourceLocation("textures/map/map_background.png")); -@@ -115,6 +148,8 @@ - private final EntityRenderDispatcher entityRenderDispatcher; - private final ItemRenderer itemRenderer; - private static boolean renderItemHand = false; -+ public VRFirstPersonArmSwing swingType = VRFirstPersonArmSwing.Attack; -+ public float xdist = 0.0F; - - public ItemInHandRenderer(Minecraft pMinecraft) - { -@@ -123,6 +158,7 @@ - this.itemRenderer = pMinecraft.getItemRenderer(); - } - -+ - public void renderItem(LivingEntity pLivingEntity, ItemStack pItemStack, ItemTransforms.TransformType pTransformType, boolean pLeftHand, PoseStack pMatrixStack, MultiBufferSource pBuffer, int pCombinedLight) - { - CustomItems.setRenderOffHand(pLeftHand); -@@ -245,33 +281,49 @@ - { - boolean flag = pSide != HumanoidArm.LEFT; - float f = flag ? 1.0F : -1.0F; -- float f1 = Mth.sqrt(pSwingProgress); -- float f2 = -0.3F * Mth.sin(f1 * (float)Math.PI); -- float f3 = 0.4F * Mth.sin(f1 * ((float)Math.PI * 2F)); -- float f4 = -0.4F * Mth.sin(pSwingProgress * (float)Math.PI); -- pMatrixStack.translate((double)(f * (f2 + 0.64000005F)), (double)(f3 + -0.6F + pEquippedProgress * -0.6F), (double)(f4 + -0.71999997F)); -- pMvratrixStack.mulPose(Vector3f.YP.rotationDegrees(f * 45.0F)); -- float f5 = Mth.sin(pSwingProgress * pSwingProgress * (float)Math.PI); -- float f6 = Mth.sin(f1 * (float)Math.PI); -- pMatrixStack.mulPose(Vector3f.YP.rotationDegrees(f * f6 * 70.0F)); -- pMatrixStack.mulPose(Vector3f.ZP.rotationDegrees(f * f5 * -20.0F)); -+// float f1 = Mth.sqrt(pSwingProgress); -+// float f2 = -0.3F * Mth.sin(f1 * (float)Math.PI); -+// float f3 = 0.4F * Mth.sin(f1 * ((float)Math.PI * 2F)); -+// float f4 = -0.4F * Mth.sin(pSwingProgress * (float)Math.PI); -+// pMatrixStack.translate((double)(f * (f2 + 0.64000005F)), (double)(f3 + -0.6F + pEquippedProgress * -0.6F), (double)(f4 + -0.71999997F)); -+// pMatrixStack.mulPose(Vector3f.YP.rotationDegrees(f * 45.0F)); -+// float f5 = Mth.sin(pSwingProgress * pSwingProgress * (float)Math.PI); -+// float f6 = Mth.sin(f1 * (float)Math.PI); -+// pMatrixStack.mulPose(Vector3f.YP.rotationDegrees(f * f6 * 70.0F)); -+// pMatrixStack.mulPose(Vector3f.ZP.rotationDegrees(f * f5 * -20.0F)); - AbstractClientPlayer abstractclientplayer = this.minecraft.player; - RenderSystem.setShaderTexture(0, abstractclientplayer.getSkinTextureLocation()); -- pMatrixStack.translate((double)(f * -1.0F), (double)3.6F, 3.5D); -- pMatrixStack.mulPose(Vector3f.ZP.rotationDegrees(f * 120.0F)); -- pMatrixStack.mulPose(Vector3f.XP.rotationDegrees(200.0F)); -- pMatrixStack.mulPose(Vector3f.YP.rotationDegrees(f * -135.0F)); -- pMatrixStack.translate((double)(f * 5.6F), 0.0D, 0.0D); -- PlayerRenderer playerrenderer = (PlayerRenderer)this.entityRenderDispatcher.getRenderer(abstractclientplayer); -- -- if (flag) -- { -- playerrenderer.renderRightHand(pMatrixStack, pBuffer, pCombinedLight, abstractclientplayer); -- } -- else -- { -- playerrenderer.renderLeftHand(pMatrixStack, pBuffer, pCombinedLight, abstractclientplayer); -- } -+ VRArmRenderer vrarmrenderer = entityRenderDispatcher.armSkinMap.get(abstractclientplayer.getModelName()); -+ pMatrixStack.pushPose(); -+ -+ if (abstractclientplayer.swingingArm == InteractionHand.MAIN_HAND && flag) -+ { -+ this.transformFirstPersonVR(pMatrixStack, pSide, pSwingProgress); -+ } -+ -+ if (abstractclientplayer.swingingArm == InteractionHand.OFF_HAND && !flag) -+ { -+ this.transformFirstPersonVR(pMatrixStack, pSide, pSwingProgress); -+ } -+ // pMatrixStack.translate((double)(f * -1.0F), (double)3.6F, 3.5D); -+ // pMatrixStack.mulPose(Vector3f.ZP.rotationDegrees(f * 120.0F)); -+ // pMatrixStack.mulPose(Vector3f.XP.rotationDegrees(200.0F)); -+ // pMatrixStack.mulPose(Vector3f.YP.rotationDegrees(f * -135.0F)); -+ // pMatrixStack.translate((double)(f * 5.6F), 0.0D, 0.0D); -+ pMatrixStack.scale(0.4f, 0.4F, 0.4F); -+ boolean slim = abstractclientplayer.getSkinTextureLocation().getPath().equals("slim"); -+ pMatrixStack.translate(slim ? 0.345F * -f : 0.375F * -f, 0, slim ? 0.785F : 0.75F); -+ pMatrixStack.mulPose(Vector3f.XP.rotationDegrees(-90)); -+ pMatrixStack.mulPose(Vector3f.YP.rotationDegrees(180)); -+ if (flag) -+ { -+ vrarmrenderer.renderRightHand(pMatrixStack, pBuffer, pCombinedLight, abstractclientplayer); -+ } -+ else -+ { -+ vrarmrenderer.renderLeftHand(pMatrixStack, pBuffer, pCombinedLight, abstractclientplayer); -+ } -+ pMatrixStack.popPose(); - } - - private void applyEatTransform(PoseStack pMatrixStack, float pPartialTicks, HumanoidArm pHand, ItemStack pStack) -@@ -304,6 +356,49 @@ - pMatrixStack.mulPose(Vector3f.YP.rotationDegrees((float)i * -45.0F)); - } - -+ private void transformFirstPersonVR(PoseStack matrixStackIn, HumanoidArm hand, float swingProgress) -+ { -+ if (swingProgress != 0.0F) -+ { -+ switch (this.swingType) -+ { -+ case Attack: -+ float f2 = Mth.sin((float)((double)(swingProgress * 3.0F) * Math.PI)); -+ -+ if ((double)swingProgress > 0.5D) -+ { -+ f2 = Mth.sin((float)((double)swingProgress * Math.PI + Math.PI)); -+ } -+ -+ matrixStackIn.translate(0.0D, 0.0D, (double)0.2F); -+ matrixStackIn.mulPose(Vector3f.XP.rotationDegrees(f2 * 30.0F)); -+ matrixStackIn.translate(0.0D, 0.0D, (double) - 0.2F); -+ break; -+ -+ case Interact: -+ float f1 = Mth.sin((float)((double)(swingProgress * 3.0F) * Math.PI)); -+ -+ if ((double)swingProgress > 0.5D) -+ { -+ f1 = Mth.sin((float)((double)swingProgress * Math.PI + Math.PI)); -+ } -+ -+ matrixStackIn.mulPose(Vector3f.ZP.rotationDegrees((float)(hand == HumanoidArm.RIGHT ? -1 : 1) * f1 * 45.0F)); -+ break; -+ -+ case Use: -+ float f = Mth.sin((float)((double)(swingProgress * 2.0F) * Math.PI)); -+ -+ if ((double)swingProgress > 0.25D) -+ { -+ f = Mth.sin((float)((double)(swingProgress / 2.0F) * Math.PI + Math.PI)); -+ } -+ -+ matrixStackIn.translate(0.0D, 0.0D, (double)(-(1.0F + f) * 0.1F)); -+ } -+ } -+ } -+ - private void applyItemArmTransform(PoseStack pMatrixStack, HumanoidArm pHand, float pEquippedProg) - { - int i = pHand == HumanoidArm.RIGHT ? 1 : -1; -@@ -388,188 +483,481 @@ - return pStack.is(Items.CROSSBOW) && CrossbowItem.isCharged(pStack); - } - -- private void renderArmWithItem(AbstractClientPlayer pPlayer, float pPartialTicks, float pPitch, InteractionHand pHand, float pSwingProgress, ItemStack pStack, float pEquippedProgress, PoseStack pMatrixStack, MultiBufferSource pBuffer, int pCombinedLight) -+ void renderArmWithItem(AbstractClientPlayer pPlayer, float pPartialTicks, float pPitch, InteractionHand pHand, float pSwingProgress, ItemStack pStack, float pEquippedProgress, PoseStack pMatrixStack, MultiBufferSource pBuffer, int pCombinedLight) - { - if (!Config.isShaders() || !Shaders.isSkipRenderHand(pHand)) - { -- if (!pPlayer.isScoping()) -+ boolean flag = pHand == InteractionHand.MAIN_HAND; -+ HumanoidArm humanoidarm = flag ? pPlayer.getMainArm() : pPlayer.getMainArm().getOpposite(); -+ pEquippedProgress = this.getEquipProgress(pHand, pPartialTicks); -+ pMatrixStack.pushPose(); -+ boolean flag1 = true; -+ -+ if (this.minecraft.currentPass == RenderPass.THIRD && !this.dataholder.vrSettings.mixedRealityRenderHands) - { -- boolean flag = pHand == InteractionHand.MAIN_HAND; -- HumanoidArm humanoidarm = flag ? pPlayer.getMainArm() : pPlayer.getMainArm().getOpposite(); -- pMatrixStack.pushPose(); -+ flag1 = false; -+ } -+ -+ if (this.minecraft.currentPass == RenderPass.CAMERA) -+ { -+ flag1 = false; -+ } -+ -+ if (BowTracker.isBow(pStack) && this.dataholder.bowTracker.isActive((LocalPlayer)pPlayer)) -+ { -+ flag1 = false; -+ } -+ -+ if (TelescopeTracker.isTelescope(pStack) && (pHand == InteractionHand.OFF_HAND && this.minecraft.currentPass == RenderPass.SCOPEL || pHand == InteractionHand.MAIN_HAND && this.minecraft.currentPass == RenderPass.SCOPER)) -+ { -+ flag1 = false; -+ } -+ -+ if (flag1 && !pPlayer.isInvisible()) -+ { -+ this.renderPlayerArm(pMatrixStack, pBuffer, pCombinedLight, pEquippedProgress, pSwingProgress, humanoidarm); -+ } - -- if (pStack.isEmpty()) -+ if (!pStack.isEmpty()) -+ { -+ Item item = pStack.getItem(); -+ boolean flag2 = false; -+ VivecraftItemRendering vivecraftitemrendering = VivecraftItemRendering.Item; -+ -+ if (pStack.getUseAnimation() != UseAnim.EAT && pStack.getUseAnimation() != UseAnim.DRINK) - { -- if (flag && !pPlayer.isInvisible()) -+ if (item instanceof BlockItem) -+ { -+ Block block = ((BlockItem)item).getBlock(); -+ -+ if (block instanceof TorchBlock) -+ { -+ vivecraftitemrendering = VivecraftItemRendering.Block_Stick; -+ } -+ else -+ { -+ BakedModel bakedmodel = this.itemRenderer.getModel(pStack, this.minecraft.level, this.minecraft.player, 0); -+ -+ if (bakedmodel.isGui3d()) -+ { -+ vivecraftitemrendering = VivecraftItemRendering.Block_3D; -+ } -+ else -+ { -+ vivecraftitemrendering = VivecraftItemRendering.Block_Item; -+ } -+ } -+ } -+ else if (item instanceof MapItem) - { -- this.renderPlayerArm(pMatrixStack, pBuffer, pCombinedLight, pEquippedProgress, pSwingProgress, humanoidarm); -+ vivecraftitemrendering = VivecraftItemRendering.Map; - } -- } -- else if (pStack.getItem() instanceof MapItem) -- { -- if (flag && this.offHandItem.isEmpty()) -+ else if (pStack.getUseAnimation() == UseAnim.BOW) -+ { -+ vivecraftitemrendering = VivecraftItemRendering.Bow_Seated; -+ -+ if (this.dataholder.bowTracker.isActive((LocalPlayer)pPlayer)) -+ { -+ if (this.dataholder.bowTracker.isDrawing) -+ { -+ vivecraftitemrendering = VivecraftItemRendering.Bow_Roomscale_Drawing; -+ } -+ else -+ { -+ vivecraftitemrendering = VivecraftItemRendering.Bow_Roomscale; -+ } -+ } -+ } -+ else if (item instanceof SwordItem) -+ { -+ vivecraftitemrendering = VivecraftItemRendering.Sword; -+ } -+ else if (item instanceof ShieldItem) - { -- this.renderTwoHandedMap(pMatrixStack, pBuffer, pCombinedLight, pPitch, pEquippedProgress, pSwingProgress); -+ vivecraftitemrendering = VivecraftItemRendering.Shield; -+ } -+ else if (item instanceof TridentItem) -+ { -+ vivecraftitemrendering = VivecraftItemRendering.Spear; -+ } -+ else if (item instanceof CrossbowItem) -+ { -+ vivecraftitemrendering = VivecraftItemRendering.Crossbow; -+ } -+ else if (!(item instanceof CompassItem) && item != Items.CLOCK) -+ { -+ if (SwingTracker.isTool(item)) -+ { -+ vivecraftitemrendering = VivecraftItemRendering.Tool; -+ -+ if (item instanceof FoodOnAStickItem || item instanceof FishingRodItem) -+ { -+ vivecraftitemrendering = VivecraftItemRendering.Tool_Rod; -+ } -+ } -+ else if (TelescopeTracker.isTelescope(pStack)) -+ { -+ vivecraftitemrendering = VivecraftItemRendering.Telescope; -+ } - } - else - { -- this.renderOneHandedMap(pMatrixStack, pBuffer, pCombinedLight, pEquippedProgress, humanoidarm, pSwingProgress, pStack); -+ vivecraftitemrendering = VivecraftItemRendering.Compass; - } - } -- else if (pStack.is(Items.CROSSBOW)) -+ else - { -- boolean flag2 = CrossbowItem.isCharged(pStack); -- boolean flag3 = humanoidarm == HumanoidArm.RIGHT; -- int l = flag3 ? 1 : -1; -+ vivecraftitemrendering = VivecraftItemRendering.Noms; -+ } -+ -+ int k = flag ? 1 : -1; -+ double d8 = 0.7D; -+ double d0 = -0.05D; -+ double d1 = 0.005D; -+ double d2 = 0.0D; -+ double d3 = this.minecraft.vr.getGunAngle(); -+ Quaternion quaternion = Vector3f.YP.rotationDegrees(0.0F); -+ Quaternion quaternion1 = Vector3f.YP.rotationDegrees(0.0F); -+ quaternion.mul(Vector3f.XP.rotationDegrees((float)(-110.0D + d3))); -+ pMatrixStack.pushPose(); -+ boolean flag3 = false; - -- if (pPlayer.isUsingItem() && pPlayer.getUseItemRemainingTicks() > 0 && pPlayer.getUsedItemHand() == pHand) -+ if (vivecraftitemrendering == VivecraftItemRendering.Bow_Seated) -+ { -+ d1 += -0.1D; -+ d2 += 0.1D; -+ quaternion.mul(Vector3f.XP.rotationDegrees((float)(90.0D - d3))); -+ d8 = (double)0.7F; -+ } -+ else if (vivecraftitemrendering == VivecraftItemRendering.Bow_Roomscale) -+ { -+ quaternion = Vector3f.XP.rotationDegrees(0.0F); -+ pMatrixStack.mulPose(Vector3f.XP.rotationDegrees((float)(-110.0D + d3))); -+ d1 -= 0.25D; -+ d2 += (double)0.025F + 0.03D * d3 / 40.0D; -+ d0 += -0.0225D; -+ d8 = 1.0D; -+ } -+ else if (vivecraftitemrendering == VivecraftItemRendering.Bow_Roomscale_Drawing) -+ { -+ quaternion = Vector3f.YP.rotationDegrees(0.0F); -+ d8 = 1.0D; -+ int i = 0; -+ -+ if (this.dataholder.vrSettings.reverseShootingEye) - { -- this.applyItemArmTransform(pMatrixStack, humanoidarm, pEquippedProgress); -- pMatrixStack.translate((double)((float)l * -0.4785682F), (double) - 0.094387F, (double)0.05731531F); -- pMatrixStack.mulPose(Vector3f.XP.rotationDegrees(-11.935F)); -- pMatrixStack.mulPose(Vector3f.YP.rotationDegrees((float)l * 65.3F)); -- pMatrixStack.mulPose(Vector3f.ZP.rotationDegrees((float)l * -9.785F)); -- float f10 = (float)pStack.getUseDuration() - ((float)this.minecraft.player.getUseItemRemainingTicks() - pPartialTicks + 1.0F); -- float f14 = f10 / (float)CrossbowItem.getChargeDuration(pStack); -+ i = 1; -+ } - -- if (f14 > 1.0F) -- { -- f14 = 1.0F; -- } -+ Vec3 vec3 = this.dataholder.bowTracker.getAimVector(); -+ Vec3 vec31 = new Vec3(vec3.x, vec3.y, vec3.z); -+ Vec3 vec32 = this.minecraft.vrPlayer.vrdata_world_render.getHand(1).getCustomVector(new Vec3(0.0D, -1.0D, 0.0D)); -+ Vec3 vec33 = this.minecraft.vrPlayer.vrdata_world_render.getHand(1).getCustomVector(new Vec3(0.0D, 0.0D, -1.0D)); -+ vec31.cross(vec32); -+ double d4 = (180D / Math.PI) * Math.acos(vec31.dot(vec32)); -+ float f = (float)Math.toDegrees(Math.asin(vec31.y / vec31.length())); -+ float f1 = (float)Math.toDegrees(Math.atan2(vec31.x, vec31.z)); -+ Vec3 vec34 = new Vec3(0.0D, 1.0D, 0.0D); -+ Vec3 vec35 = new Vec3(vec31.x, 0.0D, vec31.z); -+ Vec3 vec36 = Vec3.ZERO; -+ double d5 = vec33.dot(vec35); - -- if (f14 > 0.1F) -- { -- float f17 = Mth.sin((f10 - 0.1F) * 1.3F); -- float f19 = f14 - 0.1F; -- float f20 = f17 * f19; -- pMatrixStack.translate((double)(f20 * 0.0F), (double)(f20 * 0.004F), (double)(f20 * 0.0F)); -- } -+ if (d5 != 0.0D) -+ { -+ vec36 = vec35.scale(d5); -+ } -+ -+ double d6 = 0.0D; -+ Vec3 vec37 = vec33.subtract(vec36).normalize(); -+ d6 = vec37.dot(vec34); -+ double d7 = vec35.dot(vec37.cross(vec34)); -+ float f2; - -- pMatrixStack.translate((double)(f14 * 0.0F), (double)(f14 * 0.0F), (double)(f14 * 0.04F)); -- pMatrixStack.scale(1.0F, 1.0F, 1.0F + f14 * 0.2F); -- pMatrixStack.mulPose(Vector3f.YN.rotationDegrees((float)l * 45.0F)); -+ if (d7 < 0.0D) -+ { -+ f2 = -((float)Math.acos(d6)); - } - else - { -- float f9 = -0.4F * Mth.sin(Mth.sqrt(pSwingProgress) * (float)Math.PI); -- float f13 = 0.2F * Mth.sin(Mth.sqrt(pSwingProgress) * ((float)Math.PI * 2F)); -- float f16 = -0.2F * Mth.sin(pSwingProgress * (float)Math.PI); -- pMatrixStack.translate((double)((float)l * f9), (double)f13, (double)f16); -- this.applyItemArmTransform(pMatrixStack, humanoidarm, pEquippedProgress); -- this.applyItemArmAttackTransform(pMatrixStack, humanoidarm, pSwingProgress); -+ f2 = (float)Math.acos(d6); -+ } - -- if (flag2 && pSwingProgress < 0.001F && flag) -- { -- pMatrixStack.translate((double)((float)l * -0.641864F), 0.0D, 0.0D); -- pMatrixStack.mulPose(Vector3f.YP.rotationDegrees((float)l * 10.0F)); -- } -+ float f3 = (float)((180D / Math.PI) * (double)f2); -+ -+ if (this.dataholder.bowTracker.isCharged()) -+ { -+ long j = Util.getMillis() - this.dataholder.bowTracker.startDrawTime; -+ d0 += 0.003D * Math.sin((double)j); - } - -- this.renderItem(pPlayer, pStack, flag3 ? ItemTransforms.TransformType.FIRST_PERSON_RIGHT_HAND : ItemTransforms.TransformType.FIRST_PERSON_LEFT_HAND, !flag3, pMatrixStack, pBuffer, pCombinedLight); -+ pMatrixStack.translate(0.0D, 0.0D, 0.1D); -+ pMatrixStack.last().pose().multiply(this.minecraft.vrPlayer.vrdata_world_render.getController(1).getMatrix().transposed().toMCMatrix()); -+ quaternion.mul(Vector3f.YP.rotationDegrees(f1)); -+ quaternion.mul(Vector3f.XP.rotationDegrees(-f)); -+ quaternion.mul(Vector3f.ZP.rotationDegrees(-f3)); -+ quaternion.mul(Vector3f.ZP.rotationDegrees(180.0F)); -+ pMatrixStack.last().pose().multiply(quaternion); -+ quaternion = Vector3f.YP.rotationDegrees(0.0F); -+ quaternion.mul(Vector3f.YP.rotationDegrees(180.0F)); -+ quaternion.mul(Vector3f.XP.rotationDegrees(160.0F)); -+ d1 += 0.1225D; -+ d0 += 0.125D; -+ d2 += 0.16D; - } -- else -+ else if (vivecraftitemrendering == VivecraftItemRendering.Crossbow) -+ { -+ d0 += (double)0.01F; -+ d2 += (double) - 0.02F; -+ d1 += (double) - 0.02F; -+ d8 = 0.5D; -+ quaternion = Vector3f.XP.rotationDegrees(0.0F); -+ quaternion.mul(Vector3f.YP.rotationDegrees(10.0F)); -+ } -+ else if (vivecraftitemrendering == VivecraftItemRendering.Map) -+ { -+ flag2 = true; -+ quaternion = Vector3f.XP.rotationDegrees(-45.0F); -+ d0 = 0.0D; -+ d1 = 0.16D; -+ d2 = -0.075D; -+ d8 = 0.75D; -+ } -+ else if (vivecraftitemrendering == VivecraftItemRendering.Noms) -+ { -+ long l = (long)this.minecraft.player.getUseItemRemainingTicks(); -+ quaternion = Vector3f.ZP.rotationDegrees(180.0F); -+ quaternion.mul(Vector3f.XP.rotationDegrees(-135.0F)); -+ d2 = d2 + 0.006D * Math.sin((double)l); -+ d2 = d2 + (double)0.02F; -+ d0 += (double)0.08F; -+ d8 = (double)0.4F; -+ } -+ else if (vivecraftitemrendering != VivecraftItemRendering.Item && vivecraftitemrendering != VivecraftItemRendering.Block_Item) - { -- boolean flag1 = humanoidarm == HumanoidArm.RIGHT; -+ if (vivecraftitemrendering == VivecraftItemRendering.Compass) -+ { -+ quaternion = Vector3f.YP.rotationDegrees(90.0F); -+ quaternion.mul(Vector3f.XP.rotationDegrees(25.0F)); -+ d8 = (double)0.4F; -+ } -+ else if (vivecraftitemrendering == VivecraftItemRendering.Block_3D) -+ { -+ d8 = (double)0.3F; -+ d2 += (double) - 0.1F; -+ d0 += (double)0.05F; -+ } -+ else if (vivecraftitemrendering == VivecraftItemRendering.Block_Stick) -+ { -+ quaternion = Vector3f.XP.rotationDegrees(0.0F); -+ d1 += -0.105D + 0.06D * d3 / 40.0D; -+ d2 += (double) - 0.1F; -+ quaternion.mul(Vector3f.XP.rotationDegrees(-45.0F)); -+ quaternion.mul(Vector3f.XP.rotationDegrees((float)d3)); -+ } -+ else if (vivecraftitemrendering == VivecraftItemRendering.Shield) -+ { -+ flag3 = !flag; -+ d8 = (double)0.4F; -+ d1 += (double)0.21F; -+ -+ if (flag) -+ { -+ d0 += (double)0.11F; -+ } -+ else -+ { -+ d0 += -0.015D; -+ } -+ -+ d2 += (double) - 0.01F; -+ quaternion.mul(Vector3f.XP.rotationDegrees((float)(105.0D - d3))); -+ -+ if (pPlayer.isUsingItem() && pPlayer.getUseItemRemainingTicks() > 0 && pPlayer.getUsedItemHand() == pHand) -+ { -+ quaternion.mul(Vector3f.ZP.rotationDegrees((float)(k * -5))); -+ d1 += (double) - 0.13F; -+ d0 += (double)((float)k * 0.05F); -+ d2 += (double) - 0.1F; -+ -+ if (pPlayer.isBlocking()) -+ { -+ quaternion.mul(Vector3f.YP.rotationDegrees((float)k * 90.0F)); -+ } -+ else -+ { -+ quaternion.mul(Vector3f.YP.rotationDegrees((1.0F - pEquippedProgress) * (float)k * 90.0F)); -+ } -+ } - -- if (pPlayer.isUsingItem() && pPlayer.getUseItemRemainingTicks() > 0 && pPlayer.getUsedItemHand() == pHand) -+ quaternion.mul(Vector3f.YP.rotationDegrees((float)k * -90.0F)); -+ } -+ else if (vivecraftitemrendering == VivecraftItemRendering.Spear) - { -- int k = flag1 ? 1 : -1; -+ quaternion = Vector3f.XP.rotationDegrees(0.0F); -+ d0 += (double) - 0.135F; -+ d2 = d2 + (double)0.575F; -+ d8 = (double)0.6F; -+ float f4 = 0.0F; -+ boolean flag5 = false; -+ int i1 = 0; - -- switch (pStack.getUseAnimation()) -+ if (pPlayer.isUsingItem() && pPlayer.getUseItemRemainingTicks() > 0 && pPlayer.getUsedItemHand() == pHand) - { -- case NONE: -- this.applyItemArmTransform(pMatrixStack, humanoidarm, pEquippedProgress); -- break; -- -- case EAT: -- case DRINK: -- this.applyEatTransform(pMatrixStack, pPartialTicks, humanoidarm, pStack); -- this.applyItemArmTransform(pMatrixStack, humanoidarm, pEquippedProgress); -- break; -- -- case BLOCK: -- this.applyItemArmTransform(pMatrixStack, humanoidarm, pEquippedProgress); -- break; -- -- case BOW: -- this.applyItemArmTransform(pMatrixStack, humanoidarm, pEquippedProgress); -- pMatrixStack.translate((double)((float)k * -0.2785682F), (double)0.18344387F, (double)0.15731531F); -- pMatrixStack.mulPose(Vector3f.XP.rotationDegrees(-13.935F)); -- pMatrixStack.mulPose(Vector3f.YP.rotationDegrees((float)k * 35.3F)); -- pMatrixStack.mulPose(Vector3f.ZP.rotationDegrees((float)k * -9.785F)); -- float f7 = (float)pStack.getUseDuration() - ((float)this.minecraft.player.getUseItemRemainingTicks() - pPartialTicks + 1.0F); -- float f8 = f7 / 20.0F; -- f8 = (f8 * f8 + f8 * 2.0F) / 3.0F; -+ flag5 = true; -+ i1 = EnchantmentHelper.getRiptide(pStack); - -- if (f8 > 1.0F) -- { -- f8 = 1.0F; -- } -+ if (i1 <= 0 || i1 > 0 && pPlayer.isInWaterOrRain()) -+ { -+ f4 = (float)pStack.getUseDuration() - ((float)this.minecraft.player.getUseItemRemainingTicks() - pPartialTicks + 1.0F); - -- if (f8 > 0.1F) -+ if (f4 > 10.0F) - { -- float f12 = Mth.sin((f7 - 0.1F) * 1.3F); -- float f15 = f8 - 0.1F; -- float f18 = f12 * f15; -- pMatrixStack.translate((double)(f18 * 0.0F), (double)(f18 * 0.004F), (double)(f18 * 0.0F)); -- } -+ f4 = 10.0F; - -- pMatrixStack.translate((double)(f8 * 0.0F), (double)(f8 * 0.0F), (double)(f8 * 0.04F)); -- pMatrixStack.scale(1.0F, 1.0F, 1.0F + f8 * 0.2F); -- pMatrixStack.mulPose(Vector3f.YN.rotationDegrees((float)k * 45.0F)); -- break; -- -- case SPEAR: -- this.applyItemArmTransform(pMatrixStack, humanoidarm, pEquippedProgress); -- pMatrixStack.translate((double)((float)k * -0.5F), (double)0.7F, (double)0.1F); -- pMatrixStack.mulPose(Vector3f.XP.rotationDegrees(-55.0F)); -- pMatrixStack.mulPose(Vector3f.YP.rotationDegrees((float)k * 35.3F)); -- pMatrixStack.mulPose(Vector3f.ZP.rotationDegrees((float)k * -9.785F)); -- float f11 = (float)pStack.getUseDuration() - ((float)this.minecraft.player.getUseItemRemainingTicks() - pPartialTicks + 1.0F); -- float f2 = f11 / 10.0F; -+ if (i1 > 0 && pPlayer.isInWaterOrRain()) -+ { -+ pMatrixStack.mulPose(Vector3f.ZP.rotationDegrees((float)(-this.minecraft.tickCounter * 10 * i1 % 360) - pPartialTicks * 10.0F * (float)i1)); -+ } -+ -+ if (this.minecraft.frameIndex % 4L == 0L) -+ { -+ this.minecraft.vr.triggerHapticPulse(flag ? 0 : 1, 200); -+ } - -- if (f2 > 1.0F) -- { -- f2 = 1.0F; -+ long j1 = Util.getMillis() - this.dataholder.bowTracker.startDrawTime; -+ d0 += 0.003D * Math.sin((double)j1); - } -+ } -+ } -+ -+ if (pPlayer.isAutoSpinAttack()) -+ { -+ i1 = 5; -+ d2 += (double) - 0.15F; -+ pMatrixStack.mulPose(Vector3f.ZP.rotationDegrees((float)(-this.minecraft.tickCounter * 10 * i1 % 360) - pPartialTicks * 10.0F * (float)i1)); -+ flag5 = true; -+ } -+ -+ if (!flag5) -+ { -+ d1 += 0.0D + 0.2D * d3 / 40.0D; -+ quaternion.mul(Vector3f.XP.rotationDegrees((float)d3)); -+ } -+ -+ quaternion.mul(Vector3f.XP.rotationDegrees(-65.0F)); -+ d2 = d2 + (double)(-0.75F + f4 / 10.0F * 0.25F); -+ } -+ else if (vivecraftitemrendering != VivecraftItemRendering.Sword) -+ { -+ if (vivecraftitemrendering == VivecraftItemRendering.Tool_Rod) -+ { -+ d2 += (double) - 0.15F; -+ d1 += -0.02D + d3 / 40.0D * 0.1D; -+ d0 += (double)0.05F; -+ quaternion.mul(Vector3f.XP.rotationDegrees(40.0F)); -+ d8 = (double)0.8F; -+ } -+ else if (vivecraftitemrendering == VivecraftItemRendering.Tool) -+ { -+ boolean flag4 = this.minecraft.climbTracker.isClaws(pStack) && this.minecraft.climbTracker.isClimbeyClimb(); -+ -+ if (flag4) -+ { -+ quaternion.mul(Vector3f.XP.rotationDegrees((float)(-d3))); -+ d8 = (double)0.3F; -+ d2 += (double)0.075F; -+ d1 += (double)0.02F; -+ d0 += (double)0.03F; - -- if (f2 > 0.1F) -+ if (this.minecraft.vr.keyClimbeyGrab.isDown(ControllerType.RIGHT) && flag || this.minecraft.vr.keyClimbeyGrab.isDown(ControllerType.LEFT) && !flag) - { -- float f3 = Mth.sin((f11 - 0.1F) * 1.3F); -- float f4 = f2 - 0.1F; -- float f5 = f3 * f4; -- pMatrixStack.translate((double)(f5 * 0.0F), (double)(f5 * 0.004F), (double)(f5 * 0.0F)); -+ d2 += (double) - 0.2F; - } -+ } - -- pMatrixStack.translate(0.0D, 0.0D, (double)(f2 * 0.2F)); -- pMatrixStack.scale(1.0F, 1.0F, 1.0F + f2 * 0.2F); -- pMatrixStack.mulPose(Vector3f.YN.rotationDegrees((float)k * 45.0F)); -+ if (item instanceof ArrowItem) -+ { -+ quaternion1 = Vector3f.ZP.rotationDegrees(-180.0F); -+ quaternion.mul(Vector3f.XP.rotationDegrees((float)(-d3))); -+ } -+ } -+ else if (vivecraftitemrendering == VivecraftItemRendering.Telescope) -+ { -+ quaternion1 = Vector3f.XP.rotationDegrees(0.0F); -+ quaternion = Vector3f.XP.rotationDegrees(0.0F); -+ d2 = 0.0D; -+ d1 = 0.0D; -+ d0 = 0.0D; - } - } -- else if (pPlayer.isAutoSpinAttack()) -- { -- this.applyItemArmTransform(pMatrixStack, humanoidarm, pEquippedProgress); -- int i = flag1 ? 1 : -1; -- pMatrixStack.translate((double)((float)i * -0.4F), (double)0.8F, (double)0.3F); -- pMatrixStack.mulPose(Vector3f.YP.rotationDegrees((float)i * 65.0F)); -- pMatrixStack.mulPose(Vector3f.ZP.rotationDegrees((float)i * -85.0F)); -- } -- else -+ } -+ else -+ { -+ quaternion = Vector3f.ZP.rotationDegrees(180.0F); -+ quaternion.mul(Vector3f.XP.rotationDegrees(-135.0F)); -+ d8 = (double)0.4F; -+ d0 += (double)0.08F; -+ d2 += (double) - 0.08F; -+ } -+ -+ if (pPlayer.swingingArm == pHand) -+ { -+ this.transformFirstPersonVR(pMatrixStack, humanoidarm, pSwingProgress); -+ } -+ -+ ItemRenderer itemrenderer = this.itemRenderer; -+ ItemRenderer.isfphand = true; -+ ItemTransforms.TransformType itemtransforms$transformtype = flag ? ItemTransforms.TransformType.FIRST_PERSON_RIGHT_HAND : (flag3 ? ItemTransforms.TransformType.FIRST_PERSON_LEFT_HAND : ItemTransforms.TransformType.FIRST_PERSON_RIGHT_HAND); -+ -+ if (pStack.hasTag() && pStack.getTag().getInt("CustomModelData") > 0) -+ { -+ itemtransforms$transformtype = ItemTransforms.TransformType.THIRD_PERSON_RIGHT_HAND; -+ pMatrixStack.scale(0.7F, 0.7F, 0.7F); -+ } -+ else -+ { -+ pMatrixStack.mulPose(quaternion1); -+ pMatrixStack.translate(d0, d1, d2); -+ pMatrixStack.mulPose(quaternion); -+ pMatrixStack.scale((float)d8, (float)d8, (float)d8); -+ } -+ -+ if (flag2) -+ { -+ RenderSystem.disableCull(); -+ this.renderMap(pMatrixStack, pBuffer, pCombinedLight, pStack); -+ } -+ else if (vivecraftitemrendering == VivecraftItemRendering.Telescope) -+ { -+ if (this.minecraft.currentPass != RenderPass.SCOPEL && this.minecraft.currentPass != RenderPass.SCOPER) - { -- float f6 = -0.4F * Mth.sin(Mth.sqrt(pSwingProgress) * (float)Math.PI); -- float f = 0.2F * Mth.sin(Mth.sqrt(pSwingProgress) * ((float)Math.PI * 2F)); -- float f1 = -0.2F * Mth.sin(pSwingProgress * (float)Math.PI); -- int j = flag1 ? 1 : -1; -- pMatrixStack.translate((double)((float)j * f6), (double)f, (double)f1); -- this.applyItemArmTransform(pMatrixStack, humanoidarm, pEquippedProgress); -- this.applyItemArmAttackTransform(pMatrixStack, humanoidarm, pSwingProgress); -+ pMatrixStack.pushPose(); -+ pMatrixStack.scale(0.625F, 0.625F, 0.625F); -+ pMatrixStack.translate(flag ? -0.53D : -0.47D, -0.5D, -0.6D); -+ //pMatrixStack.mulPose(Vector3f.XP.rotationDegrees(180.0F)); -+ this.minecraft.getBlockRenderer().getModelRenderer().renderModel(pMatrixStack.last(), pBuffer.getBuffer(Sheets.solidBlockSheet()), (BlockState)null, this.minecraft.getModelManager().getModel(TelescopeTracker.scopeModel), 0.5F, 0.5F, 1.0F, pCombinedLight, OverlayTexture.NO_OVERLAY); -+ pMatrixStack.popPose(); - } - -- this.renderItem(pPlayer, pStack, flag1 ? ItemTransforms.TransformType.FIRST_PERSON_RIGHT_HAND : ItemTransforms.TransformType.FIRST_PERSON_LEFT_HAND, !flag1, pMatrixStack, pBuffer, pCombinedLight); -+ pMatrixStack.pushPose(); -+ pMatrixStack.translate(flag ? -0.01875D : 0.01875D, 0.215D, -0.0626D); -+ pMatrixStack.mulPose(Vector3f.XP.rotationDegrees(90.0F)); -+ pMatrixStack.mulPose(Vector3f.YP.rotationDegrees(180.0F)); -+ pMatrixStack.mulPose(Vector3f.ZP.rotationDegrees(180.0F)); -+ this.minecraft.gameRenderer.DrawScopeFB(pMatrixStack, pHand == InteractionHand.MAIN_HAND ? 0 : 1); -+ pMatrixStack.popPose(); -+ } -+ else -+ { -+ this.renderItem(pPlayer, pStack, itemtransforms$transformtype, flag3, pMatrixStack, pBuffer, pCombinedLight); - } - -+ itemrenderer = this.itemRenderer; -+ ItemRenderer.isfphand = false; - pMatrixStack.popPose(); - } -+ -+ pMatrixStack.popPose(); - } - } - -@@ -679,4 +1067,41 @@ - return pHand == InteractionHand.MAIN_HAND ? RENDER_MAIN_HAND_ONLY : RENDER_OFF_HAND_ONLY; - } - } -+ -+ public float getEquipProgress(InteractionHand hand, float partialTicks) -+ { -+ return hand == InteractionHand.MAIN_HAND ? 1.0F - (this.oMainHandHeight + (this.mainHandHeight - this.oMainHandHeight) * partialTicks) : 1.0F - (this.oOffHandHeight + (this.offHandHeight - this.oOffHandHeight) * partialTicks); -+ } -+ -+ public boolean isInsideOpaqueBlock(Vec3 in) -+ { -+ if (this.minecraft.level == null) -+ { -+ return false; -+ } -+ else -+ { -+ BlockPos blockpos = new BlockPos(in); -+ return this.minecraft.level.getBlockState(blockpos).isSolidRender(this.minecraft.level, blockpos); -+ } -+ } -+ -+ @Nullable -+ public Triple getNearOpaqueBlock(Vec3 in, double dist) -+ { -+ if (this.minecraft.level == null) -+ { -+ return null; -+ } -+ else -+ { -+ AABB aabb = new AABB(in.subtract(dist, dist, dist), in.add(dist, dist, dist)); -+ Stream stream = BlockPos.betweenClosedStream(aabb).filter((bp) -> -+ { -+ return this.minecraft.level.getBlockState(bp).isViewBlocking(this.minecraft.level, bp); -+ }); -+ Optional optional = stream.findFirst(); -+ return optional.isPresent() ? Triple.of(1.0F, this.minecraft.level.getBlockState(optional.get()), optional.get()) : null; -+ } -+ } - } diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/LevelRenderer.java.patch b/common/src/main/java/org/vivecraft/mixin/client/renderer/LevelRenderer.java.patch deleted file mode 100644 index aff395246..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/LevelRenderer.java.patch +++ /dev/null @@ -1,596 +0,0 @@ ---- a/net/minecraft/client/renderer/LevelRenderer.java -+++ b/net/minecraft/client/renderer/LevelRenderer.java -@@ -173,7 +173,9 @@ - import net.optifine.util.RenderChunkUtils; - import org.apache.logging.log4j.LogManager; - import org.apache.logging.log4j.Logger; --import org.lwjgl.opengl.GL11; -+import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; -+import org.vivecraft.render.RenderPass; -+import org.vivecraft.settings.VRSettings; - - public class LevelRenderer implements ResourceManagerReloadListener, AutoCloseable - { -@@ -310,6 +312,16 @@ - private int frameId; - private boolean debugFixTerrainFrustumShadow; - -+ @Nullable -+ public RenderTarget alphaSortVROccludedFramebuffer; -+ @Nullable -+ public RenderTarget alphaSortVRUnoccludedFramebuffer; -+ @Nullable -+ public RenderTarget alphaSortVRHandsFramebuffer; -+ public float selR; -+ public float selG; -+ public float selB; -+ - public LevelRenderer(Minecraft pMinecraft, RenderBuffers pRenderBuffers) - { - this.minecraft = pMinecraft; -@@ -358,9 +370,16 @@ - - pLightTexture.turnOnLightLayer(); - Level level = this.minecraft.level; -- int i = Mth.floor(pCamX); -- int j = Mth.floor(p_109707_); -- int k = Mth.floor(pCamY); -+ //Vivecraft correct which xy pos doesn't get rain. -+ Vec3 vec3 = this.minecraft.vrPlayer.vrdata_world_render.getEye(RenderPass.CENTER).getPosition(); -+ if (this.minecraft.currentPass == RenderPass.THIRD || this.minecraft.currentPass == RenderPass.CAMERA) -+ { -+ vec3 = this.minecraft.vrPlayer.vrdata_world_render.getEye(this.minecraft.currentPass).getPosition(); -+ } -+ int i = Mth.floor(vec3.x); -+ int j = Mth.floor(vec3.y); -+ int k = Mth.floor(vec3.z); -+ // - Tesselator tesselator = Tesselator.getInstance(); - BufferBuilder bufferbuilder = tesselator.getBuilder(); - RenderSystem.disableCull(); -@@ -582,12 +601,15 @@ - - public void onResourceManagerReload(ResourceManager pResourceManager) - { -- this.initOutline(); - -- if (Minecraft.useShaderTransparency()) -- { -- this.initTransparency(); -- } -+ //Vivecraft -+ this.minecraft.vrRenderer.reinitFrameBuffers("Resource Reload"); -+ //this.initOutline(); -+ // -+// if (Minecraft.useShaderTransparency()) -+// { -+// this.initTransparency(); -+// } - } - - public void initOutline() -@@ -619,10 +641,11 @@ - } - } - -- private void initTransparency() -+ //unused -+ public void initTransparency() - { - this.deinitTransparency(); -- ResourceLocation resourcelocation = new ResourceLocation("shaders/post/transparency.json"); -+ ResourceLocation resourcelocation = new ResourceLocation("shaders/post/vrtransparency.json"); - - try - { -@@ -640,11 +663,11 @@ - this.weatherTarget = rendertarget4; - this.cloudsTarget = rendertarget; - } -- catch (Exception exception1) -+ catch (Exception exception) - { -- String s = exception1 instanceof JsonSyntaxException ? "parse" : "load"; -+ String s = exception instanceof JsonSyntaxException ? "parse" : "load"; - String s1 = "Failed to " + s + " shader: " + resourcelocation; -- LevelRenderer.TransparencyShaderException levelrenderer$transparencyshaderexception = new LevelRenderer.TransparencyShaderException(s1, exception1); -+ LevelRenderer.TransparencyShaderException levelrenderer$transparencyshaderexception = new LevelRenderer.TransparencyShaderException(s1, exception); - - if (this.minecraft.getResourcePackRepository().getSelectedIds().size() > 1) - { -@@ -654,7 +677,7 @@ - { - component = new TextComponent(this.minecraft.getResourceManager().getResource(resourcelocation).getSourceName()); - } -- catch (IOException ioexception1) -+ catch (IOException ioexception) - { - component = null; - } -@@ -674,7 +697,7 @@ - } - } - -- private void deinitTransparency() -+ public void deinitTransparency() - { - if (this.transparencyChain != null) - { -@@ -875,6 +898,7 @@ - } - } - -+ //unused - public void graphicsChanged() - { - if (Minecraft.useShaderTransparency()) -@@ -891,7 +915,8 @@ - { - if (this.level != null) - { -- this.graphicsChanged(); -+ //vivecraftn no. -+ //this.graphicsChanged(); - this.level.clearTintCaches(); - - if (this.chunkRenderDispatcher == null) -@@ -1040,7 +1065,8 @@ - this.viewArea.repositionCamera(d0, d2); - } - -- if (Config.isDynamicLights()) -+ // VIVECRAFT: only update on the first frame, otherwise third person makes it go crazy -+ if (Config.isDynamicLights() && this.minecraft.currentPass == RenderPass.LEFT) - { - DynamicLights.update(this); - } -@@ -1052,7 +1078,9 @@ - double d6 = Math.floor(vec3.x / 8.0D); - double d7 = Math.floor(vec3.y / 8.0D); - double d8 = Math.floor(vec3.z / 8.0D); -- this.needsFullRenderChunkUpdate = this.needsFullRenderChunkUpdate || d6 != this.prevCamX || d7 != this.prevCamY || d8 != this.prevCamZ; -+ // VIVECRAFT: Always update culling because different camera positions -+ this.needsFullRenderChunkUpdate = true;//this.needsFullRenderChunkUpdate || d6 != this.prevCamX || d7 != this.prevCamY || d8 != this.prevCamZ; -+ //TODO: Investigate - this.nextFullUpdateMillis.updateAndGet((p_194368_1_) -> - { - if (p_194368_1_ > 0L && System.currentTimeMillis() > p_194368_1_) -@@ -1539,17 +1567,25 @@ - } - } - -+ //cursed params - public void renderLevel(PoseStack pPoseStack, float pPartialTick, long pFinishNanoTime, boolean p_109603_, Camera pRenderBlockOutline, GameRenderer pCamera, LightTexture pGameRenderer, Matrix4f pLightTexture) - { - RenderSystem.setShaderGameTime(this.level.getGameTime(), pPartialTick); - this.blockEntityRenderDispatcher.prepare(this.level, pRenderBlockOutline, this.minecraft.hitResult); - this.entityRenderDispatcher.prepare(this.level, pRenderBlockOutline, this.minecraft.crosshairPickEntity); - ProfilerFiller profilerfiller = this.level.getProfiler(); -- profilerfiller.popPush("light_update_queue"); -- this.level.pollLightUpdates(); -- profilerfiller.popPush("light_updates"); -- boolean flag = this.level.isLightUpdateQueueEmpty(); -- this.level.getChunkSource().getLightEngine().runUpdates(Integer.MAX_VALUE, flag, true); -+ //Vivecraft once per frame -+ if (this.minecraft.currentPass == RenderPass.LEFT) -+ { -+ profilerfiller.popPush("light_update_queue"); -+ this.level.pollLightUpdates(); -+ profilerfiller.popPush("light_updates"); -+ boolean flag = this.level.isLightUpdateQueueEmpty(); -+ this.level.getChunkSource().getLightEngine().runUpdates(Integer.MAX_VALUE, flag, true); -+ } -+ //Vivecraft use our postchain -+ this.setShaderGroup(); -+ // - Vec3 vec3 = pRenderBlockOutline.getPosition(); - double d0 = vec3.x(); - double d1 = vec3.y(); -@@ -1615,6 +1651,12 @@ - Shaders.setCamera(pPoseStack, pRenderBlockOutline, pPartialTick); - Shaders.renderPrepare(); - } -+ // -+ -+ //Vivecraft - VR Stencil -+ this.minecraft.getProfiler().popPush("stencil"); -+ pCamera.drawEyeStencil(flag1); -+ // - - float f = pCamera.getRenderDistance(); - boolean flag3 = this.minecraft.level.effects().isFoggyAt(Mth.floor(d0), Mth.floor(d1)) || this.minecraft.gui.getBossOverlay().shouldCreateWorldFog(); -@@ -1655,13 +1697,8 @@ - profilerfiller.popPush("terrain"); - Lagometer.timerTerrain.start(); - -- if (this.minecraft.options.ofSmoothFps) -- { -- this.minecraft.getProfiler().popPush("finish"); -- GL11.glFinish(); -- this.minecraft.getProfiler().popPush("terrain"); -- } -- -+ //Vivecraft this is where ofSmoothFps, would be... if we allowed it. -+ - if (Config.isFogOff() && FogRenderer.fogStandard) - { - RenderSystem.setFogAllowed(false); -@@ -1678,6 +1715,10 @@ - ShadersRender.endTerrain(); - } - -+ //TODO: fix lighting? -+ Matrix4f matrix4f1 = new Matrix4f(); -+ matrix4f1.setIdentity(); -+ // - if (this.level.effects().constantAmbientLight()) - { - Lighting.setupNetherLevel(pPoseStack.last().pose()); -@@ -1733,6 +1774,10 @@ - GameRenderer.getPositionShader().apply(); - } - -+ //Vivecraft draw yourself sometimes. -+ boolean renderSelf = this.minecraft.currentPass == RenderPass.THIRD && this.dataholder.vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON || this.minecraft.currentPass == RenderPass.CAMERA; -+ renderSelf = renderSelf | (this.dataholder.vrSettings.shouldRenderSelf || this.dataholder.vrSettings.tmpRenderSelf); -+ // - for (Entity entity : this.level.entitiesForRendering()) - { - BlockPos blockpos = entity.blockPosition(); -@@ -1740,8 +1785,8 @@ - if (this.renderInfosEntities.contains(SectionPos.asLong(blockpos)) || blockpos.getY() <= i || blockpos.getY() >= j) - { - boolean flag5 = entity == this.minecraft.player && !this.minecraft.player.isSpectator(); -- -- if ((this.entityRenderDispatcher.shouldRender(entity, frustum, d0, d1, d2) || entity.hasIndirectPassenger(this.minecraft.player)) && (entity != pRenderBlockOutline.getEntity() || pRenderBlockOutline.isDetached() || pRenderBlockOutline.getEntity() instanceof LivingEntity && ((LivingEntity)pRenderBlockOutline.getEntity()).isSleeping()) && (!(entity instanceof LocalPlayer) || pRenderBlockOutline.getEntity() == entity || flag5)) -+ //Vivecraft insert selfRender -+ if ((this.entityRenderDispatcher.shouldRender(entity, frustum, d0, d1, d2) || entity.hasIndirectPassenger(this.minecraft.player)) && (renderSelf || entity != pRenderBlockOutline.getEntity() || pRenderBlockOutline.isDetached() || pRenderBlockOutline.getEntity() instanceof LivingEntity && ((LivingEntity)pRenderBlockOutline.getEntity()).isSleeping()) && (!(entity instanceof LocalPlayer) || pRenderBlockOutline.getEntity() == entity || flag5)) - { - String s = entity.getClass().getName(); - List list = this.mapEntityLists.get(s); -@@ -1763,6 +1808,13 @@ - { - ++this.renderedEntities; - -+ //Vivecraft put back location. -+ if (entity1 == pRenderBlockOutline.getEntity()) -+ { -+ pCamera.restoreRVEPos((LivingEntity)entity1); -+ } -+ // -+ - if (entity1.tickCount == 0) - { - entity1.xOld = entity1.getX(); -@@ -1798,6 +1850,14 @@ - - this.renderEntity(entity1, d0, d1, d2, pPartialTick, pPoseStack, multibuffersource); - this.renderedEntity = null; -+ -+ //Vivecraft put it back back -+ if (entity1 == pRenderBlockOutline.getEntity()) -+ { -+ pCamera.cacheRVEPos((LivingEntity)entity1); -+ pCamera.setupRVE(); -+ } -+ // - } - - list1.clear(); -@@ -1992,10 +2052,26 @@ - --renderEntitiesCounter; - this.checkPoseStack(pPoseStack); - HitResult hitresult = this.minecraft.hitResult; -- -+ -+ profilerfiller.popPush("outline"); -+ -+ //Vivecraft interact highlight -+ selR = selG = selB = 1f; -+ for (int c=0;c<2;c++) { -+ if(minecraft.interactTracker.isInteractActive(c) && (minecraft.interactTracker.inBlockHit[c] != null || minecraft.interactTracker.bukkit[c])) { -+ BlockPos blockpos = minecraft.interactTracker.inBlockHit[c] != null ? minecraft.interactTracker.inBlockHit[c].getBlockPos() : new BlockPos(minecraft.vrPlayer.vrdata_world_render.getController(c).getPosition()); -+ BlockState blockstate = this.level.getBlockState(blockpos); -+ this.renderHitOutline(pPoseStack, multibuffersource$buffersource.getBuffer(RenderType.lines()), pRenderBlockOutline.getEntity(), d0, d1, d2, blockpos, blockstate); -+ if (c==0) p_109603_ = false; //don't draw both -+ } -+ } -+ // -+ - if (p_109603_ && hitresult != null && hitresult.getType() == HitResult.Type.BLOCK) - { -- profilerfiller.popPush("outline"); -+ //vivecraft put back black outline -+ selR = selG = selB = 0f; -+ // - BlockPos blockpos1 = ((BlockHitResult)hitresult).getBlockPos(); - BlockState blockstate = this.level.getBlockState(blockpos1); - -@@ -2023,17 +2099,18 @@ - - PoseStack posestack = RenderSystem.getModelViewStack(); - posestack.pushPose(); -- posestack.mulPoseMatrix(pPoseStack.last().pose()); -- RenderSystem.applyModelViewMatrix(); -- -- if (flag2) -- { -- ShadersRender.beginDebug(); -- } -- -- this.minecraft.debugRenderer.render(pPoseStack, multibuffersource$buffersource, d0, d1, d2); -+ posestack.mulPoseMatrix(pPoseStack.last().pose()); -+ RenderSystem.applyModelViewMatrix(); -+ -+ if (flag2) -+ { -+ ShadersRender.beginDebug(); -+ } -+ -+ this.minecraft.debugRenderer.render(pPoseStack, multibuffersource$buffersource, d0, d1, d2); - posestack.popPose(); - RenderSystem.applyModelViewMatrix(); -+ profilerfiller.popPush("render bukkake"); - multibuffersource$buffersource.endBatch(Sheets.translucentCullBlockSheet()); - multibuffersource$buffersource.endBatch(Sheets.bannerSheet()); - multibuffersource$buffersource.endBatch(Sheets.shieldSheet()); -@@ -2051,15 +2128,17 @@ - { - multibuffersource$buffersource.endBatch(); - ShadersRender.endDebug(); -- Shaders.preRenderHand(); -- Matrix4f matrix4f1 = RenderSystem.getProjectionMatrix().copy(); -- ShadersRender.renderHand0(pCamera, pPoseStack, pRenderBlockOutline, pPartialTick); -- RenderSystem.setProjectionMatrix(matrix4f1); -+ //Shaders.preRenderHand(); -+ //Matrix4f matrix4f1 = RenderSystem.getProjectionMatrix().copy(); -+ //ShadersRender.renderHand0(pCamera, pPoseStack, pRenderBlockOutline, pPartialTick); -+ //RenderSystem.setProjectionMatrix(matrix4f1); - Shaders.preWater(); - } - -+ boolean menuHandleft = pCamera.isInMenuRoom() || this.minecraft.screen != null || KeyboardHandler.Showing; -+ boolean menuhandright = menuHandleft || this.minecraft.interactTracker.hotbar >= 0 && this.dataholder.vrSettings.vrTouchHotbar; - if (this.transparencyChain != null) -- { -+ { //fabulous! - multibuffersource$buffersource.endBatch(RenderType.lines()); - multibuffersource$buffersource.endBatch(); - this.translucentTarget.clear(Minecraft.ON_OSX); -@@ -2074,9 +2153,12 @@ - profilerfiller.popPush("particles"); - this.minecraft.particleEngine.render(pPoseStack, multibuffersource$buffersource, pGameRenderer, pRenderBlockOutline, pPartialTick, frustum); - RenderStateShard.PARTICLES_TARGET.clearRenderState(); -+ pCamera.renderVRFabulous(pPartialTick, this, menuhandright, menuHandleft, pPoseStack); - } - else -- { -+ { //Fast, Fancy -+ //once -+ pCamera.renderVrFast(pPartialTick, false, menuhandright, menuHandleft, pPoseStack); - profilerfiller.popPush("translucent"); - Lagometer.timerTerrain.start(); - -@@ -2110,6 +2192,8 @@ - } - - this.minecraft.particleEngine.render(pPoseStack, multibuffersource$buffersource, pGameRenderer, pRenderBlockOutline, pPartialTick, frustum); -+ //twice -+ pCamera.renderVrFast(pPartialTick, true, menuhandright, menuHandleft, pPoseStack); - - if (flag2) - { -@@ -2352,7 +2436,7 @@ - if (chunkrenderdispatcher$renderchunk.regionX != l || chunkrenderdispatcher$renderchunk.regionZ != i1) - { - PairInt pairint = PairInt.of(chunkrenderdispatcher$renderchunk.regionX, chunkrenderdispatcher$renderchunk.regionZ); -- map1 = map.computeIfAbsent(pairint, (kx) -> -+ map1 = map.computeIfAbsent(pairint, (p_lambda$renderBlockLayer$4_0_) -> - { - return new LinkedHashMap(8); - }); -@@ -3599,11 +3683,12 @@ - } - } - -+ //Vivecraft add configurable color. - private void renderHitOutline(PoseStack pPoseStack, VertexConsumer pConsumer, Entity pEntity, double pCamX, double p_109642_, double pCamY, BlockPos p_109644_, BlockState pCamZ) - { - if (!Config.isCustomEntityModels() || !CustomEntityModels.isCustomModel(pCamZ)) - { -- renderShape(pPoseStack, pConsumer, pCamZ.getShape(this.level, p_109644_, CollisionContext.of(pEntity)), (double)p_109644_.getX() - pCamX, (double)p_109644_.getY() - p_109642_, (double)p_109644_.getZ() - pCamY, 0.0F, 0.0F, 0.0F, 0.4F); -+ renderShape(pPoseStack, pConsumer, pCamZ.getShape(this.level, p_109644_, CollisionContext.of(pEntity)), (double)p_109644_.getX() - pCamX, (double)p_109644_.getY() - p_109642_, (double)p_109644_.getZ() - pCamY, this.selR, this.selG, this.selB, 0.4F); - } - } - -@@ -4084,6 +4169,7 @@ - public void levelEvent(Player pPlayer, int pType, BlockPos pPos, int pData) - { - Random random = this.level.random; -+ boolean playerNear = this.minecraft.player != null && this.minecraft.player.isAlive() && this.minecraft.player.blockPosition().distSqr(pPos) < 25.0D; - - switch (pType) - { -@@ -4155,18 +4241,34 @@ - break; - - case 1011: -+ if (playerNear) -+ { -+ this.minecraft.vr.triggerHapticPulse(0, 250); -+ } - this.level.playLocalSound(pPos, SoundEvents.IRON_DOOR_CLOSE, SoundSource.BLOCKS, 1.0F, random.nextFloat() * 0.1F + 0.9F, false); - break; - - case 1012: -+ if (playerNear) -+ { -+ this.minecraft.vr.triggerHapticPulse(0, 250); -+ } - this.level.playLocalSound(pPos, SoundEvents.WOODEN_DOOR_CLOSE, SoundSource.BLOCKS, 1.0F, random.nextFloat() * 0.1F + 0.9F, false); - break; - - case 1013: -+ if (playerNear) -+ { -+ this.minecraft.vr.triggerHapticPulse(0, 250); -+ } - this.level.playLocalSound(pPos, SoundEvents.WOODEN_TRAPDOOR_CLOSE, SoundSource.BLOCKS, 1.0F, random.nextFloat() * 0.1F + 0.9F, false); - break; - - case 1014: -+ if (playerNear) -+ { -+ this.minecraft.vr.triggerHapticPulse(0, 250); -+ } - this.level.playLocalSound(pPos, SoundEvents.FENCE_GATE_CLOSE, SoundSource.BLOCKS, 1.0F, random.nextFloat() * 0.1F + 0.9F, false); - break; - -@@ -4187,14 +4289,29 @@ - break; - - case 1019: -+ if (playerNear) -+ { -+ this.minecraft.vr.triggerHapticPulse(0, 750); -+ this.minecraft.vr.triggerHapticPulse(1, 750); -+ } - this.level.playLocalSound(pPos, SoundEvents.ZOMBIE_ATTACK_WOODEN_DOOR, SoundSource.HOSTILE, 2.0F, (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false); - break; - - case 1020: -+ if (playerNear) -+ { -+ this.minecraft.vr.triggerHapticPulse(0, 750); -+ this.minecraft.vr.triggerHapticPulse(1, 750); -+ } - this.level.playLocalSound(pPos, SoundEvents.ZOMBIE_ATTACK_IRON_DOOR, SoundSource.HOSTILE, 2.0F, (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false); - break; - - case 1021: -+ if (playerNear) -+ { -+ this.minecraft.vr.triggerHapticPulse(0, 750); -+ this.minecraft.vr.triggerHapticPulse(1, 750); -+ } - this.level.playLocalSound(pPos, SoundEvents.ZOMBIE_BREAK_WOODEN_DOOR, SoundSource.HOSTILE, 2.0F, (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false); - break; - -@@ -4223,10 +4340,19 @@ - break; - - case 1030: -+ if (playerNear) -+ { -+ this.minecraft.vr.triggerHapticPulse(0, 500); -+ } - this.level.playLocalSound(pPos, SoundEvents.ANVIL_USE, SoundSource.BLOCKS, 1.0F, random.nextFloat() * 0.1F + 0.9F, false); - break; - - case 1031: -+ if (playerNear) -+ { -+ this.minecraft.vr.triggerHapticPulse(0, 1250); -+ this.minecraft.vr.triggerHapticPulse(1, 1250); -+ } - this.level.playLocalSound(pPos, SoundEvents.ANVIL_LAND, SoundSource.BLOCKS, 0.3F, this.level.random.nextFloat() * 0.1F + 0.9F, false); - break; - -@@ -4247,6 +4373,10 @@ - break; - - case 1036: -+ if (playerNear) -+ { -+ this.minecraft.vr.triggerHapticPulse(0, 250); -+ } - this.level.playLocalSound(pPos, SoundEvents.IRON_TRAPDOOR_CLOSE, SoundSource.BLOCKS, 1.0F, random.nextFloat() * 0.1F + 0.9F, false); - break; - -@@ -4601,9 +4731,9 @@ - return 0; - } - -- public ChunkRenderDispatcher.RenderChunk getRenderChunk(BlockPos pos) -+ public ChunkRenderDispatcher.RenderChunk getRenderChunk(BlockPos p_getRenderChunk_1_) - { -- return this.viewArea.getRenderChunkAt(pos); -+ return this.viewArea.getRenderChunkAt(p_getRenderChunk_1_); - } - - public ClientLevel getWorld() -@@ -4706,11 +4836,11 @@ - return this.renderInfosTileEntities; - } - -- private void checkLoadVisibleChunks(Camera activeRenderInfo, Frustum icamera, boolean spectator) -+ private void checkLoadVisibleChunks(Camera p_checkLoadVisibleChunks_1_, Frustum p_checkLoadVisibleChunks_2_, boolean p_checkLoadVisibleChunks_3_) - { - if (this.loadVisibleChunksCounter == 0) - { -- this.loadAllVisibleChunks(activeRenderInfo, icamera, spectator); -+ this.loadAllVisibleChunks(p_checkLoadVisibleChunks_1_, p_checkLoadVisibleChunks_2_, p_checkLoadVisibleChunks_3_); - this.minecraft.gui.getChat().removeById(201435902); - } - -@@ -4720,7 +4850,7 @@ - } - } - -- private void loadAllVisibleChunks(Camera activeRenderInfo, Frustum icamera, boolean spectator) -+ private void loadAllVisibleChunks(Camera p_loadAllVisibleChunks_1_, Frustum p_loadAllVisibleChunks_2_, boolean p_loadAllVisibleChunks_3_) - { - int i = this.minecraft.options.ofChunkUpdates; - boolean flag = this.minecraft.options.ofLazyChunkLoading; -@@ -4744,7 +4874,7 @@ - for (int j1 = 0; j1 < 100; ++j1) - { - levelrenderer.needsUpdate(); -- levelrenderer.setupRender(activeRenderInfo, icamera, false, spectator); -+ levelrenderer.setupRender(p_loadAllVisibleChunks_1_, p_loadAllVisibleChunks_2_, false, p_loadAllVisibleChunks_3_); - - if (!levelrenderer.hasRenderedAllChunks()) - { -@@ -5100,4 +5230,42 @@ - super(pMessage, pCause); - } - } -+ -+ //Vivecraft additions -+ public void setShaderGroup() -+ { -+ this.transparencyChain = null; -+ this.translucentTarget = null; -+ this.itemEntityTarget = null; -+ this.particlesTarget = null; -+ this.weatherTarget = null; -+ this.cloudsTarget = null; -+ this.alphaSortVRHandsFramebuffer = null; -+ this.alphaSortVROccludedFramebuffer = null; -+ this.alphaSortVRUnoccludedFramebuffer = null; -+ PostChain postchain = this.minecraft.vrRenderer.alphaShaders.get(this.minecraft.getMainRenderTarget().name); -+ -+ if (postchain != null) -+ { -+ this.transparencyChain = postchain; -+ this.translucentTarget = postchain.getTempTarget("translucent"); -+ this.itemEntityTarget = postchain.getTempTarget("itemEntity"); -+ this.particlesTarget = postchain.getTempTarget("particles"); -+ this.weatherTarget = postchain.getTempTarget("weather"); -+ this.cloudsTarget = postchain.getTempTarget("clouds"); -+ this.alphaSortVRHandsFramebuffer = postchain.getTempTarget("vrhands"); -+ this.alphaSortVROccludedFramebuffer = postchain.getTempTarget("vroccluded"); -+ this.alphaSortVRUnoccludedFramebuffer = postchain.getTempTarget("vrunoccluded"); -+ } -+ -+ this.entityEffect = null; -+ this.entityTarget = null; -+ PostChain postchain2 = this.minecraft.vrRenderer.entityShaders.get(this.minecraft.getMainRenderTarget().name); -+ -+ if (postchain2 != null) -+ { -+ this.entityEffect = postchain2; -+ this.entityTarget = postchain2.getTempTarget("final"); -+ } -+ } - } diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/LevelRendererVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client/renderer/LevelRendererVRMixin.java deleted file mode 100644 index e4105120d..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/LevelRendererVRMixin.java +++ /dev/null @@ -1,454 +0,0 @@ -package org.vivecraft.mixin.client.renderer; - -import org.vivecraft.ClientDataHolder; -import org.vivecraft.IrisHelper; -import org.vivecraft.Xplat; -import org.vivecraft.extensions.GameRendererExtension; -import org.vivecraft.extensions.LevelRendererExtension; -import org.vivecraft.extensions.RenderTargetExtension; -import com.mojang.blaze3d.pipeline.RenderTarget; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.math.Matrix4f; -import net.minecraft.client.Camera; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.renderer.*; -import net.minecraft.client.renderer.culling.Frustum; -import net.minecraft.client.renderer.entity.EntityRenderDispatcher; -import net.minecraft.core.BlockPos; -import net.minecraft.server.packs.resources.ResourceManager; -import net.minecraft.server.packs.resources.ResourceManagerReloadListener; -import net.minecraft.util.Mth; -import net.minecraft.util.profiling.ProfilerFiller; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.lighting.LevelLightEngine; -import net.minecraft.world.phys.Vec3; -import net.minecraft.world.phys.shapes.VoxelShape; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.At.Shift; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; -import org.vivecraft.render.RenderPass; -import org.vivecraft.settings.VRSettings; - -import javax.annotation.Nullable; - -// priority 999 to inject before iris, for the vrFast rendering -@Mixin(value = LevelRenderer.class, priority = 999) -public abstract class LevelRendererVRMixin implements ResourceManagerReloadListener, AutoCloseable, LevelRendererExtension { - - @Unique - @Nullable - public RenderTarget alphaSortVROccludedFramebuffer; - @Unique - @Nullable - public RenderTarget alphaSortVRUnoccludedFramebuffer; - @Unique - @Nullable - public RenderTarget alphaSortVRHandsFramebuffer; - @Unique - public float selR; - @Unique - public float selG; - @Unique - public float selB; - - @Unique - private Entity capturedEntity; - - @Final - @Shadow - private Minecraft minecraft; - @Shadow - private ClientLevel level; - @Shadow - private PostChain transparencyChain; - @Shadow - private RenderTarget translucentTarget; - @Shadow - private RenderTarget itemEntityTarget; - @Shadow - private RenderTarget particlesTarget; - @Shadow - private RenderTarget weatherTarget; - @Shadow - private RenderTarget cloudsTarget; - @Shadow - private PostChain entityEffect; - @Shadow - private RenderTarget entityTarget; - @Shadow - private boolean needsFullRenderChunkUpdate; - @Final - @Shadow - private RenderBuffers renderBuffers; - @Unique - private Entity renderedEntity; - - @Shadow - protected abstract void renderHitOutline(PoseStack poseStack, VertexConsumer buffer, Entity entity, double d, double e, double g, BlockPos blockpos, BlockState blockstate); - - @Shadow - private static void renderShape(PoseStack poseStack, VertexConsumer vertexConsumer, VoxelShape voxelShape, double d, double e, double f, float g, float h, float i, float j) { - } - - public int rainX() { - return 0; - } - - public int rainY() { - return 0; - } - - public int rainZ() { - return 0; - } - - @Override - public Entity getRenderedEntity() { - return this.renderedEntity; - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;floor(D)I", ordinal = 0), method = "renderSnowAndRain") - public int rain1(double d) { - Vec3 vec3 = ClientDataHolder.getInstance().vrPlayer.vrdata_world_render.getEye(RenderPass.CENTER).getPosition(); - if (ClientDataHolder.getInstance().currentPass == RenderPass.THIRD || ClientDataHolder.getInstance().currentPass == RenderPass.CAMERA) { - vec3 = ClientDataHolder.getInstance().vrPlayer.vrdata_world_render.getEye(ClientDataHolder.getInstance().currentPass).getPosition(); - } - return Mth.floor(vec3.x); - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;floor(D)I", ordinal = 1), method = "renderSnowAndRain") - public int rain2(double d) { - Vec3 vec3 = ClientDataHolder.getInstance().vrPlayer.vrdata_world_render.getEye(RenderPass.CENTER).getPosition(); - if (ClientDataHolder.getInstance().currentPass == RenderPass.THIRD || ClientDataHolder.getInstance().currentPass == RenderPass.CAMERA) { - vec3 = ClientDataHolder.getInstance().vrPlayer.vrdata_world_render.getEye(ClientDataHolder.getInstance().currentPass).getPosition(); - } - return Mth.floor(vec3.y); - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;floor(D)I", ordinal = 2), method = "renderSnowAndRain") - public int rain3(double d) { - Vec3 vec3 = ClientDataHolder.getInstance().vrPlayer.vrdata_world_render.getEye(RenderPass.CENTER).getPosition(); - if (ClientDataHolder.getInstance().currentPass == RenderPass.THIRD || ClientDataHolder.getInstance().currentPass == RenderPass.CAMERA) { - vec3 = ClientDataHolder.getInstance().vrPlayer.vrdata_world_render.getEye(ClientDataHolder.getInstance().currentPass).getPosition(); - } - return Mth.floor(vec3.z); - } - - /** - * @author - * @reason - */ - @Overwrite - public void onResourceManagerReload(ResourceManager pResourceManager) { - ClientDataHolder.getInstance().vrRenderer.reinitFrameBuffers("Resource Reload"); - } - -// @Redirect(at = @At(value = "NEW", target = "Lnet/minecraft/resources/ResourceLocation;"), method = "initTransparency") -// public ResourceLocation vrShader(String string) { -// return new ResourceLocation("shaders/post/vrtransparency.json"); -// } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;graphicsChanged()V"), method = "allChanged()V") - public void removeGraphich(LevelRenderer l) { - return; - } - - //Moved for sodium -// @Restriction(conflict = @Condition("sodium")) -// @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/renderer/LevelRenderer;needsFullRenderChunkUpdate:Z", ordinal = 1, shift = Shift.AFTER), method = "setupRender(Lnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/culling/Frustum;ZZ)V") -// public void alwaysUpdateCull(Camera camera, Frustum frustum, boolean bl, boolean bl2, CallbackInfo info) { -// this.needsFullRenderChunkUpdate = true; -// } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientLevel;pollLightUpdates()V"), method = "renderLevel") - public void noPoll(ClientLevel instance) { - - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/lighting/LevelLightEngine;runUpdates(IZZ)I"), method = "renderLevel") - public int lightupdate(LevelLightEngine instance, int i, boolean bl, boolean bl2) { - if (ClientDataHolder.getInstance().currentPass == RenderPass.LEFT) { - this.level.getProfiler().popPush("light_update_queue"); - this.level.pollLightUpdates(); - this.level.getProfiler().popPush("light_updates"); - boolean flag = this.level.isLightUpdateQueueEmpty(); - this.minecraft.level.getChunkSource().getLightEngine().runUpdates(Integer.MAX_VALUE, flag, true); - } - this.setShaderGroup(); - return 0; //not used? - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;getRenderDistance()F", shift = Shift.BEFORE), - method = "renderLevel(Lcom/mojang/blaze3d/vertex/PoseStack;FJZLnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/GameRenderer;Lnet/minecraft/client/renderer/LightTexture;Lcom/mojang/math/Matrix4f;)V ") - public void stencil(PoseStack poseStack, float f, long l, boolean bl, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f matrix4f, CallbackInfo info) { - this.minecraft.getProfiler().popPush("stencil"); - ((GameRendererExtension) gameRenderer).drawEyeStencil(false); - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;isDetached()Z"), method = "renderLevel(Lcom/mojang/blaze3d/vertex/PoseStack;FJZLnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/GameRenderer;Lnet/minecraft/client/renderer/LightTexture;Lcom/mojang/math/Matrix4f;)V") - public boolean drawSelf(Camera camera) { - boolean renderSelf = ClientDataHolder.getInstance().currentPass == RenderPass.THIRD && ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON || ClientDataHolder.getInstance().currentPass == RenderPass.CAMERA; - renderSelf = renderSelf | (ClientDataHolder.getInstance().vrSettings.shouldRenderSelf || ClientDataHolder.getInstance().vrSettings.tmpRenderSelf); - return !(!camera.isDetached() && !renderSelf); - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/EntityRenderDispatcher;shouldRender(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/client/renderer/culling/Frustum;DDD)Z"), method = "renderLevel") - public boolean captureEntity(EntityRenderDispatcher instance, Entity entity, Frustum frustum, double d, double e, double f) { - this.capturedEntity = entity; - return instance.shouldRender(entity, frustum, d, e, f); - } - - @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/Entity;tickCount:I", shift = Shift.BEFORE), method = "renderLevel") - public void restoreLoc1(PoseStack poseStack, float f, long l, boolean bl, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f matrix4f, CallbackInfo ci) { - if (capturedEntity == camera.getEntity()) { - ((GameRendererExtension)gameRenderer).restoreRVEPos((LivingEntity)capturedEntity); - } - this.renderedEntity = capturedEntity; - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;renderEntity(Lnet/minecraft/world/entity/Entity;DDDFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;)V", shift = Shift.AFTER), method = "renderLevel") - public void restoreLoc2(PoseStack poseStack, float f, long l, boolean bl, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f matrix4f, CallbackInfo ci) { - if (capturedEntity == camera.getEntity()) { - ((GameRendererExtension)gameRenderer).cacheRVEPos((LivingEntity)capturedEntity); - ((GameRendererExtension)gameRenderer).setupRVE(); - } - this.renderedEntity = null; - } - - @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;hitResult:Lnet/minecraft/world/phys/HitResult;", ordinal = 1), method = "renderLevel") - public void interactOutline(PoseStack poseStack, float f, long l, boolean bl, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f matrix4f, CallbackInfo ci) { - this.level.getProfiler().popPush("outline"); - selR = selG = selB = 1f; - Vec3 vec3 = camera.getPosition(); - double d = vec3.x(); - double e = vec3.y(); - double g = vec3.z(); - for (int c=0;c<2;c++) { - if(ClientDataHolder.getInstance().interactTracker.isInteractActive(c) && (ClientDataHolder.getInstance().interactTracker.inBlockHit[c] != null || ClientDataHolder.getInstance().interactTracker.bukkit[c])) { - BlockPos blockpos = ClientDataHolder.getInstance().interactTracker.inBlockHit[c] != null ? ClientDataHolder.getInstance().interactTracker.inBlockHit[c].getBlockPos() : new BlockPos(ClientDataHolder.getInstance().vrPlayer.vrdata_world_render.getController(c).getPosition()); - BlockState blockstate = this.level.getBlockState(blockpos); - this.renderHitOutline(poseStack, this.renderBuffers.bufferSource().getBuffer(RenderType.lines()), camera.getEntity(), d, e, g, blockpos, blockstate); - if (c==0) { - bl = false; //don't draw both - } - } - } - } - - @Inject(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;applyModelViewMatrix()V", ordinal = 1), method = "renderLevel") - public void renderBukkake(PoseStack poseStack, float f, long l, boolean bl, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f matrix4f, CallbackInfo ci) { - this.level.getProfiler().popPush("render bukkake"); - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/profiling/ProfilerFiller;popPush(Ljava/lang/String;)V", ordinal = 13), method = "renderLevel") - public void blackOutline(ProfilerFiller instance, String s) { - selR = selG = selB = 0f; - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderStateShard$OutputStateShard;clearRenderState()V", ordinal = 0), method = "renderLevel") - public void renderFabulous(PoseStack poseStack, float f, long l, boolean bl, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f matrix4f, CallbackInfo ci) { - boolean menuHandleft = ((GameRendererExtension) gameRenderer).isInMenuRoom() || this.minecraft.screen != null || KeyboardHandler.Showing; - boolean menuhandright = menuHandleft || ClientDataHolder.getInstance().interactTracker.hotbar >= 0 && ClientDataHolder.getInstance().vrSettings.vrTouchHotbar; - ((GameRendererExtension) gameRenderer).renderVRFabulous(f, (LevelRenderer)(Object)this, menuhandright, menuHandleft, poseStack); - } - - private boolean menuHandleft; - private boolean menuhandright; - - private boolean guiRendered = false; - @Inject(at = @At("HEAD"), method = "renderLevel") - public void resetGuiRendered(PoseStack poseStack, float f, long l, boolean bl, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f matrix4f, CallbackInfo ci) { - guiRendered = false; - } - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/profiling/ProfilerFiller;popPush(Ljava/lang/String;)V", shift = Shift.BEFORE, ordinal = 17), - method = "renderLevel(Lcom/mojang/blaze3d/vertex/PoseStack;FJZLnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/GameRenderer;Lnet/minecraft/client/renderer/LightTexture;Lcom/mojang/math/Matrix4f;)V") - public void renderFast1(PoseStack poseStack, float f, long l, boolean bl, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f matrix4f, CallbackInfo info) { - menuHandleft = ((GameRendererExtension) gameRenderer).isInMenuRoom() || this.minecraft.screen != null || KeyboardHandler.Showing; - menuhandright = menuHandleft || ClientDataHolder.getInstance().interactTracker.hotbar >= 0 && ClientDataHolder.getInstance().vrSettings.vrTouchHotbar; - ((GameRendererExtension) gameRenderer).renderVrFast(f, false, menuhandright, menuHandleft, poseStack); - - if ((Xplat.isModLoaded("iris") || Xplat.isModLoaded("oculus")) && IrisHelper.isShaderActive() && ClientDataHolder.getInstance().vrSettings.shaderGUIRender == VRSettings.ShaderGUIRender.BEFORE_TRANSLUCENT_SOLID) { - // shaders active, and render gui before translucents - ((GameRendererExtension) gameRenderer).renderVrFast(f, true, menuhandright, menuHandleft, poseStack); - guiRendered = true; - } - } - @Inject(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;pushPose()V", shift = Shift.BEFORE, ordinal = 4), - method = "renderLevel") - public void renderFast2(PoseStack poseStack, float f, long l, boolean bl, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f matrix4f, CallbackInfo ci) { - if (transparencyChain == null && (!((Xplat.isModLoaded("iris") || Xplat.isModLoaded("oculus")) && IrisHelper.isShaderActive()) || ClientDataHolder.getInstance().vrSettings.shaderGUIRender == VRSettings.ShaderGUIRender.AFTER_TRANSLUCENT)) { - // no shaders, or shaders, and gui after translucents - ((GameRendererExtension) gameRenderer).renderVrFast(f, true, menuhandright, menuHandleft, poseStack); - guiRendered = true; - } - } - - // if the gui didn't render yet, and something canceled the level renderer, render it now. - // or if shaders are on, and option AFTER_SHADER is selected - @Inject(at = @At("RETURN"), method = "renderLevel") - public void renderFast2Final(PoseStack poseStack, float f, long l, boolean bl, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f matrix4f, CallbackInfo info) { - if (!guiRendered && transparencyChain == null) { - ((GameRendererExtension) gameRenderer).renderVrFast(f, true, menuhandright, menuHandleft, poseStack); - guiRendered = true; - } - } - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;renderShape(Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;Lnet/minecraft/world/phys/shapes/VoxelShape;DDDFFFF)V"), method = "renderHitOutline") - public void colorHitBox(PoseStack poseStack, VertexConsumer vertexConsumer, VoxelShape voxelShape, double d, double e, double f, float g, float h, float i, float j) { - renderShape(poseStack, vertexConsumer, voxelShape, d, e,f, this.selR, this.selG, this.selB,j); - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientLevel;playLocalSound(Lnet/minecraft/core/BlockPos;Lnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZ)V", ordinal = 11, shift = Shift.BEFORE), method = "levelEvent") - public void levelEvent1011(Player player, int i, BlockPos blockPos, int j, CallbackInfo ci) { - boolean playerNear = this.minecraft.player != null && this.minecraft.player.isAlive() && this.minecraft.player.blockPosition().distSqr(blockPos) < 25.0D; - - if (playerNear) { - ClientDataHolder.getInstance().vr.triggerHapticPulse(0,250); - } - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientLevel;playLocalSound(Lnet/minecraft/core/BlockPos;Lnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZ)V", ordinal = 12, shift = Shift.BEFORE), method = "levelEvent") - public void levelEvent1012(Player player, int i, BlockPos blockPos, int j, CallbackInfo ci) { - boolean playerNear = this.minecraft.player != null && this.minecraft.player.isAlive() && this.minecraft.player.blockPosition().distSqr(blockPos) < 25.0D; - - if (playerNear) { - ClientDataHolder.getInstance().vr.triggerHapticPulse(0,250); - } - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientLevel;playLocalSound(Lnet/minecraft/core/BlockPos;Lnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZ)V", ordinal = 13, shift = Shift.BEFORE), method = "levelEvent") - public void levelEvent1013(Player player, int i, BlockPos blockPos, int j, CallbackInfo ci) { - boolean playerNear = this.minecraft.player != null && this.minecraft.player.isAlive() && this.minecraft.player.blockPosition().distSqr(blockPos) < 25.0D; - - if (playerNear) { - ClientDataHolder.getInstance().vr.triggerHapticPulse(0,250); - } - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientLevel;playLocalSound(Lnet/minecraft/core/BlockPos;Lnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZ)V", ordinal = 14, shift = Shift.BEFORE), method = "levelEvent") - public void levelEvent1014(Player player, int i, BlockPos blockPos, int j, CallbackInfo ci) { - boolean playerNear = this.minecraft.player != null && this.minecraft.player.isAlive() && this.minecraft.player.blockPosition().distSqr(blockPos) < 25.0D; - - if (playerNear) { - ClientDataHolder.getInstance().vr.triggerHapticPulse(0,250); - } - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientLevel;playLocalSound(Lnet/minecraft/core/BlockPos;Lnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZ)V", ordinal = 19, shift = Shift.BEFORE), method = "levelEvent") - public void levelEvent1019(Player player, int i, BlockPos blockPos, int j, CallbackInfo ci) { - boolean playerNear = this.minecraft.player != null && this.minecraft.player.isAlive() && this.minecraft.player.blockPosition().distSqr(blockPos) < 25.0D; - - if (playerNear) { - ClientDataHolder.getInstance().vr.triggerHapticPulse(0,750); - ClientDataHolder.getInstance().vr.triggerHapticPulse(1,750); - - } - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientLevel;playLocalSound(Lnet/minecraft/core/BlockPos;Lnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZ)V", ordinal = 20, shift = Shift.BEFORE), method = "levelEvent") - public void levelEvent1020(Player player, int i, BlockPos blockPos, int j, CallbackInfo ci) { - boolean playerNear = this.minecraft.player != null && this.minecraft.player.isAlive() && this.minecraft.player.blockPosition().distSqr(blockPos) < 25.0D; - - if (playerNear) { - ClientDataHolder.getInstance().vr.triggerHapticPulse(0,750); - ClientDataHolder.getInstance().vr.triggerHapticPulse(1,750); - - } - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientLevel;playLocalSound(Lnet/minecraft/core/BlockPos;Lnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZ)V", ordinal = 21, shift = Shift.BEFORE), method = "levelEvent") - public void levelEvent1021(Player player, int i, BlockPos blockPos, int j, CallbackInfo ci) { - boolean playerNear = this.minecraft.player != null && this.minecraft.player.isAlive() && this.minecraft.player.blockPosition().distSqr(blockPos) < 25.0D; - - if (playerNear) { - ClientDataHolder.getInstance().vr.triggerHapticPulse(0,750); - ClientDataHolder.getInstance().vr.triggerHapticPulse(1,750); - } - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientLevel;playLocalSound(Lnet/minecraft/core/BlockPos;Lnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZ)V", ordinal = 28, shift = Shift.BEFORE), method = "levelEvent") - public void levelEvent1030(Player player, int i, BlockPos blockPos, int j, CallbackInfo ci) { - boolean playerNear = this.minecraft.player != null && this.minecraft.player.isAlive() && this.minecraft.player.blockPosition().distSqr(blockPos) < 25.0D; - - if (playerNear) { - ClientDataHolder.getInstance().vr.triggerHapticPulse(0,500); - } - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientLevel;playLocalSound(Lnet/minecraft/core/BlockPos;Lnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZ)V", ordinal = 29, shift = Shift.BEFORE), method = "levelEvent") - public void levelEvent1031(Player player, int i, BlockPos blockPos, int j, CallbackInfo ci) { - boolean playerNear = this.minecraft.player != null && this.minecraft.player.isAlive() && this.minecraft.player.blockPosition().distSqr(blockPos) < 25.0D; - - if (playerNear) { - ClientDataHolder.getInstance().vr.triggerHapticPulse(0,1250); - ClientDataHolder.getInstance().vr.triggerHapticPulse(1,1250); - } - } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientLevel;playLocalSound(Lnet/minecraft/core/BlockPos;Lnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZ)V", ordinal = 33, shift = Shift.BEFORE), method = "levelEvent") - public void levelEvent1036(Player player, int i, BlockPos blockPos, int j, CallbackInfo ci) { - boolean playerNear = this.minecraft.player != null && this.minecraft.player.isAlive() && this.minecraft.player.blockPosition().distSqr(blockPos) < 25.0D; - - if (playerNear) { - ClientDataHolder.getInstance().vr.triggerHapticPulse(0,250); - } - } - - public void setShaderGroup() { - this.transparencyChain = null; - this.translucentTarget = null; - this.itemEntityTarget = null; - this.particlesTarget = null; - this.weatherTarget = null; - this.cloudsTarget = null; - this.alphaSortVRHandsFramebuffer = null; - this.alphaSortVROccludedFramebuffer = null; - this.alphaSortVRUnoccludedFramebuffer = null; - PostChain postchain = ClientDataHolder.getInstance().vrRenderer.alphaShaders.get(((RenderTargetExtension) this.minecraft.getMainRenderTarget()).getName()); - - if (postchain != null) { - this.transparencyChain = postchain; - this.translucentTarget = postchain.getTempTarget("translucent"); - this.itemEntityTarget = postchain.getTempTarget("itemEntity"); - this.particlesTarget = postchain.getTempTarget("particles"); - this.weatherTarget = postchain.getTempTarget("weather"); - this.cloudsTarget = postchain.getTempTarget("clouds"); - this.alphaSortVRHandsFramebuffer = postchain.getTempTarget("vrhands"); - this.alphaSortVROccludedFramebuffer = postchain.getTempTarget("vroccluded"); - this.alphaSortVRUnoccludedFramebuffer = postchain.getTempTarget("vrunoccluded"); - } - - this.entityEffect = null; - this.entityTarget = null; - PostChain postchain2 = ClientDataHolder.getInstance().vrRenderer.entityShaders.get(((RenderTargetExtension) this.minecraft.getMainRenderTarget()).getName()); - - if (postchain2 != null) { - this.entityEffect = postchain2; - this.entityTarget = postchain2.getTempTarget("final"); - } - } - - @Override - public RenderTarget getAlphaSortVROccludedFramebuffer() { - return alphaSortVROccludedFramebuffer; - } - - @Override - public RenderTarget getAlphaSortVRUnoccludedFramebuffer() { - return alphaSortVRUnoccludedFramebuffer; - } - - @Override - public RenderTarget getAlphaSortVRHandsFramebuffer() { - return alphaSortVRHandsFramebuffer; - } -} diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/block/LiquidBlockRenderer.java.patch b/common/src/main/java/org/vivecraft/mixin/client/renderer/block/LiquidBlockRenderer.java.patch deleted file mode 100644 index 8bf6b6da1..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/block/LiquidBlockRenderer.java.patch +++ /dev/null @@ -1,28 +0,0 @@ ---- a/net/minecraft/client/renderer/block/LiquidBlockRenderer.java -+++ b/net/minecraft/client/renderer/block/LiquidBlockRenderer.java -@@ -36,7 +36,7 @@ - private final TextureAtlasSprite[] lavaIcons = new TextureAtlasSprite[2]; - private final TextureAtlasSprite[] waterIcons = new TextureAtlasSprite[2]; - private TextureAtlasSprite waterOverlay; -- -+ public static boolean skipStupidGoddamnChunkBoundaryClipping; - protected void setupSprites() - { - this.lavaIcons[0] = Minecraft.getInstance().getModelManager().getBlockModelShaper().getBlockModel(Blocks.LAVA.defaultBlockState()).getParticleIcon(); -@@ -152,9 +152,13 @@ - float f8 = this.getWaterHeight(pLevel, pPos.south(), pFluidState.getType()); - float f9 = this.getWaterHeight(pLevel, pPos.east().south(), pFluidState.getType()); - float f10 = this.getWaterHeight(pLevel, pPos.east(), pFluidState.getType()); -- double d0 = (double)(pPos.getX() & 15); -- double d1 = (double)(pPos.getY() & 15); -- double d2 = (double)(pPos.getZ() & 15); -+ //double d0 = (double)(pPos.getX() & 15); -+ //double d1 = (double)(pPos.getY() & 15); -+ //double d2 = (double)(pPos.getZ() & 15); -+ double d0 = skipStupidGoddamnChunkBoundaryClipping ? pPos.getX() : (double)(pPos.getX() & 15); -+ double d1 = skipStupidGoddamnChunkBoundaryClipping ? pPos.getY() : (double)(pPos.getY() & 15); -+ double d2 = skipStupidGoddamnChunkBoundaryClipping ? pPos.getZ() : (double)(pPos.getZ() & 15); -+ - - if (Config.isRenderRegions()) - { diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/block/LiquidBlockRendererMixin.java b/common/src/main/java/org/vivecraft/mixin/client/renderer/block/LiquidBlockRendererMixin.java index cf1e43fb3..01cd0f45f 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/block/LiquidBlockRendererMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client/renderer/block/LiquidBlockRendererMixin.java @@ -1,24 +1,23 @@ package org.vivecraft.mixin.client.renderer.block; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.Constant; import org.spongepowered.asm.mixin.injection.ModifyConstant; import net.minecraft.client.renderer.block.LiquidBlockRenderer; +import org.vivecraft.client_vr.ClientDataHolderVR; @Mixin(LiquidBlockRenderer.class) public class LiquidBlockRendererMixin { - @Unique - private static boolean skipStupidGoddamnChunkBoundaryClipping; - //TODO a bit hacky, when does it happen? @ModifyConstant(method = "tesselate", constant = @Constant(intValue = 15)) public int chunckClipping(int i) { - return skipStupidGoddamnChunkBoundaryClipping? Integer.MAX_VALUE : 15; + // -1 is 0xFFFF FFFF + // so no change + return ClientDataHolderVR.getInstance().skipStupidGoddamnChunkBoundaryClipping ? -1 : 15; } - + // //TODO not found? // @Redirect(at = @At(value = "INVOKE", target = "")) // public boolean skip() { diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/culling/Frustum.java.patch b/common/src/main/java/org/vivecraft/mixin/client/renderer/culling/Frustum.java.patch deleted file mode 100644 index 275ea8269..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/culling/Frustum.java.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/net/minecraft/client/renderer/culling/Frustum.java -+++ b/net/minecraft/client/renderer/culling/Frustum.java -@@ -231,13 +231,13 @@ - - @Override - public void setCameraPosition(double var1, double var3, double var5) { -- // TODO Auto-generated method stub -- -+ this.camX = var1; -+ this.camY = var3; -+ this.camZ = var5; - } - - @Override - public boolean isBoundingBoxInFrustum(AABB var1) { -- // TODO Auto-generated method stub -- return false; -+ return this.cubeInFrustum(var1.minX, var1.minY, var1.minZ, var1.maxX, var1.maxY, var1.maxZ); - } - } diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/culling/FrustumVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client/renderer/culling/FrustumVRMixin.java index bcf18e43d..08df8fe7e 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/culling/FrustumVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client/renderer/culling/FrustumVRMixin.java @@ -1,6 +1,6 @@ package org.vivecraft.mixin.client.renderer.culling; -import org.vivecraft.extensions.FrustumExtension; +import org.vivecraft.client_vr.extensions.FrustumExtension; import net.minecraft.client.renderer.culling.Frustum; import net.minecraft.world.phys.AABB; import org.spongepowered.asm.mixin.Mixin; diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/EntityRenderDispatcher.java.patch b/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/EntityRenderDispatcher.java.patch deleted file mode 100644 index 8d7e40e34..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/EntityRenderDispatcher.java.patch +++ /dev/null @@ -1,199 +0,0 @@ ---- a/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java -+++ b/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java -@@ -1,6 +1,7 @@ - package net.minecraft.client.renderer.entity; - - import com.google.common.collect.ImmutableMap; -+import com.google.common.collect.Maps; - import com.mojang.blaze3d.vertex.PoseStack; - import com.mojang.blaze3d.vertex.VertexConsumer; - import com.mojang.math.Matrix3f; -@@ -11,6 +12,12 @@ - import java.util.HashMap; - import java.util.Map; - import javax.annotation.Nullable; -+ -+import org.vivecraft.render.PlayerModelController; -+import org.vivecraft.render.RenderPass; -+import org.vivecraft.render.VRArmRenderer; -+import org.vivecraft.render.VRPlayerRenderer; -+ - import net.minecraft.CrashReport; - import net.minecraft.CrashReportCategory; - import net.minecraft.ReportedException; -@@ -78,6 +85,14 @@ - public Entity renderEntity = null; - private EntityRendererProvider.Context context = null; - -+ //Vivecraft -+ private final Map skinMapVR = Maps.newHashMap(); -+ private final Map skinMapVRSeated = Maps.newHashMap(); -+ private VRPlayerRenderer playerRendererVR; -+ private VRPlayerRenderer playerRendererVRSeated; -+ private VRArmRenderer armRenderer; -+ public final Map armSkinMap = new HashMap<>(); -+ // - public int getPackedLightCoords(E pEntity, float pPartialTicks) - { - int i = this.getRenderer(pEntity).getPackedLightCoords(pEntity, pPartialTicks); -@@ -104,8 +119,66 @@ - if (pEntity instanceof AbstractClientPlayer) - { - String s = ((AbstractClientPlayer)pEntity).getModelName(); -- EntityRenderer entityrenderer = this.playerRenderers.get(s); -- return entityrenderer != null ? (EntityRenderer )entityrenderer : (EntityRenderer )this.playerRenderers.get("default"); -+ PlayerRenderer playerrenderer = (PlayerRenderer) this.playerRenderers.get(s); -+ PlayerModelController.RotInfo playermodelcontroller$rotinfo = PlayerModelController.getInstance().getRotationsForPlayer(pEntity.getUUID()); -+ -+ if (playermodelcontroller$rotinfo != null) -+ { -+ Object object = null; -+ VRPlayerRenderer vrplayerrenderer1; -+ -+ if (playermodelcontroller$rotinfo.seated) -+ { -+ if (this.playerRendererVRSeated == null) -+ { -+ this.playerRendererVRSeated = new VRPlayerRenderer(this.context, false, true); -+ this.skinMapVRSeated.put("default", this.playerRendererVRSeated); -+ this.skinMapVRSeated.put("slim", new VRPlayerRenderer(this.context, true, true)); -+ //TODO: where gone? -+ //:shrug: -+ //PlayerItemsLayer.register(this.skinMapVRSeated); -+ } -+ -+ VRPlayerRenderer vrplayerrenderer = this.skinMapVRSeated.get(s); -+ -+ if (vrplayerrenderer != null) -+ { -+ vrplayerrenderer1 = vrplayerrenderer; -+ } -+ else -+ { -+ vrplayerrenderer1 = this.playerRendererVRSeated; -+ } -+ } -+ else -+ { -+ if (this.playerRendererVR == null) -+ { -+ this.playerRendererVR = new VRPlayerRenderer(this.context, false, false); -+ this.skinMapVR.put("default", this.playerRendererVR); -+ this.skinMapVR.put("slim", new VRPlayerRenderer(this.context, true, false)); -+ // PlayerItemsLayer.register(this.skinMapVR); -+ } -+ -+ VRPlayerRenderer vrplayerrenderer2 = this.skinMapVR.get(s); -+ -+ if (vrplayerrenderer2 != null) -+ { -+ vrplayerrenderer1 = vrplayerrenderer2; -+ } -+ else -+ { -+ vrplayerrenderer1 = this.playerRendererVR; -+ } -+ } -+ -+ return (EntityRenderer) vrplayerrenderer1; -+ } -+ else -+ { -+ EntityRenderer entityrenderer = this.playerRenderers.get(s); -+ return entityrenderer != null ? (EntityRenderer )entityrenderer : (EntityRenderer )this.playerRenderers.get("default"); -+ } - } - else - { -@@ -218,9 +291,9 @@ - - p_114391_.popPose(); - } -- catch (Throwable throwable1) -+ catch (Throwable throwable) - { -- CrashReport crashreport = CrashReport.forThrowable(throwable1, "Rendering entity in world"); -+ CrashReport crashreport = CrashReport.forThrowable(throwable, "Rendering entity in world"); - CrashReportCategory crashreportcategory = crashreport.addCategory("Entity being rendered"); - pEntity.fillCrashReportCategory(crashreportcategory); - CrashReportCategory crashreportcategory1 = crashreport.addCategory("Renderer details"); -@@ -441,7 +514,66 @@ - - public Quaternion cameraOrientation() - { -- return this.cameraOrientation; -+ if (Minecraft.getInstance().currentPass == RenderPass.GUI) -+ { -+ return this.camera.rotation(); -+ } -+ else -+ { -+ Entity entity = Minecraft.getInstance().levelRenderer.renderedEntity; -+ -+ if (entity == null) -+ { -+ return this.camera.rotation(); -+ } -+ else -+ { -+ Vec3 vec3 = Minecraft.getInstance().vrPlayer.getVRDataWorld().getEye(RenderPass.CENTER).getPosition(); -+ -+ if (Minecraft.getInstance().currentPass == RenderPass.THIRD || Minecraft.getInstance().currentPass == RenderPass.CAMERA) -+ { -+ vec3 = Minecraft.getInstance().vrPlayer.getVRDataWorld().getEye(Minecraft.getInstance().currentPass).getPosition(); -+ } -+ -+ Vec3 vec31 = entity.position().add(0.0D, (double)(entity.getBbHeight() / 2.0F), 0.0D).subtract(vec3).normalize(); -+ this.cameraOrientation.set(0.0F, 0.0F, 0.0F, 1.0F); -+ this.cameraOrientation.mul(Vector3f.YP.rotationDegrees((float)(-Math.toDegrees(Math.atan2(-vec31.x, vec31.z))))); -+ this.cameraOrientation.mul(Vector3f.XP.rotationDegrees((float)(-Math.toDegrees(Math.asin(vec31.y / vec31.length()))))); -+ return this.cameraOrientation; -+ } -+ } -+ } -+ -+ public Quaternion getCameraOrientationOffset(float offset) -+ { -+ if (Minecraft.getInstance().currentPass == RenderPass.GUI) -+ { -+ return this.camera.rotation(); -+ } -+ else -+ { -+ Entity entity = Minecraft.getInstance().levelRenderer.renderedEntity; -+ -+ if (entity == null) -+ { -+ return this.camera.rotation(); -+ } -+ else -+ { -+ Vec3 vec3 = Minecraft.getInstance().vrPlayer.getVRDataWorld().getEye(RenderPass.CENTER).getPosition(); -+ -+ if (Minecraft.getInstance().currentPass == RenderPass.THIRD || Minecraft.getInstance().currentPass == RenderPass.CAMERA) -+ { -+ vec3 = Minecraft.getInstance().vrPlayer.getVRDataWorld().getEye(Minecraft.getInstance().currentPass).getPosition(); -+ } -+ -+ Vec3 vec31 = entity.position().add(0.0D, (double)(entity.getBbHeight() + offset), 0.0D).subtract(vec3).normalize(); -+ this.cameraOrientation.set(0.0F, 0.0F, 0.0F, 1.0F); -+ this.cameraOrientation.mul(Vector3f.YP.rotationDegrees((float)(-Math.toDegrees(Math.atan2(-vec31.x, vec31.z))))); -+ this.cameraOrientation.mul(Vector3f.XP.rotationDegrees((float)(-Math.toDegrees(Math.asin(vec31.y / vec31.length()))))); -+ return this.cameraOrientation; -+ } -+ } - } - - public void onResourceManagerReload(ResourceManager pResourceManager) -@@ -451,6 +583,11 @@ - this.playerRenderers = EntityRenderers.createPlayerRenderers(entityrendererprovider$context); - this.context = entityrendererprovider$context; - registerPlayerItems(this.playerRenderers); -+ //Vivecraft -+ this.armRenderer = new VRArmRenderer(context, false); -+ this.armSkinMap.put("default", this.armRenderer); -+ this.armSkinMap.put("slim", new VRArmRenderer(context, true)); -+ // - ReflectorForge.postModLoaderEvent(Reflector.EntityRenderersEvent_AddLayers_Constructor, this.renderers, this.playerRenderers); - } - diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/EntityRenderDispatcherMixin.java b/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/EntityRenderDispatcherMixin.java index dfd9f8a62..a3e62ffad 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/EntityRenderDispatcherMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/EntityRenderDispatcherMixin.java @@ -3,11 +3,11 @@ import java.util.HashMap; import java.util.Map; -import net.minecraft.client.renderer.entity.player.PlayerRenderer; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.player.Player; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.world.phys.AABB; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At.Shift; @@ -15,8 +15,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; -import org.vivecraft.render.PlayerModelController; -import org.vivecraft.render.VRPlayerRenderer; +import org.vivecraft.client.extensions.EntityRenderDispatcherExtension; +import org.vivecraft.client.VRPlayersClient; +import org.vivecraft.client.render.VRPlayerRenderer; import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; @@ -25,91 +26,84 @@ import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.server.packs.resources.ResourceManagerReloadListener; import net.minecraft.world.entity.Entity; +import org.vivecraft.common.utils.Utils; @Mixin(EntityRenderDispatcher.class) -public abstract class EntityRenderDispatcherMixin implements ResourceManagerReloadListener{ +public abstract class EntityRenderDispatcherMixin implements ResourceManagerReloadListener, EntityRenderDispatcherExtension { @Unique private final Map skinMapVR = new HashMap<>(); + + public Map getSkinMapVR() { + return skinMapVR; + } + @Unique private final Map skinMapVRSeated = new HashMap<>(); + + public Map getSkinMapVRSeated() { + return skinMapVRSeated; + } @Unique private VRPlayerRenderer playerRendererVR; @Unique private VRPlayerRenderer playerRendererVRSeated; - @Unique - private EntityRendererProvider.Context context; - @Shadow - private Map> playerRenderers; - @Shadow - private Map, EntityRenderer> renderers; + @Inject(at = @At("HEAD"), method = "renderHitbox") + private static void headHitbox(PoseStack poseStack, VertexConsumer vertexConsumer, Entity entity, float f, CallbackInfo ci) { + AABB headBox; + if ((headBox = Utils.getEntityHeadHitbox(entity, 0.0)) != null) { + // raw head box + LevelRenderer.renderLineBox(poseStack, vertexConsumer, headBox.move(-entity.getX(), -entity.getY(), -entity.getZ()), 1.0f, 1.0f, 0.0f, 1.0f); + // inflated head box for arrows + AABB headBoxArrow = Utils.getEntityHeadHitbox(entity, 0.3); + LevelRenderer.renderLineBox(poseStack, vertexConsumer, headBoxArrow.move(-entity.getX(), -entity.getY(), -entity.getZ()), 1.0f, 0.0f, 0.0f, 1.0f); + } + + } + @Inject(at = @At("HEAD"), method = "getRenderer(Lnet/minecraft/world/entity/Entity;)Lnet/minecraft/client/renderer/entity/EntityRenderer;", cancellable = true) public void renderer(Entity pEntity, CallbackInfoReturnable> info) { if (pEntity instanceof AbstractClientPlayer) { String s = ((AbstractClientPlayer) pEntity).getModelName(); - PlayerModelController.RotInfo playermodelcontroller$rotinfo = PlayerModelController.getInstance().getRotationsForPlayer(pEntity.getUUID()); + VRPlayersClient.RotInfo playermodelcontroller$rotinfo = VRPlayersClient.getInstance().getRotationsForPlayer(pEntity.getUUID()); if (playermodelcontroller$rotinfo != null) { - VRPlayerRenderer vrplayerrenderer1; + VRPlayerRenderer vrplayerrenderer; if (playermodelcontroller$rotinfo.seated) { - if (this.playerRendererVRSeated == null) { - this.playerRendererVRSeated = new VRPlayerRenderer(this.context, false, true); - this.skinMapVRSeated.put("default", this.playerRendererVRSeated); - this.skinMapVRSeated.put("slim", new VRPlayerRenderer(this.context, true, true)); - //TODO: where gone? - //:shrug: - //PlayerItemsLayer.register(this.skinMapVRSeated); - } - VRPlayerRenderer vrplayerrenderer = this.skinMapVRSeated.get(s); + vrplayerrenderer = this.skinMapVRSeated.get(s); - if (vrplayerrenderer != null) { - vrplayerrenderer1 = vrplayerrenderer; - } else { - vrplayerrenderer1 = this.playerRendererVRSeated; + if (vrplayerrenderer == null) { + vrplayerrenderer = this.playerRendererVRSeated; } } else { - if (this.playerRendererVR == null) { - this.playerRendererVR = new VRPlayerRenderer(this.context, false, false); - this.skinMapVR.put("default", this.playerRendererVR); - this.skinMapVR.put("slim", new VRPlayerRenderer(this.context, true, false)); - // PlayerItemsLayer.register(this.skinMapVR); - } - VRPlayerRenderer vrplayerrenderer2 = this.skinMapVR.get(s); - if (vrplayerrenderer2 != null) { - vrplayerrenderer1 = vrplayerrenderer2; - } else { - vrplayerrenderer1 = this.playerRendererVR; + vrplayerrenderer = this.skinMapVR.get(s); + if (vrplayerrenderer == null) { + vrplayerrenderer = this.playerRendererVR; } } - info.setReturnValue(vrplayerrenderer1); - return; - } else { - EntityRenderer entityrenderer = this.playerRenderers.get(s); - if (entityrenderer != null) { - info.setReturnValue((EntityRenderer) entityrenderer); - return; - } else { - info.setReturnValue((EntityRenderer) this.playerRenderers.get("default")); - return; - } + + info.setReturnValue(vrplayerrenderer); } } - else { - info.setReturnValue((EntityRenderer)this.renderers.get(pEntity.getType())); - return; - } } - - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/EntityRenderers;createPlayerRenderers(Lnet/minecraft/client/renderer/entity/EntityRendererProvider$Context;)Ljava/util/Map;", shift = Shift.AFTER), + + @Inject(at = @At(value = "HEAD"),method = "onResourceManagerReload") + public void reloadClear(ResourceManager resourceManager, CallbackInfo ci) { + skinMapVRSeated.clear(); + skinMapVR.clear(); + } + + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/EntityRenderers;createPlayerRenderers(Lnet/minecraft/client/renderer/entity/EntityRendererProvider$Context;)Ljava/util/Map;", shift = Shift.AFTER), method = "onResourceManagerReload", locals = LocalCapture.CAPTURE_FAILEXCEPTION) public void reload(ResourceManager p_174004_, CallbackInfo info, EntityRendererProvider.Context context) { - this.context = context; - this.playerRenderers = new HashMap<>(this.playerRenderers); - this.skinMapVRSeated.put("default", new VRPlayerRenderer(context, false, true)); + this.playerRendererVRSeated = new VRPlayerRenderer(context, false, true); + this.skinMapVRSeated.put("default", playerRendererVRSeated); this.skinMapVRSeated.put("slim", new VRPlayerRenderer(context, true, true)); - this.skinMapVR.put("default", new VRPlayerRenderer(context, false, false)); + + this.playerRendererVR = new VRPlayerRenderer(context, false, false); + this.skinMapVR.put("default", playerRendererVR); this.skinMapVR.put("slim", new VRPlayerRenderer(context, true, false)); } } diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/EntityRenderer.java.patch b/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/EntityRenderer.java.patch deleted file mode 100644 index abfcc4a8f..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/EntityRenderer.java.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- a/net/minecraft/client/renderer/entity/EntityRenderer.java -+++ b/net/minecraft/client/renderer/entity/EntityRenderer.java -@@ -133,7 +133,7 @@ - int i = "deadmau5".equals(pDisplayName.getString()) ? -10 : 0; - pMatrixStack.pushPose(); - pMatrixStack.translate(0.0D, (double)f, 0.0D); -- pMatrixStack.mulPose(this.entityRenderDispatcher.cameraOrientation()); -+ pMatrixStack.mulPose(this.entityRenderDispatcher.getCameraOrientationOffset(0.5F)); - pMatrixStack.scale(-0.025F, -0.025F, 0.025F); - Matrix4f matrix4f = pMatrixStack.last().pose(); - float f1 = Minecraft.getInstance().options.getBackgroundOpacity(0.25F); -@@ -156,9 +156,9 @@ - return this.entityType == null ? null : Either.makeLeft(this.entityType); - } - -- public void setType(Either type) -+ public void setType(Either p_setType_1_) - { -- this.entityType = type.getLeft().get(); -+ this.entityType = p_setType_1_.getLeft().get(); - } - - public ResourceLocation getLocationTextureCustom() -@@ -166,8 +166,8 @@ - return this.locationTextureCustom; - } - -- public void setLocationTextureCustom(ResourceLocation locationTextureCustom) -+ public void setLocationTextureCustom(ResourceLocation p_setLocationTextureCustom_1_) - { -- this.locationTextureCustom = locationTextureCustom; -+ this.locationTextureCustom = p_setLocationTextureCustom_1_; - } - } diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/EntityRenderers.java.patch b/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/EntityRenderers.java.patch deleted file mode 100644 index 91b5e2a50..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/EntityRenderers.java.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- a/net/minecraft/client/renderer/entity/EntityRenderers.java -+++ b/net/minecraft/client/renderer/entity/EntityRenderers.java -@@ -24,12 +24,12 @@ - private static final Map> PLAYER_PROVIDERS = ImmutableMap.of("default", (p_174097_0_) -> - { - PlayerRenderer playerrenderer = new PlayerRenderer(p_174097_0_, false); -- playerrenderer.addLayer(new PlayerItemsLayer(playerrenderer)); -+ playerrenderer.addLayer(new PlayerItemsLayer((LivingEntityRenderer)playerrenderer)); - return playerrenderer; - }, "slim", (p_174095_0_) -> - { - PlayerRenderer playerrenderer = new PlayerRenderer(p_174095_0_, true); -- playerrenderer.addLayer(new PlayerItemsLayer(playerrenderer)); -+ playerrenderer.addLayer(new PlayerItemsLayer((LivingEntityRenderer)playerrenderer)); - return playerrenderer; - }); - diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/FishingHookRenderer.java.patch b/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/FishingHookRenderer.java.patch deleted file mode 100644 index d5fb7c916..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/FishingHookRenderer.java.patch +++ /dev/null @@ -1,41 +0,0 @@ ---- a/net/minecraft/client/renderer/entity/FishingHookRenderer.java -+++ b/net/minecraft/client/renderer/entity/FishingHookRenderer.java -@@ -14,8 +14,8 @@ - import net.minecraft.world.entity.HumanoidArm; - import net.minecraft.world.entity.player.Player; - import net.minecraft.world.entity.projectile.FishingHook; -+import net.minecraft.world.item.FishingRodItem; - import net.minecraft.world.item.ItemStack; --import net.minecraft.world.item.Items; - import net.minecraft.world.phys.Vec3; - - public class FishingHookRenderer extends EntityRenderer -@@ -52,7 +52,7 @@ - int i = player.getMainArm() == HumanoidArm.RIGHT ? 1 : -1; - ItemStack itemstack = player.getMainHandItem(); - -- if (!itemstack.is(Items.FISHING_ROD)) -+ if (!(itemstack.getItem() instanceof FishingRodItem)) - { - i = -i; - } -@@ -80,6 +80,19 @@ - d5 = Mth.lerp((double)pPartialTicks, player.yo, player.getY()) + vec3.y; - d6 = Mth.lerp((double)pPartialTicks, player.zo, player.getZ()) + vec3.z; - f3 = player.getEyeHeight(); -+ int j = 1; -+ -+ if (player.getMainHandItem().getItem() instanceof FishingRodItem) -+ { -+ j = 0; -+ } -+ -+ Vec3 vec31 = Minecraft.getInstance().gameRenderer.getControllerRenderPos(j); -+ Vec3 vec32 = Minecraft.getInstance().vrPlayer.vrdata_world_render.getHand(j).getDirection(); -+ d4 = vec31.x + vec32.x * (double)0.47F; -+ d5 = vec31.y + vec32.y * (double)0.47F; -+ d6 = vec31.z + vec32.z * (double)0.47F; -+ f3 = 0.0F; - } - else - { diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/FishingHookRendererVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/FishingHookRendererVRMixin.java deleted file mode 100644 index d1bb14026..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/FishingHookRendererVRMixin.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.vivecraft.mixin.client.renderer.entity; - -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.world.entity.projectile.FishingHook; -import org.spongepowered.asm.mixin.injection.*; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.entity.FishingHookRenderer; -import net.minecraft.world.item.FishingRodItem; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.extensions.GameRendererExtension; - -@Mixin(FishingHookRenderer.class) -public class FishingHookRendererVRMixin { - - private FishingHook currentlyRenderingFishingHook; - private Vec3 CachedHandPos; - - @Inject(at = @At("HEAD"), method = "render(Lnet/minecraft/world/entity/projectile/FishingHook;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V") - public void storeFishingHook(FishingHook fishingHook, float f, float g, PoseStack poseStack, MultiBufferSource multiBufferSource, int i, CallbackInfo ci){ - currentlyRenderingFishingHook = fishingHook; - } - - @ModifyVariable(at = @At(value = "STORE", ordinal = 1), - method = "render(Lnet/minecraft/world/entity/projectile/FishingHook;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", index = 25) - private double fishingLineStartX(double value) { - int j = 1; - if (currentlyRenderingFishingHook.getPlayerOwner().getMainHandItem().getItem() instanceof FishingRodItem) - { - j = 0; - } - Vec3 vec31 = ((GameRendererExtension) Minecraft.getInstance().gameRenderer).getControllerRenderPos(j); - Vec3 vec32 = ClientDataHolder.getInstance().vrPlayer.vrdata_world_render.getHand(j).getDirection(); - CachedHandPos = vec31.add(vec32.scale(0.47 * ClientDataHolder.getInstance().vrPlayer.vrdata_world_render.worldScale)); - return CachedHandPos.x; - } - @ModifyVariable(at = @At(value = "STORE", ordinal = 1), - method = "render(Lnet/minecraft/world/entity/projectile/FishingHook;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", index = 27) - private double fishingLineStartY(double value) { - return CachedHandPos.y; - } - @ModifyVariable(at = @At(value = "STORE", ordinal = 1), - method = "render(Lnet/minecraft/world/entity/projectile/FishingHook;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", index = 29) - private double fishingLineStartZ(double value) { - return CachedHandPos.z; - } - @ModifyVariable(at = @At(value = "STORE", ordinal = 1), - method = "render(Lnet/minecraft/world/entity/projectile/FishingHook;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", index = 31) - private float fishingLineStartOffset(float value) { - return 0.0F; - } -} diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/GuardianRenderer.java.patch b/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/GuardianRenderer.java.patch deleted file mode 100644 index ce00ad8ac..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/GuardianRenderer.java.patch +++ /dev/null @@ -1,31 +0,0 @@ ---- a/net/minecraft/client/renderer/entity/GuardianRenderer.java -+++ b/net/minecraft/client/renderer/entity/GuardianRenderer.java -@@ -5,6 +5,7 @@ - import com.mojang.math.Matrix3f; - import com.mojang.math.Matrix4f; - import com.mojang.math.Vector3f; -+import net.minecraft.client.Minecraft; - import net.minecraft.client.model.GuardianModel; - import net.minecraft.client.model.geom.ModelLayerLocation; - import net.minecraft.client.model.geom.ModelLayers; -@@ -18,6 +19,7 @@ - import net.minecraft.world.entity.monster.Guardian; - import net.minecraft.world.phys.AABB; - import net.minecraft.world.phys.Vec3; -+import org.vivecraft.render.RenderPass; - - public class GuardianRenderer extends MobRenderer - { -@@ -81,6 +83,12 @@ - pMatrixStack.pushPose(); - pMatrixStack.translate(0.0D, (double)f3, 0.0D); - Vec3 vec3 = this.getPosition(livingentity, (double)livingentity.getBbHeight() * 0.5D, pPartialTicks); -+ -+ if (livingentity == Minecraft.getInstance().getCameraEntity()) -+ { -+ vec3 = Minecraft.getInstance().vrPlayer.getVRDataWorld().getEye(RenderPass.CENTER).getPosition().subtract(0.0D, 0.3D * (double)Minecraft.getInstance().vrPlayer.worldScale, 0.0D); -+ } -+ - Vec3 vec31 = this.getPosition(pEntity, (double)f3, pPartialTicks); - Vec3 vec32 = vec3.subtract(vec31); - float f4 = (float)(vec32.length() + 1.0D); diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/ItemRenderer.java.patch b/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/ItemRenderer.java.patch deleted file mode 100644 index d79a6d1fa..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/ItemRenderer.java.patch +++ /dev/null @@ -1,137 +0,0 @@ ---- a/net/minecraft/client/renderer/entity/ItemRenderer.java -+++ b/net/minecraft/client/renderer/entity/ItemRenderer.java -@@ -17,6 +17,11 @@ - import java.util.Random; - import java.util.Set; - import javax.annotation.Nullable; -+ -+import org.vivecraft.gameplay.trackers.SwingTracker; -+import org.vivecraft.gameplay.trackers.TelescopeTracker; -+import org.vivecraft.render.SpecialItemRenderer; -+ - import net.minecraft.CrashReport; - import net.minecraft.CrashReportCategory; - import net.minecraft.ReportedException; -@@ -59,11 +64,15 @@ - import net.minecraft.world.level.block.StainedGlassPaneBlock; - import net.minecraft.world.level.block.state.BlockState; - import net.minecraftforge.client.RenderProperties; -+import net.minecraftforge.resource.IResourceType; -+import net.minecraftforge.resource.VanillaResourceType; - import net.optifine.Config; - import net.optifine.CustomColors; - import net.optifine.CustomItems; - import net.optifine.EmissiveTextures; - import net.optifine.reflect.Reflector; -+import net.optifine.reflect.ReflectorForge; -+import net.optifine.render.GlAlphaState; - import net.optifine.render.VertexBuilderWrapper; - import net.optifine.shaders.Shaders; - -@@ -83,6 +92,11 @@ - private final BlockEntityWithoutLevelRenderer blockEntityRenderer; - public ModelManager modelManager = null; - private static boolean renderItemGui = false; -+ public static boolean ismainhand = false; -+ public static boolean isfphand = false; -+ float fade = 1.0F; -+ float manualFade = 1.0F; -+ private GlAlphaState alphaState = new GlAlphaState(); - - public ItemRenderer(TextureManager p_174225_, ModelManager p_174226_, ItemColors p_174227_, BlockEntityWithoutLevelRenderer p_174228_) - { -@@ -165,6 +179,16 @@ - } - - pMatrixStack.translate(-0.5D, -0.5D, -0.5D); -+ LocalPlayer localplayer = Minecraft.getInstance().player; -+ -+ if (localplayer != null && isfphand) -+ { -+ this.fade = SwingTracker.getItemFade(localplayer, pItemStack); -+ } -+ else -+ { -+ this.fade = this.manualFade; -+ } - - if (!pModel.isCustomRenderer() && (!pItemStack.is(Items.TRIDENT) || flag)) - { -@@ -187,6 +211,12 @@ - else - { - RenderType rendertype = ItemBlockRenderTypes.getRenderType(pItemStack, flag1); -+ -+ if (isfphand && this.fade < 1.0F) -+ { -+ rendertype = Sheets.translucentCullBlockSheet(); -+ } -+ - VertexConsumer vertexconsumer; - - if (pItemStack.is(Items.COMPASS) && pItemStack.hasFoil()) -@@ -358,6 +388,19 @@ - } - } - -+ if (Minecraft.getInstance().jumpTracker.isBoots(pItemStack)) -+ { -+ k = this.makeColor(1, 0, 255, 0); -+ } -+ else if (Minecraft.getInstance().climbTracker.isClaws(pItemStack)) -+ { -+ k = this.makeColor(1, 130, 0, 75); -+ } -+ else if (TelescopeTracker.isLegacyTelescope(pItemStack)) -+ { -+ k = this.makeColor(1, 190, 110, 135); -+ } -+ - float f = (float)(k >> 16 & 255) / 255.0F; - float f1 = (float)(k >> 8 & 255) / 255.0F; - float f2 = (float)(k & 255) / 255.0F; -@@ -368,7 +411,7 @@ - } - else - { -- pBuffer.putBulkData(posestack$pose, bakedquad, f, f1, f2, pCombinedLight, pCombinedOverlay); -+ SpecialItemRenderer.addQuad(pBuffer, posestack$pose, bakedquad, f, f1, f2, this.fade, pCombinedLight, pCombinedOverlay); - } - } - } -@@ -429,6 +472,10 @@ - RenderSystem.enableBlend(); - RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); -+ //Vivecraft.. wut -+ GlStateManager.getAlphaState(this.alphaState); -+ GlStateManager.enableAlphaTest(); -+ // - PoseStack posestack = RenderSystem.getModelViewStack(); - posestack.pushPose(); - posestack.translate((double)pX, (double)pY, (double)(100.0F + this.blitOffset)); -@@ -620,4 +667,24 @@ - { - return this.blockEntityRenderer; - } -+ -+ private int makeColor(int a, int r, int g, int b) -+ { -+ return a << 24 | r << 16 | g << 8 | b; -+ } -+ -+ public float getCurrentFade() -+ { -+ return this.fade; -+ } -+ -+ public float getFade() -+ { -+ return this.manualFade; -+ } -+ -+ public void setFade(float fade) -+ { -+ this.manualFade = fade; -+ } - } diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/ItemRendererVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/ItemRendererVRMixin.java index 1d2225c8b..a0ebda571 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/ItemRendererVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/ItemRendererVRMixin.java @@ -1,6 +1,6 @@ package org.vivecraft.mixin.client.renderer.entity; -import org.vivecraft.ClientDataHolder; +import org.vivecraft.client_vr.ClientDataHolderVR; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.Minecraft; @@ -21,8 +21,8 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; -import org.vivecraft.gameplay.trackers.SwingTracker; -import org.vivecraft.gameplay.trackers.TelescopeTracker; +import org.vivecraft.client_vr.gameplay.trackers.SwingTracker; +import org.vivecraft.client_vr.gameplay.trackers.TelescopeTracker; import java.util.Iterator; import java.util.List; @@ -40,7 +40,7 @@ public class ItemRendererVRMixin { public void fade(ItemStack itemStack, ItemTransforms.TransformType transformType, boolean bl, PoseStack poseStack, MultiBufferSource multiBufferSource, int i, int j, BakedModel bakedModel, CallbackInfo ci) { LocalPlayer localplayer = Minecraft.getInstance().player; - if (localplayer != null && ClientDataHolder.isfphand) { + if (localplayer != null && ClientDataHolderVR.isfphand) { this.fade = SwingTracker.getItemFade(localplayer, itemStack); } else { @@ -50,7 +50,7 @@ public void fade(ItemStack itemStack, ItemTransforms.TransformType transformType @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ItemBlockRenderTypes;getRenderType(Lnet/minecraft/world/item/ItemStack;Z)Lnet/minecraft/client/renderer/RenderType;"), method = "render") public RenderType rendertypeFade(ItemStack itemStack, boolean bl) { - if (ClientDataHolder.isfphand && this.fade < 1.0F) { + if (ClientDataHolderVR.isfphand && this.fade < 1.0F) { return Sheets.translucentCullBlockSheet(); } return ItemBlockRenderTypes.getRenderType(itemStack, bl); @@ -58,10 +58,10 @@ public RenderType rendertypeFade(ItemStack itemStack, boolean bl) { @Inject(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/VertexConsumer;putBulkData(Lcom/mojang/blaze3d/vertex/PoseStack$Pose;Lnet/minecraft/client/renderer/block/model/BakedQuad;FFFII)V", shift = At.Shift.BY, by = -3), method = "renderQuadList", locals = LocalCapture.CAPTURE_FAILHARD) public void specialItems(PoseStack poseStack, VertexConsumer vertexConsumer, List list, ItemStack itemStack, int i, int j, CallbackInfo ci, boolean bl, PoseStack.Pose pose, Iterator var9, BakedQuad bakedQuad, int k, float f, float g, float h) { - if (ClientDataHolder.getInstance().jumpTracker.isBoots(itemStack)) { + if (ClientDataHolderVR.getInstance().jumpTracker.isBoots(itemStack)) { k = this.makeColor(1, 0, 255, 0); } - else if (ClientDataHolder.getInstance().climbTracker.isClaws(itemStack)) { + else if (ClientDataHolderVR.getInstance().climbTracker.isClaws(itemStack)) { k = this.makeColor(1, 130, 0, 75); } else if (TelescopeTracker.isLegacyTelescope(itemStack)) { diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/MobRenderer.java.patch b/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/MobRenderer.java.patch deleted file mode 100644 index 6539d86c1..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/MobRenderer.java.patch +++ /dev/null @@ -1,23 +0,0 @@ ---- a/net/minecraft/client/renderer/entity/MobRenderer.java -+++ b/net/minecraft/client/renderer/entity/MobRenderer.java -@@ -3,6 +3,7 @@ - import com.mojang.blaze3d.vertex.PoseStack; - import com.mojang.blaze3d.vertex.VertexConsumer; - import com.mojang.math.Matrix4f; -+import net.minecraft.client.Minecraft; - import net.minecraft.client.model.EntityModel; - import net.minecraft.client.renderer.LightTexture; - import net.minecraft.client.renderer.MultiBufferSource; -@@ -61,6 +62,12 @@ - { - pMatrixStack.pushPose(); - Vec3 vec3 = pLeashHolder.getRopeHoldPosition(pPartialTicks); -+ -+ if (pLeashHolder == Minecraft.getInstance().player) -+ { -+ vec3 = Minecraft.getInstance().vrPlayer.vrdata_world_render.getController(0).getPosition(); -+ } -+ - double d0 = (double)(Mth.lerp(pPartialTicks, pEntityLiving.yBodyRot, pEntityLiving.yBodyRotO) * ((float)Math.PI / 180F)) + (Math.PI / 2D); - Vec3 vec31 = pEntityLiving.getLeashOffset(); - double d1 = Math.cos(d0) * vec31.z + Math.sin(d0) * vec31.x; diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/PlayerRendererMixin.java b/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/PlayerRendererMixin.java new file mode 100644 index 000000000..c7da60eb8 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/PlayerRendererMixin.java @@ -0,0 +1,136 @@ +package org.vivecraft.mixin.client.renderer.entity; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.model.PlayerModel; +import net.minecraft.client.model.geom.EntityModelSet; +import net.minecraft.client.model.geom.ModelLayers; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.*; +import net.minecraft.client.renderer.entity.player.PlayerRenderer; +import net.minecraft.world.entity.LivingEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.vivecraft.client.extensions.EntityRenderDispatcherExtension; +import org.vivecraft.client.extensions.RenderLayerExtension; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.client.utils.RenderLayerTypes; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; + +import static org.vivecraft.client.utils.RenderLayerTypes.LayerType.*; + +/** +* A hacky way of copying regular PlayerRenderer layers to the VRPlayerRenderers +* an alternative would be to add the VRPlayerRenderers to the skin model list, +* so mods could add it manually, but some mods hardcode only the slim/default model, +* and that would mean the VRPlayerRenderers would be missing those layers completely +* */ +@Mixin(PlayerRenderer.class) +public abstract class PlayerRendererMixin> extends LivingEntityRenderer { + + // dummy constructor + public PlayerRendererMixin(EntityRendererProvider.Context context, M entityModel, float f) { + super(context, entityModel, f); + } + + @Override + public boolean addLayer(RenderLayer renderLayer) { + // check if the layer gets added from the PlayerRenderer, we don't want to copy, if we add it to the VRPlayerRenderer + // also check that the VRPlayerRenderers were created, this method also gets called in the constructor, + // those default Layers already are added to the VRPlayerRenderer there + if ((Object)this.getClass() == PlayerRenderer.class && !((EntityRenderDispatcherExtension) Minecraft.getInstance().getEntityRenderDispatcher()).getSkinMapVRSeated().isEmpty()) { + + // try to find a suitable constructor, so we can create a new Object without issues + Constructor constructor = null; + RenderLayerTypes.LayerType type = OTHER; + for (Constructor c : renderLayer.getClass().getConstructors()) { + if (c.getParameterCount() == 1 + && RenderLayerParent.class.isAssignableFrom(c.getParameterTypes()[0])) { + constructor = c; + type = PARENT_ONLY; + break; + } else if (c.getParameterCount() == 2 + && RenderLayerParent.class.isAssignableFrom(c.getParameterTypes()[0]) + && EntityModelSet.class.isAssignableFrom(c.getParameterTypes()[1])) { + constructor = c; + type = PARENT_MODELSET; + } else if (c.getParameterCount() == 3 + && RenderLayerParent.class.isAssignableFrom(c.getParameterTypes()[0]) + && HumanoidModel.class.isAssignableFrom(c.getParameterTypes()[1]) + && HumanoidModel.class.isAssignableFrom(c.getParameterTypes()[2]) + && renderLayer instanceof HumanoidArmorLayer) { + constructor = c; + type = PARENT_MODEL_MODEL; + } + } + + // if no suitable constructor was found, use do a basic Object.clone call, and replace the parent of the copy + if (constructor == null) { + // do a hacky clone, and replace parent + if (((PlayerModel) model).slim) { + addLayerClone(renderLayer, (LivingEntityRenderer) ((EntityRenderDispatcherExtension) entityRenderDispatcher).getSkinMapVRSeated().get("slim")); + addLayerClone(renderLayer, (LivingEntityRenderer) ((EntityRenderDispatcherExtension) entityRenderDispatcher).getSkinMapVR().get("slim")); + } else { + addLayerClone(renderLayer, (LivingEntityRenderer) ((EntityRenderDispatcherExtension) entityRenderDispatcher).getSkinMapVRSeated().get("default")); + addLayerClone(renderLayer, (LivingEntityRenderer) ((EntityRenderDispatcherExtension) entityRenderDispatcher).getSkinMapVR().get("default")); + } + } else { + // make a new instance with the vr model as parent + if (((PlayerModel) model).slim) { + addLayerConstructor(constructor, type, (LivingEntityRenderer)((EntityRenderDispatcherExtension) entityRenderDispatcher).getSkinMapVRSeated().get("slim")); + addLayerConstructor(constructor, type, (LivingEntityRenderer)((EntityRenderDispatcherExtension) entityRenderDispatcher).getSkinMapVR().get("slim")); + } else { + addLayerConstructor(constructor, type, (LivingEntityRenderer)((EntityRenderDispatcherExtension) entityRenderDispatcher).getSkinMapVRSeated().get("default")); + addLayerConstructor(constructor, type, (LivingEntityRenderer)((EntityRenderDispatcherExtension) entityRenderDispatcher).getSkinMapVR().get("default")); + } + } + } + return super.addLayer(renderLayer); + } + + /** + * does a basic Object.clone() copy + */ + @Unique + private void addLayerClone(RenderLayer renderLayer, LivingEntityRenderer target){ + try { + VRSettings.logger.warn("Copying layer: {} with Object.copy, this could cause issues", renderLayer.getClass()); + RenderLayer newLayer = (RenderLayer)((RenderLayerExtension) renderLayer).clone(); + newLayer.renderer = target; + target.addLayer(newLayer); + } catch (CloneNotSupportedException e) { + throw new RuntimeException(e); + } + } + + /** + * uses the provided constructor, to create a new RenderLayer Instance + */ + @Unique + private void addLayerConstructor(Constructor constructor, RenderLayerTypes.LayerType type, LivingEntityRenderer target){ + try { + switch (type) { + case PARENT_ONLY -> target.addLayer((RenderLayer) constructor.newInstance(target)); + case PARENT_MODELSET -> target.addLayer((RenderLayer) constructor.newInstance(target, Minecraft.getInstance().getEntityModels())); + case PARENT_MODEL_MODEL -> { + if (((PlayerModel) model).slim) { + target.addLayer((RenderLayer) constructor.newInstance(target, + new HumanoidModel(Minecraft.getInstance().getEntityModels().bakeLayer(ModelLayers.PLAYER_SLIM_INNER_ARMOR)), + new HumanoidModel(Minecraft.getInstance().getEntityModels().bakeLayer(ModelLayers.PLAYER_SLIM_OUTER_ARMOR)))); + } else { + target.addLayer((RenderLayer) constructor.newInstance(target, + new HumanoidModel(Minecraft.getInstance().getEntityModels().bakeLayer(ModelLayers.PLAYER_INNER_ARMOR)), + new HumanoidModel(Minecraft.getInstance().getEntityModels().bakeLayer(ModelLayers.PLAYER_OUTER_ARMOR)))); + } + } + } + } catch (InvocationTargetException | InstantiationException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/layers/RenderLayerMixin.java b/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/layers/RenderLayerMixin.java new file mode 100644 index 000000000..5ffda0873 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/layers/RenderLayerMixin.java @@ -0,0 +1,19 @@ +package org.vivecraft.mixin.client.renderer.entity.layers; + +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.world.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; +import org.vivecraft.client.extensions.RenderLayerExtension; + +/** + * part of the hacky way, to copy RenderLayers from the regular PlayerRenderer, to the VRPlayerRenderer + */ + +@Mixin(RenderLayer.class) +public class RenderLayerMixin> implements Cloneable, RenderLayerExtension { + @Override + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/geom/ModelPart.java.patch b/common/src/main/java/org/vivecraft/mixin/client/renderer/geom/ModelPart.java.patch deleted file mode 100644 index 1329fcef6..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/geom/ModelPart.java.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- a/net/minecraft/client/model/geom/ModelPart.java -+++ b/net/minecraft/client/model/geom/ModelPart.java -@@ -439,7 +439,7 @@ - - public static class Cube - { -- private final ModelPart.Polygon[] polygons; -+ public final ModelPart.Polygon[] polygons; - public final float minX; - public final float minY; - public final float minZ; -@@ -606,10 +606,10 @@ - } - } - -- static class Polygon -+ public static class Polygon - { -- public final ModelPart.Vertex[] vertices; -- public final Vector3f normal; -+ public final ModelPart.Vertex[] vertices; -+ public final Vector3f normal; - - public Polygon(ModelPart.Vertex[] p_104362_, float p_104363_, float p_104364_, float p_104365_, float p_104366_, float p_104367_, float p_104368_, boolean p_104369_, Direction p_104370_) - { -@@ -659,7 +659,7 @@ - } - } - -- static class Vertex -+ public static class Vertex - { - public final Vector3f pos; - public final float u; diff --git a/common/src/main/java/org/vivecraft/mixin/client/tutorial/CraftPlanksTutorialStep.java.patch b/common/src/main/java/org/vivecraft/mixin/client/tutorial/CraftPlanksTutorialStep.java.patch deleted file mode 100644 index 77b4cf293..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/tutorial/CraftPlanksTutorialStep.java.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/net/minecraft/client/tutorial/CraftPlanksTutorialStep.java -+++ b/net/minecraft/client/tutorial/CraftPlanksTutorialStep.java -@@ -36,7 +36,7 @@ - { - if (this.timeWaiting == 1) - { -- LocalPlayer localplayer = this.tutorial.getMinecraft().player; -+ LocalPlayer localplayer = this.tutorial.getInstance().player; - - if (localplayer != null) - { -@@ -57,7 +57,7 @@ - if (this.timeWaiting >= 1200 && this.toast == null) - { - this.toast = new TutorialToast(TutorialToast.Icons.WOODEN_PLANKS, CRAFT_TITLE, CRAFT_DESCRIPTION, false); -- this.tutorial.getMinecraft().getToasts().addToast(this.toast); -+ this.tutorial.getInstance().getToasts().addToast(this.toast); - } - } - } diff --git a/common/src/main/java/org/vivecraft/mixin/client/tutorial/FindTreeTutorialStepInstance.java.patch b/common/src/main/java/org/vivecraft/mixin/client/tutorial/FindTreeTutorialStepInstance.java.patch deleted file mode 100644 index 9bf2ae1ea..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/tutorial/FindTreeTutorialStepInstance.java.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/net/minecraft/client/tutorial/FindTreeTutorialStepInstance.java -+++ b/net/minecraft/client/tutorial/FindTreeTutorialStepInstance.java -@@ -42,7 +42,7 @@ - { - if (this.timeWaiting == 1) - { -- LocalPlayer localplayer = this.tutorial.getMinecraft().player; -+ LocalPlayer localplayer = this.tutorial.getInstance().player; - - if (localplayer != null) - { -@@ -66,7 +66,7 @@ - if (this.timeWaiting >= 6000 && this.toast == null) - { - this.toast = new TutorialToast(TutorialToast.Icons.TREE, TITLE, DESCRIPTION, false); -- this.tutorial.getMinecraft().getToasts().addToast(this.toast); -+ this.tutorial.getInstance().getToasts().addToast(this.toast); - } - } - } diff --git a/common/src/main/java/org/vivecraft/mixin/client/tutorial/MovementTutorialStepInstance.java.patch b/common/src/main/java/org/vivecraft/mixin/client/tutorial/MovementTutorialStepInstance.java.patch deleted file mode 100644 index 8887f8bf9..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/tutorial/MovementTutorialStepInstance.java.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- a/net/minecraft/client/tutorial/MovementTutorialStepInstance.java -+++ b/net/minecraft/client/tutorial/MovementTutorialStepInstance.java -@@ -97,12 +97,12 @@ - if (this.moveCompleted == -1 && this.moveToast == null) - { - this.moveToast = new TutorialToast(TutorialToast.Icons.MOVEMENT_KEYS, MOVE_TITLE, MOVE_DESCRIPTION, true); -- this.tutorial.getMinecraft().getToasts().addToast(this.moveToast); -+ this.tutorial.getInstance().getToasts().addToast(this.moveToast); - } - else if (this.moveCompleted != -1 && this.timeWaiting - this.moveCompleted >= 20 && this.lookCompleted == -1 && this.lookToast == null) - { - this.lookToast = new TutorialToast(TutorialToast.Icons.MOUSE, LOOK_TITLE, LOOK_DESCRIPTION, true); -- this.tutorial.getMinecraft().getToasts().addToast(this.lookToast); -+ this.tutorial.getInstance().getToasts().addToast(this.lookToast); - } - } - } diff --git a/common/src/main/java/org/vivecraft/mixin/client/tutorial/OpenInventoryTutorialStep.java.patch b/common/src/main/java/org/vivecraft/mixin/client/tutorial/OpenInventoryTutorialStep.java.patch deleted file mode 100644 index 241e3da1f..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/tutorial/OpenInventoryTutorialStep.java.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- a/net/minecraft/client/tutorial/OpenInventoryTutorialStep.java -+++ b/net/minecraft/client/tutorial/OpenInventoryTutorialStep.java -@@ -26,13 +26,10 @@ - { - this.tutorial.setStep(TutorialSteps.NONE); - } -- else -+ else if (this.timeWaiting >= 600 && this.toast == null) - { -- if (this.timeWaiting >= 600 && this.toast == null) -- { -- this.toast = new TutorialToast(TutorialToast.Icons.RECIPE_BOOK, TITLE, DESCRIPTION, false); -- this.tutorial.getMinecraft().getToasts().addToast(this.toast); -- } -+ this.toast = new TutorialToast(TutorialToast.Icons.RECIPE_BOOK, TITLE, DESCRIPTION, false); -+ this.tutorial.getInstance().getToasts().addToast(this.toast); - } - } - diff --git a/common/src/main/java/org/vivecraft/mixin/client/tutorial/PunchTreeTutorialStepInstance.java.patch b/common/src/main/java/org/vivecraft/mixin/client/tutorial/PunchTreeTutorialStepInstance.java.patch deleted file mode 100644 index 85d3f2032..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/tutorial/PunchTreeTutorialStepInstance.java.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/net/minecraft/client/tutorial/PunchTreeTutorialStepInstance.java -+++ b/net/minecraft/client/tutorial/PunchTreeTutorialStepInstance.java -@@ -38,7 +38,7 @@ - { - if (this.timeWaiting == 1) - { -- LocalPlayer localplayer = this.tutorial.getMinecraft().player; -+ LocalPlayer localplayer = this.tutorial.getInstance().player; - - if (localplayer != null) - { -@@ -59,7 +59,7 @@ - if ((this.timeWaiting >= 600 || this.resetCount > 3) && this.toast == null) - { - this.toast = new TutorialToast(TutorialToast.Icons.TREE, TITLE, DESCRIPTION, true); -- this.tutorial.getMinecraft().getToasts().addToast(this.toast); -+ this.tutorial.getInstance().getToasts().addToast(this.toast); - } - } - } diff --git a/common/src/main/java/org/vivecraft/mixin/client/tutorial/Tutorial.java.patch b/common/src/main/java/org/vivecraft/mixin/client/tutorial/Tutorial.java.patch deleted file mode 100644 index 659937b98..000000000 --- a/common/src/main/java/org/vivecraft/mixin/client/tutorial/Tutorial.java.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/net/minecraft/client/tutorial/Tutorial.java -+++ b/net/minecraft/client/tutorial/Tutorial.java -@@ -96,7 +96,7 @@ - this.stop(); - } - -- this.instance = this.minecraft.options.tutorialStep.create(this); -+ this.instance = TutorialSteps.NONE.create(this); - } - - public void addTimedToast(TutorialToast pToast, int pDurationTicks) -@@ -147,7 +147,7 @@ - } - } - -- public Minecraft getMinecraft() -+ public Minecraft getInstance() - { - return this.minecraft; - } diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/ClientBrandRetrieverVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/ClientBrandRetrieverVRMixin.java new file mode 100644 index 000000000..166c87ab4 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/ClientBrandRetrieverVRMixin.java @@ -0,0 +1,18 @@ +package org.vivecraft.mixin.client_vr; + +import net.minecraft.client.ClientBrandRetriever; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.vivecraft.client_vr.VRState; + +@Mixin(ClientBrandRetriever.class) +public class ClientBrandRetrieverVRMixin { + @Inject(at = @At("RETURN"), method = "getClientModName", cancellable = true) + private static void vivecraftClientBrand(CallbackInfoReturnable cir) { + if (VRState.vrEnabled) { + cir.setReturnValue("vivecraft"); + } + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client/KeyboardHandlerVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/KeyboardHandlerVRMixin.java similarity index 67% rename from common/src/main/java/org/vivecraft/mixin/client/KeyboardHandlerVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/KeyboardHandlerVRMixin.java index 8d2545715..d8bb4b67c 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/KeyboardHandlerVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/KeyboardHandlerVRMixin.java @@ -1,7 +1,9 @@ -package org.vivecraft.mixin.client; +package org.vivecraft.mixin.client_vr; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.MethodHolder; +import net.minecraft.client.Screenshot; +import org.lwjgl.glfw.GLFW; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.MethodHolder; import com.mojang.blaze3d.pipeline.RenderTarget; import net.minecraft.client.KeyboardHandler; import net.minecraft.client.Minecraft; @@ -15,9 +17,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.gameplay.screenhandlers.RadialHandler; -import org.vivecraft.provider.ControllerType; -import org.vivecraft.settings.VRHotkeys; +import org.vivecraft.client_vr.gameplay.screenhandlers.RadialHandler; +import org.vivecraft.client_vr.settings.VRHotkeys; +import org.vivecraft.client_vr.VRState; import java.io.File; import java.util.function.Consumer; @@ -32,9 +34,9 @@ public class KeyboardHandlerVRMixin { @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/KeyboardHandler;debugCrashKeyTime:J", ordinal = 0), method = "keyPress", cancellable = true) public void screenHandler(long l, int i, int j, int k, int m, CallbackInfo ci) { if (i == 256 && k == 1) { - if (org.vivecraft.gameplay.screenhandlers.KeyboardHandler.Showing) + if (org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler.Showing) { - org.vivecraft.gameplay.screenhandlers.KeyboardHandler.setOverlayShowing(false); + org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler.setOverlayShowing(false); if(this.minecraft.screen instanceof ChatScreen) { minecraft.screen.onClose(); } @@ -42,7 +44,7 @@ public void screenHandler(long l, int i, int j, int k, int m, CallbackInfo ci) { } if (RadialHandler.isShowing()) { - RadialHandler.setOverlayShowing(false, (ControllerType)null); + RadialHandler.setOverlayShowing(false, null); ci.cancel(); } } @@ -54,22 +56,26 @@ public void screenHandler(long l, int i, int j, int k, int m, CallbackInfo ci) { @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Screenshot;grab(Ljava/io/File;Lcom/mojang/blaze3d/pipeline/RenderTarget;Ljava/util/function/Consumer;)V"), method = "keyPress") public void noScreenshot(File file, RenderTarget renderTarget, Consumer consumer) { - ClientDataHolder.getInstance().grabScreenShot = true; + if (!VRState.vrRunning) { + Screenshot.grab(file, renderTarget, consumer); + } else { + ClientDataHolderVR.getInstance().grabScreenShot = true; + } } @Redirect(at = @At(value = "FIELD", target = "Lnet/minecraft/client/gui/screens/Screen;passEvents:Z"), method = "keyPress") public boolean passEvents(Screen instance) { - return instance.passEvents && !MethodHolder.isKeyDown(345); + return instance.passEvents && !MethodHolder.isKeyDown(GLFW.GLFW_KEY_RIGHT_CONTROL); } //TODO really bad @Redirect(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;", ordinal = 2), method = "keyPress") public Screen screenKey(Minecraft instance) { - return !MethodHolder.isKeyDown(345)? instance.screen : null; + return !MethodHolder.isKeyDown(GLFW.GLFW_KEY_RIGHT_CONTROL) ? instance.screen : null; } @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Options;hideGui:Z", ordinal = 1, shift = At.Shift.AFTER), method = "keyPress") - public void saveOptions(long l, int i, int j, int k, int m, CallbackInfo ci) { - ClientDataHolder.getInstance().vrSettings.saveOptions(); + public void saveHideGuiOptions(long l, int i, int j, int k, int m, CallbackInfo ci) { + ClientDataHolderVR.getInstance().vrSettings.saveOptions(); } } diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/KeyboardInputVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/KeyboardInputVRMixin.java new file mode 100644 index 000000000..990b67eca --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/KeyboardInputVRMixin.java @@ -0,0 +1,186 @@ +package org.vivecraft.mixin.client_vr; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.Options; +import net.minecraft.client.player.Input; +import net.minecraft.client.player.KeyboardInput; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.client.VivecraftVRMod; +import org.vivecraft.client.utils.Utils; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler; +import org.vivecraft.client_vr.provider.openvr_lwjgl.VRInputAction; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.common.utils.math.Vector2; + +import static org.vivecraft.client_vr.provider.openvr_lwjgl.control.VivecraftMovementInput.getMovementAxisValue; + +@Mixin(KeyboardInput.class) +public class KeyboardInputVRMixin extends Input { + + @Final + @Shadow + private Options options; + @Unique + private boolean autoSprintActive = false; + @Unique + private boolean movementSetByAnalog = false; + + @Unique + private float axisToDigitalMovement(float value) { + if (value > 0.5F) { + return 1.0F; + } else { + return value < -0.5F ? -1.0F : 0.0F; + } + } + + @Inject(method = "tick", at = @At("HEAD"), cancellable = true) + public void tick(boolean isSneaking, CallbackInfo ci) { + if (!VRState.vrRunning) { + return; + } + + ci.cancel(); + + this.leftImpulse = 0.0F; + this.forwardImpulse = 0.0F; + Minecraft minecraft = Minecraft.getInstance(); + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); + boolean climbing = dataholder.climbTracker.isClimbeyClimb() && !minecraft.player.isInWater() && dataholder.climbTracker.isGrabbingLadder(); + + if (climbing || !this.options.keyUp.isDown() && !VivecraftVRMod.INSTANCE.keyTeleportFallback.isDown()) { + this.up = false; + } else { + ++this.forwardImpulse; + this.up = true; + } + + if (!climbing && this.options.keyDown.isDown()) { + --this.forwardImpulse; + this.down = true; + } else { + this.down = false; + } + + if (!climbing && this.options.keyLeft.isDown()) { + ++this.leftImpulse; + this.left = true; + } else { + this.left = false; + } + + if (!climbing && this.options.keyRight.isDown()) { + --this.leftImpulse; + this.right = true; + } else { + this.right = false; + } + + boolean flag1 = false; + float f = 0.0F; + + if (!climbing && !dataholder.vrSettings.seated && minecraft.screen == null && !KeyboardHandler.Showing) { + VRInputAction vrinputaction = dataholder.vr.getInputAction(VivecraftVRMod.INSTANCE.keyFreeMoveStrafe); + VRInputAction vrinputaction1 = dataholder.vr.getInputAction(VivecraftVRMod.INSTANCE.keyFreeMoveRotate); + Vector2 vector2 = vrinputaction.getAxis2DUseTracked(); + Vector2 vector21 = vrinputaction1.getAxis2DUseTracked(); + + if (vector2.getX() == 0.0F && vector2.getY() == 0.0F) { + if (vector21.getY() != 0.0F) { + flag1 = true; + f = vector21.getY(); + + if (dataholder.vrSettings.analogMovement) { + this.forwardImpulse = vector21.getY(); + this.leftImpulse = 0.0F; + this.leftImpulse -= getMovementAxisValue(this.options.keyRight); + this.leftImpulse += getMovementAxisValue(this.options.keyLeft); + } else { + this.forwardImpulse = this.axisToDigitalMovement(vector21.getY()); + } + } else if (dataholder.vrSettings.analogMovement) { + flag1 = true; + this.forwardImpulse = 0.0F; + this.leftImpulse = 0.0F; + float f1 = getMovementAxisValue(this.options.keyUp); + + if (f1 == 0.0F) { + f1 = getMovementAxisValue(VivecraftVRMod.INSTANCE.keyTeleportFallback); + } + + f = f1; + this.forwardImpulse += f1; + this.forwardImpulse -= getMovementAxisValue(this.options.keyDown); + this.leftImpulse -= getMovementAxisValue(this.options.keyRight); + this.leftImpulse += getMovementAxisValue(this.options.keyLeft); + float f2 = 0.05F; + this.forwardImpulse = Utils.applyDeadzone(this.forwardImpulse, f2); + this.leftImpulse = Utils.applyDeadzone(this.leftImpulse, f2); + } + } else { + flag1 = true; + f = vector2.getY(); + + if (dataholder.vrSettings.analogMovement) { + this.forwardImpulse = vector2.getY(); + this.leftImpulse = -vector2.getX(); + } else { + this.forwardImpulse = this.axisToDigitalMovement(vector2.getY()); + this.leftImpulse = this.axisToDigitalMovement(-vector2.getX()); + } + } + + if (flag1) { + this.movementSetByAnalog = true; + this.up = this.forwardImpulse > 0.0F; + this.down = this.forwardImpulse < 0.0F; + this.left = this.leftImpulse > 0.0F; + this.right = this.leftImpulse < 0.0F; + VRInputAction.setKeyBindState(this.options.keyUp, this.up); + VRInputAction.setKeyBindState(this.options.keyDown, this.down); + VRInputAction.setKeyBindState(this.options.keyLeft, this.left); + VRInputAction.setKeyBindState(this.options.keyRight, this.right); + + if (dataholder.vrSettings.autoSprint) { + if (f >= dataholder.vrSettings.autoSprintThreshold) { + minecraft.player.setSprinting(true); + this.autoSprintActive = true; + this.forwardImpulse = 1.0F; + } else if (this.forwardImpulse > 0.0F && dataholder.vrSettings.analogMovement) { + this.forwardImpulse = this.forwardImpulse / dataholder.vrSettings.autoSprintThreshold * 1.0F; + } + } + } + } + + if (!flag1 && this.movementSetByAnalog) { + VRInputAction.setKeyBindState(this.options.keyUp, false); + VRInputAction.setKeyBindState(this.options.keyDown, false); + VRInputAction.setKeyBindState(this.options.keyLeft, false); + VRInputAction.setKeyBindState(this.options.keyRight, false); + } + + this.movementSetByAnalog = flag1; + + if (this.autoSprintActive && f < dataholder.vrSettings.autoSprintThreshold) { + minecraft.player.setSprinting(false); + this.autoSprintActive = false; + } + + boolean flag2 = minecraft.screen == null && (dataholder.vrPlayer.getFreeMove() || dataholder.vrSettings.simulateFalling) && !climbing; + this.jumping = this.options.keyJump.isDown() && flag2; + this.shiftKeyDown = (dataholder.sneakTracker.sneakCounter > 0 || dataholder.sneakTracker.sneakOverride || this.options.keyShift.isDown()) && minecraft.screen == null; + + if (isSneaking) { + this.leftImpulse *= 0.3F; + this.forwardImpulse *= 0.3F; + } + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/MinecraftVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/MinecraftVRMixin.java new file mode 100644 index 000000000..0653ac2c5 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/MinecraftVRMixin.java @@ -0,0 +1,1521 @@ +package org.vivecraft.mixin.client_vr; + + +import com.mojang.blaze3d.pipeline.MainTarget; +import com.mojang.blaze3d.pipeline.RenderTarget; +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.platform.InputConstants; +import com.mojang.blaze3d.platform.Window; +import com.mojang.blaze3d.platform.WindowEventHandler; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Matrix4f; +import net.minecraft.ChatFormatting; +import net.minecraft.Util; +import net.minecraft.client.*; +import net.minecraft.client.Timer; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.components.toasts.ToastComponent; +import net.minecraft.client.gui.screens.LoadingOverlay; +import net.minecraft.client.gui.screens.Overlay; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.client.multiplayer.MultiPlayerGameMode; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.renderer.FogRenderer; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.entity.EntityRenderDispatcher; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.server.IntegratedServer; +import net.minecraft.client.sounds.SoundManager; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.server.packs.PackResources; +import net.minecraft.server.packs.resources.ReloadableResourceManager; +import net.minecraft.server.packs.resources.ResourceManagerReloadListener; +import net.minecraft.util.FrameTimer; +import net.minecraft.util.Mth; +import net.minecraft.util.profiling.ProfileResults; +import net.minecraft.util.profiling.ProfilerFiller; +import net.minecraft.util.thread.ReentrantBlockableEventLoop; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; +import org.lwjgl.glfw.GLFW; +import org.objectweb.asm.Opcodes; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.At.Shift; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; +import org.vivecraft.client.VivecraftVRMod; +import org.vivecraft.client.gui.VivecraftClickEvent; +import org.vivecraft.client.gui.screens.UpdateScreen; +import org.vivecraft.client.utils.UpdateChecker; +import org.vivecraft.client_vr.extensions.*; +import org.vivecraft.client_vr.menuworlds.MenuWorldDownloader; +import org.vivecraft.client_vr.menuworlds.MenuWorldExporter; +import org.vivecraft.mod_compat_vr.iris.IrisHelper; +import org.vivecraft.mod_compat_vr.optifine.OptifineHelper; +import org.vivecraft.mod_compat_vr.sodium.SodiumHelper; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client.extensions.RenderTargetExtension; +import org.vivecraft.client.Xevents; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.MethodHolder; +import org.vivecraft.client.Xplat; +import org.vivecraft.client.network.ClientNetworking; +import org.vivecraft.client_vr.gameplay.screenhandlers.GuiHandler; +import org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler; +import org.vivecraft.client_vr.gameplay.screenhandlers.RadialHandler; +import org.vivecraft.client_vr.gameplay.trackers.TelescopeTracker; +import org.vivecraft.client.gui.screens.ErrorScreen; +import org.vivecraft.client_vr.provider.openvr_lwjgl.VRInputAction; +import org.vivecraft.client.VRPlayersClient; +import org.vivecraft.client_vr.render.RenderConfigException; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client_vr.render.VRFirstPersonArmSwing; +import org.vivecraft.client_vr.render.VRShaders; +import org.vivecraft.client_vr.settings.VRHotkeys; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.client.utils.LangHelper; +import org.vivecraft.client.utils.Utils; +import org.vivecraft.client_xr.render_pass.RenderPassManager; +import org.vivecraft.client_xr.render_pass.WorldRenderPass; +import org.vivecraft.common.utils.math.Vector3; +//import org.vivecraft.provider.ovr_lwjgl.MC_OVR; +//import org.vivecraft.provider.ovr_lwjgl.OVR_StereoRenderer; +//import org.vivecraft.provider.ovr_lwjgl.OVR_StereoRenderer; + +import javax.annotation.Nullable; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.*; +import java.util.concurrent.CompletableFuture; + +@Mixin(Minecraft.class) +public abstract class MinecraftVRMixin extends ReentrantBlockableEventLoop implements WindowEventHandler, MinecraftExtension { + + @Unique + private boolean lastClick; + @Unique + private ItemStack itemInHand; //Captured item + + public MinecraftVRMixin(String string) { + super(string); + } + + @Unique + private long mirroNotifyStart; + + @Unique + private long mirroNotifyLen; + + @Unique + private boolean mirrorNotifyClear; + + @Unique + private String mirrorNotifyText; + + @Unique + private float fov = 1.0F; + + @Unique + private long currentNanoTime; + + @Shadow + protected int missTime; + + @Final + @Shadow + public Gui gui; + + @Shadow + @Final + public File gameDirectory; + + @Shadow + public Options options; + + @Shadow + public Screen screen; + + @Shadow + private ProfilerFiller profiler; + + @Shadow + @Final + private Window window; + + @Shadow + private Overlay overlay; + + @Final + @Shadow + public Font font; + + @Final + @Shadow + public static boolean ON_OSX; + + @Shadow + private boolean pause; + + @Shadow + private float pausePartialTick; + + @Final + @Shadow + private Timer timer; + + @Final + @Shadow + public GameRenderer gameRenderer; + + @Shadow + public ClientLevel level; + + @Shadow + public RenderTarget mainRenderTarget; + + @Final + @Shadow + private SoundManager soundManager; + + @Shadow + public boolean noRender; + + @Shadow + public LocalPlayer player; + + @Shadow + private ProfileResults fpsPieResults; + + @Shadow + private int rightClickDelay; + + @Shadow + public MultiPlayerGameMode gameMode; + + @Shadow + private CompletableFuture pendingReload; + + @Shadow + @Final + private Queue progressTasks; + + @Shadow + @Final + public MouseHandler mouseHandler; + + @Shadow + private int frames; + + @Shadow + private IntegratedServer singleplayerServer; + + @Shadow + @Final + public FrameTimer frameTimer; + + @Shadow + private long lastNanoTime; + + @Shadow + private long lastTime; + + @Shadow + public String fpsString; + + @Shadow + private static int fps; + + @Shadow + public abstract Entity getCameraEntity(); + + @Shadow + protected abstract void renderFpsMeter(PoseStack poseStack, ProfileResults fpsPieResults2); + + @Shadow + public abstract boolean hasSingleplayerServer(); + + @Shadow + protected abstract int getFramerateLimit(); + + @Shadow + public abstract void tick(); + + @Shadow + public abstract CompletableFuture reloadResourcePacks(); + + @Shadow + public abstract void stop(); + + @Shadow + @Final + private EntityRenderDispatcher entityRenderDispatcher; + + @Shadow + protected abstract boolean startAttack(); + + @Shadow + public abstract RenderTarget getMainRenderTarget(); + + @Shadow @Nullable public abstract ClientPacketListener getConnection(); + + @Shadow @Final public LevelRenderer levelRenderer; + + @Shadow @Final private TextureManager textureManager; + + @Shadow @Final private ReloadableResourceManager resourceManager; + + @Shadow public abstract boolean isLocalServer(); + + @Shadow public abstract IntegratedServer getSingleplayerServer(); + + @Shadow @Final private ToastComponent toast; + @Unique private List resourcepacks; + + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setOverlay(Lnet/minecraft/client/gui/screens/Overlay;)V"), method = "", index = 0) + public Overlay initVivecraft(Overlay overlay) { + RenderPassManager.INSTANCE = new RenderPassManager((MainTarget) this.getMainRenderTarget()); + VRSettings.initSettings((Minecraft) (Object) this, this.gameDirectory); + + // register a resource reload listener, to reload the menu world + resourceManager.registerReloadListener((ResourceManagerReloadListener) resourceManager -> { + List newPacks = resourceManager.listPacks().map(PackResources::getName).toList(); + if ((resourcepacks == null || !resourcepacks.equals(newPacks)) && + ClientDataHolderVR.getInstance().menuWorldRenderer != null + && ClientDataHolderVR.getInstance().menuWorldRenderer.isReady()) { + resourcepacks = newPacks; + try { + ClientDataHolderVR.getInstance().menuWorldRenderer.destroy(); + ClientDataHolderVR.getInstance().menuWorldRenderer.prepare(); + } catch (Exception exception) { + exception.printStackTrace(); + } + } + }); + return overlay; + } + + // on first resource load finished + @Inject(at = @At("HEAD"), method = { + "method_24040", // fabric + "lambda$new$2"} // forge + , remap = false) + public void initVROnLaunch(CallbackInfo ci) { + // init vr after resource loading + try { + if (ClientDataHolderVR.getInstance().vrSettings.vrEnabled) { + VRState.vrEnabled = true; + VRState.vrRunning = true; + VRState.initializeVR(); + } + } catch (Exception exception) { + exception.printStackTrace(); + } + + // set initial resourcepacks + resourcepacks = resourceManager.listPacks().map(PackResources::getName).toList(); + + if (OptifineHelper.isOptifineLoaded() && ClientDataHolderVR.getInstance().menuWorldRenderer != null && ClientDataHolderVR.getInstance().menuWorldRenderer.isReady()) { + // with optifine this texture somehow fails to load, so manually reload it + try { + textureManager.getTexture(Gui.GUI_ICONS_LOCATION).load(resourceManager); + } catch (IOException e) { + // if there was an error, just reload everything + reloadResourcePacks(); + } + } + } + + @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;delayedCrash:Ljava/util/function/Supplier;", shift = Shift.BEFORE), method = "destroy()V") + public void destroy(CallbackInfo info) { + try { + // the game crashed probably not because of us, so keep the vr choice + VRState.destroyVR(false); + } catch (Exception ignored) { + } + } + + @Inject(at = @At("HEAD"), method = "runTick(Z)V", cancellable = true) + public void replaceTick(boolean bl, CallbackInfo callback) { + if (VRState.vrEnabled) { + VRState.initializeVR(); + } else if (VRState.vrInitialized) { + VRState.destroyVR(true); + resizeDisplay(); + } + if (!VRState.vrInitialized) { + return; + } + boolean vrActive = !ClientDataHolderVR.getInstance().vrSettings.vrHotswitchingEnabled || ClientDataHolderVR.getInstance().vr.isActive(); + if (VRState.vrRunning != vrActive && (ClientNetworking.serverAllowsVrSwitching || player == null)) { + VRState.vrRunning = vrActive; + if (vrActive) { + if (player != null) { + ClientDataHolderVR.getInstance().vrPlayer.snapRoomOriginToPlayerEntity(player, false, false); + } + // release mouse when switching to standing + if (!ClientDataHolderVR.getInstance().vrSettings.seated) { + mouseHandler.releaseMouse(); + InputConstants.grabOrReleaseMouse(window.getWindow(), GLFW.GLFW_CURSOR_NORMAL, mouseHandler.xpos(), mouseHandler.ypos()); + } + } else { + GuiHandler.guiPos_room = null; + GuiHandler.guiRotation_room = null; + GuiHandler.guiScale = 1.0F; + if (player != null) { + VRPlayersClient.getInstance().disableVR(player.getUUID()); + } + if (gameRenderer != null) { + gameRenderer.checkEntityPostEffect(this.options.getCameraType().isFirstPerson() ? this.getCameraEntity() : null); + } + // grab/release mouse + if (screen != null || level == null) { + mouseHandler.releaseMouse(); + InputConstants.grabOrReleaseMouse(window.getWindow(), GLFW.GLFW_CURSOR_NORMAL, mouseHandler.xpos(), mouseHandler.ypos()); + } else { + mouseHandler.grabMouse(); + InputConstants.grabOrReleaseMouse(window.getWindow(), GLFW.GLFW_CURSOR_DISABLED, mouseHandler.xpos(), mouseHandler.ypos()); + } + } + var connection = this.getConnection(); + if (connection != null) { + connection.send(ClientNetworking.createVRActivePacket(vrActive)); + } + // reload sound manager, to toggle HRTF between VR and NONVR one + if (!Minecraft.getInstance().getSoundManager().getAvailableSounds().isEmpty()) { + Minecraft.getInstance().getSoundManager().reload(); + } + resizeDisplay(); + } + if (!VRState.vrRunning) { + return; + } + if (SodiumHelper.isLoaded()) { + SodiumHelper.preRenderMinecraft(); + } + this.preRender(bl); + this.newRunTick(bl); + this.postRender(); + RenderPassManager.setVanillaRenderPass(); + if (SodiumHelper.isLoaded()) { + SodiumHelper.postRenderMinecraft(); + } + callback.cancel(); + } + + // the VR runtime handles the frame limit, no need to manually limit it 60fps + @ModifyConstant(constant = @Constant(longValue = 16), method = { + "doLoadLevel", // fabric + "doLoadLevel(Ljava/lang/String;Ljava/util/function/Function;Ljava/util/function/Function;ZLnet/minecraft/client/Minecraft$ExperimentalDialogType;Z)V" // forge + }, expect = 0) + private long noWaitOnLevelLoadFabric(long constant) { + if (VRState.vrRunning) { + return 0L; + } + return constant; + } + + //Replaces normal runTick + public void newRunTick(boolean bl) { + + currentNanoTime = Util.getNanos(); + + // v + this.profiler.push("setupRenderConfiguration"); + // + this.mouseHandler.turnPlayer(); + this.window.setErrorSection("Render"); + this.profiler.push("sound"); + this.soundManager.updateSource(this.gameRenderer.getMainCamera()); + this.profiler.pop(); +// this.profiler.push("render"); +// PoseStack i = RenderSystem.getModelViewStack(); +// i.pushPose(); +// RenderSystem.applyModelViewMatrix(); +// RenderSystem.clear(16640, ON_OSX); +// this.mainRenderTarget.bindWrite(true); + + // v + try { + this.checkGLError("pre render setup "); + ClientDataHolderVR.getInstance().vrRenderer.setupRenderConfiguration(); + this.checkGLError("post render setup "); + } catch (Exception exception1) { + exception1.printStackTrace(); + } + + float f = this.pause ? this.pausePartialTick : this.timer.partialTick; + this.profiler.popPush("preRender"); + ClientDataHolderVR.getInstance().vrPlayer.preRender(f); + this.profiler.popPush("2D"); + // + + FogRenderer.setupNoFog(); +// this.profiler.push("display"); + RenderSystem.enableTexture(); + RenderSystem.enableCull(); +// this.profiler.pop(); + + // v + this.profiler.push("Gui"); + RenderPassManager.setGUIRenderPass(); + this.gameRenderer.getMainCamera().setup(this.level, this.getCameraEntity(), false, false, f); + + // + + if (!this.noRender) { +// this.profiler.popPush("gameRenderer"); +// this.gameRenderer.render(this.pause ? this.pausePartialTick : this.timer.partialTick, l, bl); + Xevents.onRenderTickStart(this.pause ? this.pausePartialTick : this.timer.partialTick); + } + +// if (this.fpsPieResults != null) { +// this.profiler.push("fpsPie"); +// this.renderFpsMeter(new PoseStack(), this.fpsPieResults); +// this.profiler.pop(); +// } + + // v + this.profiler.push("gui setup"); + RenderSystem.depthMask(true); + RenderSystem.colorMask(true, true, true, true); + this.mainRenderTarget = GuiHandler.guiFramebuffer; + this.mainRenderTarget.clear(Minecraft.ON_OSX); + this.mainRenderTarget.bindWrite(true); + + // draw screen/gui to buffer + RenderSystem.getModelViewStack().pushPose(); + ((GameRendererExtension) this.gameRenderer).setShouldDrawScreen(true); + // only draw the gui when the level was rendered once, since some mods expect that + ((GameRendererExtension) this.gameRenderer).setShouldDrawGui(bl && this.entityRenderDispatcher.camera != null); + + this.gameRenderer.render(f, currentNanoTime, false); + // draw cursor + if (Minecraft.getInstance().screen != null) { + int x = (int) (Minecraft.getInstance().mouseHandler.xpos() * (double) Minecraft.getInstance().getWindow().getGuiScaledWidth() / (double) Minecraft.getInstance().getWindow().getScreenWidth()); + int y = (int) (Minecraft.getInstance().mouseHandler.ypos() * (double) Minecraft.getInstance().getWindow().getGuiScaledHeight() / (double) Minecraft.getInstance().getWindow().getScreenHeight()); + ((GuiExtension) Minecraft.getInstance().gui).drawMouseMenuQuad(x, y); + } + // pre 1.19.4 toasts are not drawn in GameRenderer::render + if (!this.noRender) { + this.profiler.push("toasts"); + this.toast.render(new PoseStack()); + this.profiler.pop(); + } + + // draw debug pie + drawProfiler(); + + RenderSystem.getModelViewStack().popPose(); + RenderSystem.applyModelViewMatrix(); + + // generate mipmaps + // TODO: does this do anything? + mainRenderTarget.bindRead(); + ((RenderTargetExtension) mainRenderTarget).genMipMaps(); + mainRenderTarget.unbindRead(); + + this.profiler.popPush("2D Keyboard"); + if (KeyboardHandler.Showing + && !ClientDataHolderVR.getInstance().vrSettings.physicalKeyboard) { + this.mainRenderTarget = KeyboardHandler.Framebuffer; + this.mainRenderTarget.clear(Minecraft.ON_OSX); + this.mainRenderTarget.bindWrite(true); + ((GameRendererExtension) this.gameRenderer).drawScreen(f, + KeyboardHandler.UI, new PoseStack()); + } + // + +// this.profiler.push("blit"); +// this.mainRenderTarget.unbindWrite(); +// i.popPose(); +// i.pushPose(); +// RenderSystem.applyModelViewMatrix(); +// this.mainRenderTarget.blitToScreen(this.window.getWidth(), this.window.getHeight()); +// i.popPose(); +// RenderSystem.applyModelViewMatrix(); +// this.profiler.popPush("updateDisplay"); +// this.window.updateDisplay(); + + // v + this.profiler.popPush("Radial Menu"); + if (RadialHandler.isShowing()) { + this.mainRenderTarget = RadialHandler.Framebuffer; + this.mainRenderTarget.clear(Minecraft.ON_OSX); + this.mainRenderTarget.bindWrite(true); + ((GameRendererExtension) this.gameRenderer).drawScreen(f, RadialHandler.UI, new PoseStack()); + } + + this.profiler.pop(); + this.checkGLError("post 2d "); + VRHotkeys.updateMovingThirdPersonCam(); + this.profiler.popPush("sound"); + ClientDataHolderVR.getInstance().currentPass = RenderPass.CENTER; + this.soundManager.updateSource(this.gameRenderer.getMainCamera()); + this.profiler.pop(); + // + +// if ((double) j < Option.FRAMERATE_LIMIT.getMaxValue()) { +// RenderSystem.limitDisplayFPS(j); +// } + + if (!this.noRender) { + List list = ClientDataHolderVR.getInstance().vrRenderer.getRenderPasses(); + + ClientDataHolderVR.getInstance().isFirstPass = true; + for (RenderPass renderpass : list) { + ClientDataHolderVR.getInstance().currentPass = renderpass; + + switch (renderpass) { + case LEFT, RIGHT -> RenderPassManager.setWorldRenderPass(WorldRenderPass.stereoXR); + case CENTER -> RenderPassManager.setWorldRenderPass(WorldRenderPass.center); + case THIRD -> RenderPassManager.setWorldRenderPass(WorldRenderPass.mixedReality); + case SCOPEL -> RenderPassManager.setWorldRenderPass(WorldRenderPass.leftTelescope); + case SCOPER -> RenderPassManager.setWorldRenderPass(WorldRenderPass.rightTelescope); + case CAMERA -> RenderPassManager.setWorldRenderPass(WorldRenderPass.camera); + } + + this.profiler.push("Eye:" + ClientDataHolderVR.getInstance().currentPass); + this.profiler.push("setup"); + this.mainRenderTarget.bindWrite(true); + this.profiler.pop(); + this.renderSingleView(renderpass, f, bl); + this.profiler.pop(); + + if (ClientDataHolderVR.getInstance().grabScreenShot) { + boolean flag; + + if (list.contains(RenderPass.CAMERA)) { + flag = renderpass == RenderPass.CAMERA; + } else if (list.contains(RenderPass.CENTER)) { + flag = renderpass == RenderPass.CENTER; + } else { + flag = ClientDataHolderVR.getInstance().vrSettings.displayMirrorLeftEye ? renderpass == RenderPass.LEFT + : renderpass == RenderPass.RIGHT; + } + + if (flag) { + RenderTarget rendertarget = this.mainRenderTarget; + + if (renderpass == RenderPass.CAMERA) { + rendertarget = ClientDataHolderVR.getInstance().vrRenderer.cameraFramebuffer; + } + + this.mainRenderTarget.unbindWrite(); + Utils.takeScreenshot(rendertarget); + this.window.updateDisplay(); + ClientDataHolderVR.getInstance().grabScreenShot = false; + } + } + + ClientDataHolderVR.getInstance().isFirstPass = false; + } + + ClientDataHolderVR.getInstance().vrPlayer.postRender(f); + this.profiler.push("Display/Reproject"); + + try { + ClientDataHolderVR.getInstance().vrRenderer.endFrame(); + } catch (RenderConfigException exception) { + VRSettings.logger.error(exception.toString()); + } + + this.profiler.pop(); + this.checkGLError("post submit "); + + if (!this.noRender) { + Xevents.onRenderTickEnd(this.pause ? this.pausePartialTick : this.timer.partialTick); + } + + this.profiler.push("mirror"); + this.mainRenderTarget.unbindWrite(); + this.copyToMirror(); + this.drawNotifyMirror(); + this.checkGLError("post-mirror "); + this.profiler.pop(); + } + } + + public void preRender(boolean tick) { + this.window.setErrorSection("Pre render"); + if (this.window.shouldClose()) { + this.stop(); + } + + if (this.pendingReload != null && !(this.overlay instanceof LoadingOverlay)) { + CompletableFuture completableFuture = this.pendingReload; + this.pendingReload = null; + this.reloadResourcePacks().thenRun(() -> completableFuture.complete(null)); + } + + Runnable runnable; + while ((runnable = this.progressTasks.poll()) != null) { + runnable.run(); + } + + ++ClientDataHolderVR.getInstance().frameIndex; + + if (tick) { + int i = this.timer.advanceTime(Util.getMillis()); + this.profiler.push("scheduledExecutables"); + this.runAllTasks(); + this.profiler.pop(); + + try { + ClientDataHolderVR.getInstance().vrRenderer.setupRenderConfiguration(); + } catch (RenderConfigException renderConfigException) { + // TODO: could disabling VR here cause issues? + Minecraft.getInstance().setScreen(new ErrorScreen("VR Render Error", new TranslatableComponent("vivecraft.messages.rendersetupfailed", renderConfigException.error + "\nVR provider: " + ClientDataHolderVR.getInstance().vr.getName()))); + VRState.destroyVR(true); + return; + } catch (Exception exception2) { + exception2.printStackTrace(); + } + + RenderPassManager.setGUIRenderPass(); + this.profiler.push("VR Poll/VSync"); + ClientDataHolderVR.getInstance().vr.poll(ClientDataHolderVR.getInstance().frameIndex); + this.profiler.pop(); + ClientDataHolderVR.getInstance().vrPlayer.postPoll(); + + this.profiler.push("tick"); + + // reset camera position, if there is on, since it only gets set at the start of rendering, and the last renderpass can be anywhere + if (gameRenderer != null && gameRenderer.getMainCamera() != null) { + if (gameRenderer.getMainCamera().getEntity() != null) { + gameRenderer.getMainCamera().setPosition(gameRenderer.getMainCamera().getEntity().getEyePosition()); + } else if (player != null){ + gameRenderer.getMainCamera().setPosition(player.getEyePosition()); + } + } + + for (int j = 0; j < Math.min(10, i); ++j) { + this.profiler.incrementCounter("clientTick"); + ClientDataHolderVR.getInstance().vrPlayer.preTick(); + this.tick(); + ClientDataHolderVR.getInstance().vrPlayer.postTick(); + } + + this.profiler.pop(); + } else { + RenderPassManager.setGUIRenderPass(); + this.profiler.push("VR Poll/VSync"); + ClientDataHolderVR.getInstance().vr.poll(ClientDataHolderVR.getInstance().frameIndex); + this.profiler.pop(); + ClientDataHolderVR.getInstance().vrPlayer.postPoll(); + } + } + + private void handleBadConfig(RenderConfigException renderconfigexception) { + // unbind the rendertarget, to draw directly to the screen + this.mainRenderTarget.unbindWrite(); + this.screen = null; + RenderSystem.viewport(0, 0, this.window.getScreenWidth(), this.window.getScreenHeight()); + + if (this.overlay != null) { + RenderSystem.clear(256, ON_OSX); + Matrix4f matrix4f = Matrix4f.orthographic( + 0, (float) (this.window.getScreenWidth() / this.window.getGuiScale()), + (float) (this.window.getScreenHeight() / this.window.getGuiScale()), 0, 1000.0F, 3000.0F); + RenderSystem.setProjectionMatrix(matrix4f); + PoseStack p = new PoseStack(); + p.translate(0, 0, -2000); + this.overlay.render(p, 0, 0, 0.0F); + } else { + if (MethodHolder.isKeyDown(GLFW.GLFW_KEY_Q)) { + System.out.println("Resetting VR status!"); + Path file = Xplat.getConfigPath("vivecraft-config.properties"); + + Properties properties = new Properties(); + try { + properties.load(Files.newInputStream(file)); + } catch (IOException e) { + } + + properties.setProperty("vrStatus", "false"); + try { + properties.store(Files.newOutputStream(file), "This file stores if VR should be enabled."); + } catch (IOException e) { + throw new RuntimeException(e); + } + Minecraft.getInstance().stop(); + } + this.notifyMirror( + LangHelper.get("vivecraft.messages.rendersetupfailed", renderconfigexception.error), true, + 10000); + this.drawNotifyMirror(); + + if (ClientDataHolderVR.getInstance().frameIndex % 300L == 0L) { + System.out.println(renderconfigexception.title + " " + renderconfigexception.error); + } + + try { + Thread.sleep(10L); + } catch (InterruptedException interruptedexception) { + } + } + + this.window.updateDisplay(); + } + + public void postRender() { + this.profiler.popPush("updateDisplay"); + this.window.updateDisplay(); + int k = this.getFramerateLimit(); + + this.window.setErrorSection("Post render"); + ++this.frames; + boolean bl3 = this.hasSingleplayerServer() + && (this.screen != null && this.screen.isPauseScreen() || this.overlay != null && this.overlay.isPauseScreen()) + && !this.singleplayerServer.isPublished(); + if (this.pause != bl3) { + if (this.pause) { + this.pausePartialTick = this.timer.partialTick; + } else { + this.timer.partialTick = this.pausePartialTick; + } + + this.pause = bl3; + } + + long n = Util.getNanos(); + long o = n - this.lastNanoTime; +// if (bl2) { +// this.savedCpuDuration = o; +// } + + this.frameTimer.logFrameDuration(o); + this.lastNanoTime = n; + this.profiler.push("fpsUpdate"); +// if (this.currentFrameProfile != null && this.currentFrameProfile.isDone()) { +// this.gpuUtilization = (double)this.currentFrameProfile.get() * 100.0 / (double)this.savedCpuDuration; +// } + + while(Util.getMillis() >= this.lastTime + 1000L) { + fps = this.frames; + this.fpsString = String.format( + "%d fps T: %s%s%s%s B: %d", + fps, + (double)this.options.framerateLimit == Option.FRAMERATE_LIMIT.getMaxValue() ? "inf" : this.options.framerateLimit, + this.options.enableVsync ? " vsync" : "", + this.options.graphicsMode, this.options.renderClouds == CloudStatus.OFF ? "" : (this.options.renderClouds == CloudStatus.FAST ? " fast-clouds" : " fancy-clouds"), + this.options.biomeBlendRadius + ); + this.lastTime += 1000L; + this.frames = 0; + } + + this.profiler.pop(); + } + + @Inject(at = @At("HEAD"), method = "resizeDisplay") + void restoreVanillaState(CallbackInfo ci) { + if (VRState.vrInitialized) { + // restore vanilla post chains before the resize, or it will resize the wrong ones + if (levelRenderer != null) { + ((LevelRendererExtension) levelRenderer).restoreVanillaPostChains(); + } + RenderPassManager.setVanillaRenderPass(); + } + } + + public void drawProfiler() { + if (this.fpsPieResults != null) { + this.profiler.push("fpsPie"); + this.renderFpsMeter(new PoseStack(), this.fpsPieResults); + this.profiler.pop(); + } + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;swing(Lnet/minecraft/world/InteractionHand;)V"), method = "continueAttack(Z)V") + public void swingArmContinueAttack(LocalPlayer player, InteractionHand hand) { + if (VRState.vrRunning) { + ((PlayerExtension) player).swingArm(InteractionHand.MAIN_HAND, VRFirstPersonArmSwing.Attack); + } else { + player.swing(hand); + } + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/MultiPlayerGameMode;stopDestroyBlock()V"), method = "continueAttack(Z)V") + public void destroyseated(MultiPlayerGameMode gm) { + if (!VRState.vrRunning || ClientDataHolderVR.getInstance().vrSettings.seated || lastClick) { + this.gameMode.stopDestroyBlock(); + lastClick = false; + } + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/MultiPlayerGameMode;isDestroying()Z"), method = "startUseItem()V") + public boolean seatedCheck(MultiPlayerGameMode gameMode) { + return gameMode.isDestroying() && (!VRState.vrRunning || ClientDataHolderVR.getInstance().vrSettings.seated); + } + + @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;rightClickDelay:I", shift = Shift.AFTER, opcode = Opcodes.PUTFIELD), method = "startUseItem()V") + public void breakDelay(CallbackInfo info) { + if (VRState.vrRunning) { + if (ClientDataHolderVR.getInstance().vrSettings.rightclickDelay == VRSettings.RightClickDelay.VANILLA) + this.rightClickDelay = 4; + else if (ClientDataHolderVR.getInstance().vrSettings.rightclickDelay == VRSettings.RightClickDelay.SLOW) + this.rightClickDelay = 6; + else if (ClientDataHolderVR.getInstance().vrSettings.rightclickDelay == VRSettings.RightClickDelay.SLOWER) + this.rightClickDelay = 8; + else if (ClientDataHolderVR.getInstance().vrSettings.rightclickDelay == VRSettings.RightClickDelay.SLOWEST) + this.rightClickDelay = 10; + } + } + + @ModifyVariable(at = @At(value = "STORE", ordinal = 0), method = "startUseItem") + public ItemStack handItemStore(ItemStack itemInHand) { + this.itemInHand = itemInHand; + return itemInHand; + } + + @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;hitResult:Lnet/minecraft/world/phys/HitResult;", ordinal = 1), method = "startUseItem", locals = LocalCapture.CAPTURE_FAILHARD) + public void activeHandSend(CallbackInfo ci, InteractionHand[] var1, int var2, int var3, InteractionHand interactionHand) { + if (VRState.vrRunning && (ClientDataHolderVR.getInstance().vrSettings.seated || !TelescopeTracker.isTelescope(itemInHand))) { + ClientNetworking.sendActiveHand((byte) interactionHand.ordinal()); + } + } + + @Redirect(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;hitResult:Lnet/minecraft/world/phys/HitResult;", ordinal = 1), method = "startUseItem") + public HitResult activeHand2(Minecraft instance) { + if (!VRState.vrRunning || ClientDataHolderVR.getInstance().vrSettings.seated || !TelescopeTracker.isTelescope(itemInHand)) { + return instance.hitResult; + } + return null; + } + + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;swing(Lnet/minecraft/world/InteractionHand;)V"), method = "startUseItem") + public void swingUse(LocalPlayer instance, InteractionHand interactionHand) { + if (VRState.vrRunning) { + ((PlayerExtension) instance).swingArm(interactionHand, VRFirstPersonArmSwing.Use); + } else { + instance.swing(interactionHand); + } + } + + @Inject(at = @At("HEAD"), method = "tick()V") + public void vrTick(CallbackInfo info) { + ++ClientDataHolderVR.getInstance().tickCounter; + + // general chat notifications + if (this.level != null) { + if (!ClientDataHolderVR.getInstance().showedUpdateNotification && UpdateChecker.hasUpdate && (ClientDataHolderVR.getInstance().vrSettings.alwaysShowUpdates || !UpdateChecker.newestVersion.equals(ClientDataHolderVR.getInstance().vrSettings.lastUpdate))) { + ClientDataHolderVR.getInstance().vrSettings.lastUpdate = UpdateChecker.newestVersion; + ClientDataHolderVR.getInstance().vrSettings.saveOptions(); + ClientDataHolderVR.getInstance().showedUpdateNotification = true; + this.gui.getChat().addMessage(new TranslatableComponent("vivecraft.messages.updateAvailable", new TextComponent(UpdateChecker.newestVersion).withStyle(ChatFormatting.ITALIC, ChatFormatting.GREEN)) + .withStyle(style -> style + .withClickEvent(new VivecraftClickEvent(VivecraftClickEvent.VivecraftAction.OPEN_SCREEN, new UpdateScreen())) + .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TranslatableComponent("vivecraft.messages.click"))))); + } + } + + // VR enabled only chat notifications + if (VRState.vrInitialized && this.level != null && ClientDataHolderVR.getInstance().vrPlayer != null) { + if (ClientDataHolderVR.getInstance().vrPlayer.chatWarningTimer >= 0 && --ClientDataHolderVR.getInstance().vrPlayer.chatWarningTimer == 0) { + boolean showMessage = !ClientNetworking.displayedChatWarning || ClientDataHolderVR.getInstance().vrSettings.showServerPluginMissingMessageAlways; + + if (ClientDataHolderVR.getInstance().vrPlayer.teleportWarning) { + if(showMessage) + this.gui.getChat().addMessage(new TranslatableComponent("vivecraft.messages.noserverplugin")); + ClientDataHolderVR.getInstance().vrPlayer.teleportWarning = false; + + // allow vr switching on vanilla server + ClientNetworking.serverAllowsVrSwitching = true; + } + if (ClientDataHolderVR.getInstance().vrPlayer.vrSwitchWarning) { + if (showMessage) + this.gui.getChat().addMessage(new TranslatableComponent("vivecraft.messages.novrhotswitchinglegacy")); + ClientDataHolderVR.getInstance().vrPlayer.vrSwitchWarning = false; + } + ClientNetworking.displayedChatWarning = true; + } + } + + if (VRState.vrRunning) { + + if (ClientDataHolderVR.getInstance().menuWorldRenderer.isReady()) { + // update textures in the menu + if (this.level == null) { + this.textureManager.tick(); + } + ClientDataHolderVR.getInstance().menuWorldRenderer.tick(); + } + + this.profiler.push("vrProcessInputs"); + ClientDataHolderVR.getInstance().vr.processInputs(); + ClientDataHolderVR.getInstance().vr.processBindings(); + + this.profiler.popPush("vrInputActionsTick"); + + for (VRInputAction vrinputaction : ClientDataHolderVR.getInstance().vr.getInputActions()) { + vrinputaction.tick(); + } + + if (ClientDataHolderVR.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY || ClientDataHolderVR.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON) { + VRHotkeys.handleMRKeys(); + } + + if (this.level != null && ClientDataHolderVR.getInstance().vrPlayer != null) { + ClientDataHolderVR.getInstance().vrPlayer.updateFreeMove(); + } + this.profiler.pop(); + } + + this.profiler.push("vrPlayers"); + + VRPlayersClient.getInstance().tick(); + + if (VivecraftVRMod.INSTANCE.keyExportWorld.consumeClick() && level != null && player != null) + { + Throwable error = null; + try + { + final BlockPos blockpos = player.blockPosition(); + int size = 320; + int offset = size/2; + File file1 = new File(MenuWorldDownloader.customWorldFolder); + file1.mkdirs(); + int i = 0; + + while (true) + { + final File file2 = new File(file1, "world" + i + ".mmw"); + + if (!file2.exists()) + { + VRSettings.logger.info("Exporting world... area size: " + size); + VRSettings.logger.info("Saving to " + file2.getAbsolutePath()); + + if (isLocalServer()) + { + final Level level = getSingleplayerServer().getLevel(player.level.dimension()); + CompletableFuture completablefuture = getSingleplayerServer().submit(() -> { + try + { + MenuWorldExporter.saveAreaToFile(level, blockpos.getX() - offset, blockpos.getZ() - offset, size, size, blockpos.getY(), file2); + } + catch (Throwable throwable) + { + throwable.printStackTrace(); + return throwable; + } + return null; + }); + + error = completablefuture.get(); + } + else + { + MenuWorldExporter.saveAreaToFile(level, blockpos.getX() - offset, blockpos.getZ() - offset, size, size, blockpos.getY(), file2); + gui.getChat().addMessage(new TranslatableComponent("vivecraft.messages.menuworldexportclientwarning")); + } + + if (error == null) { + gui.getChat().addMessage(new TranslatableComponent("vivecraft.messages.menuworldexportcomplete.1", size)); + gui.getChat().addMessage(new TranslatableComponent("vivecraft.messages.menuworldexportcomplete.2", file2.getAbsolutePath())); + } + break; + } + + ++i; + } + } + catch (Throwable throwable) + { + throwable.printStackTrace(); + error = throwable; + } finally { + if (error != null) { + gui.getChat().addMessage(new TranslatableComponent("vivecraft.messages.menuworldexporterror", error.getMessage())); + } + } + } + + this.profiler.pop(); + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;pick(F)V"), method = "tick") + public void removePick(GameRenderer instance, float f) { + if (!VRState.vrRunning) { + instance.pick(f); + } + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Options;setCameraType(Lnet/minecraft/client/CameraType;)V"), method = "handleKeybinds") + public void vrMirrorOption(Options instance, CameraType cameraType) { + if (VRState.vrRunning) { + ClientDataHolderVR.getInstance().vrSettings.setOptionValue(VRSettings.VrOptions.MIRROR_DISPLAY); + this.notifyMirror(ClientDataHolderVR.getInstance().vrSettings.getButtonDisplayString(VRSettings.VrOptions.MIRROR_DISPLAY), false, 3000); + // this.levelRenderer.needsUpdate(); + } else { + instance.setCameraType(cameraType); + } + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;checkEntityPostEffect(Lnet/minecraft/world/entity/Entity;)V"), method = "handleKeybinds") + public void noPosEffect(GameRenderer instance, Entity entity) { + if (!VRState.vrRunning) { + instance.checkEntityPostEffect(entity); + } + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;swing(Lnet/minecraft/world/InteractionHand;)V"), method = "handleKeybinds()V") + public void swingArmhandleKeybinds(LocalPlayer instance, InteractionHand interactionHand) { + if (VRState.vrRunning) { + ((PlayerExtension) player).swingArm(InteractionHand.MAIN_HAND, VRFirstPersonArmSwing.Attack); + } else { + instance.swing(interactionHand); + } + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/KeyMapping;isDown()Z", ordinal = 2), method = "handleKeybinds") + public boolean vrKeyuse(KeyMapping instance) { + return !(!instance.isDown() && (!VRState.vrRunning || ((!ClientDataHolderVR.getInstance().bowTracker.isActive(this.player) || ClientDataHolderVR.getInstance().vrSettings.seated) && !ClientDataHolderVR.getInstance().autoFood.isEating()))); + } + + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/MultiPlayerGameMode;releaseUsingItem(Lnet/minecraft/world/entity/player/Player;)V", shift = Shift.BEFORE), method = "handleKeybinds") + public void activeHand(CallbackInfo ci) { + if (VRState.vrRunning) { + ClientNetworking.sendActiveHand((byte) this.player.getUsedItemHand().ordinal()); + } + } + + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;startAttack()Z"), method = "handleKeybinds") + public void attackDown(CallbackInfo ci) { + // detect, if the attack buttun was used to testroy blocks + this.lastClick = true; + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MouseHandler;isMouseGrabbed()Z"), method = "handleKeybinds") + public boolean vrAlwaysGrapped(MouseHandler instance) { + return VRState.vrRunning || instance.isMouseGrabbed(); + } + + @Inject(at = @At("HEAD"), method = "setLevel(Lnet/minecraft/client/multiplayer/ClientLevel;)V") + public void roomScale(ClientLevel pLevelClient, CallbackInfo info) { + if (VRState.vrRunning) { + ClientDataHolderVR.getInstance().vrPlayer.setRoomOrigin(0.0D, 0.0D, 0.0D, true); + } + } + + @Inject(at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;", shift = At.Shift.BEFORE, ordinal = 0), method = "setScreen(Lnet/minecraft/client/gui/screens/Screen;)V") + public void onOpenScreen(Screen pGuiScreen, CallbackInfo info) { + GuiHandler.onScreenChanged(this.screen, pGuiScreen, true); + } + + @Inject(at = @At("TAIL"), method = "setOverlay") + public void onOverlaySet(Overlay overlay, CallbackInfo ci) { + GuiHandler.onScreenChanged(this.screen, this.screen, true); + } + + @Inject(method = "setScreen", at = @At("HEAD")) + public void onCloseScreen(Screen screen, CallbackInfo info) { + if (screen == null) { + GuiHandler.guiAppearOverBlockActive = false; + } + } + + private void drawNotifyMirror() { + if (System.currentTimeMillis() < this.mirroNotifyStart + this.mirroNotifyLen) { + RenderSystem.viewport(0, 0, this.window.getScreenWidth(), this.window.getScreenHeight()); + Matrix4f matrix4f = Matrix4f.orthographic(0.0F, (float) this.window.getScreenWidth(), + (float) this.window.getScreenHeight(), 0.0F, 1000.0F, 3000.0F); + RenderSystem.setProjectionMatrix(matrix4f); + RenderSystem.getModelViewStack().pushPose(); + RenderSystem.getModelViewStack().setIdentity(); + RenderSystem.getModelViewStack().translate(0, 0, -2000); + RenderSystem.applyModelViewMatrix(); + PoseStack p = new PoseStack(); + p.scale(3, 3, 3); + RenderSystem.clear(256, ON_OSX); + + if (this.mirrorNotifyClear) { + RenderSystem.clearColor(0, 0, 0, 0); + RenderSystem.clear(16384, ON_OSX); + } + + int i = this.window.getScreenWidth() / 22; + ArrayList arraylist = new ArrayList<>(); + + if (this.mirrorNotifyText != null) { + Utils.wordWrap(this.mirrorNotifyText, i, arraylist); + } + + int j = 1; + int k = 12; + + for (String s : arraylist) { + this.font.draw(p, s, 1.0F, (float) j, 16777215); + j += 12; + } + RenderSystem.getModelViewStack().popPose(); + } + } + + @Override + public void notifyMirror(String text, boolean clear, int lengthMs) { + this.mirroNotifyStart = System.currentTimeMillis(); + this.mirroNotifyLen = (long) lengthMs; + this.mirrorNotifyText = text; + this.mirrorNotifyClear = clear; + } + + private void checkGLError(String string) { + // TODO optifine + if (GlStateManager._getError() != 0) { + System.err.println(string); + } + + } + + private void renderSingleView(RenderPass eye, float nano, boolean renderworld) { + RenderSystem.clearColor(0.0F, 0.0F, 0.0F, 1.0F); + RenderSystem.clear(16384, ON_OSX); + RenderSystem.enableTexture(); + RenderSystem.enableDepthTest(); + this.profiler.push("updateCameraAndRender"); + this.gameRenderer.render(nano, currentNanoTime, renderworld); + this.profiler.pop(); + this.checkGLError("post game render " + eye.name()); + + if (ClientDataHolderVR.getInstance().currentPass == RenderPass.LEFT + || ClientDataHolderVR.getInstance().currentPass == RenderPass.RIGHT) { + this.profiler.push("postprocesseye"); + RenderTarget rendertarget = this.mainRenderTarget; + + if (ClientDataHolderVR.getInstance().vrSettings.useFsaa) { + RenderSystem.clearColor(RenderSystem.getShaderFogColor()[0], RenderSystem.getShaderFogColor()[1], RenderSystem.getShaderFogColor()[2], RenderSystem.getShaderFogColor()[3]); + if (eye == RenderPass.LEFT) { + ClientDataHolderVR.getInstance().vrRenderer.framebufferEye0.bindWrite(true); + } else { + ClientDataHolderVR.getInstance().vrRenderer.framebufferEye1.bindWrite(true); + } + RenderSystem.clear(16384, ON_OSX); + this.profiler.push("fsaa"); + // DataHolder.getInstance().vrRenderer.doFSAA(Config.isShaders()); TODO + ClientDataHolderVR.getInstance().vrRenderer.doFSAA(false); + rendertarget = ClientDataHolderVR.getInstance().vrRenderer.fsaaLastPassResultFBO; + this.checkGLError("fsaa " + eye.name()); + this.profiler.pop(); + } + + if (eye == RenderPass.LEFT) { + ClientDataHolderVR.getInstance().vrRenderer.framebufferEye0.bindWrite(true); + } else { + ClientDataHolderVR.getInstance().vrRenderer.framebufferEye1.bindWrite(true); + } + + if (ClientDataHolderVR.getInstance().vrSettings.useFOVReduction + && ClientDataHolderVR.getInstance().vrPlayer.getFreeMove()) { + if (this.player != null && (Math.abs(this.player.zza) > 0.0F || Math.abs(this.player.xxa) > 0.0F)) { + this.fov = (float) ((double) this.fov - 0.05D); + + if (this.fov < ClientDataHolderVR.getInstance().vrSettings.fovReductionMin) { + this.fov = ClientDataHolderVR.getInstance().vrSettings.fovReductionMin; + } + } else { + this.fov = (float) ((double) this.fov + 0.01D); + + if ((double) this.fov > 0.8D) { + this.fov = 0.8F; + } + } + } else { + this.fov = 1.0F; + } + + VRShaders._FOVReduction_OffsetUniform.set( + ClientDataHolderVR.getInstance().vrSettings.fovRedutioncOffset); + float red = 0.0F; + float black = 0.0F; + float blue = 0.0F; + float time = (float) Util.getMillis() / 1000.0F; + + if (this.player != null && this.level != null) { + if (((GameRendererExtension) this.gameRenderer) + .wasInWater() != ((GameRendererExtension) this.gameRenderer).isInWater()) { + ClientDataHolderVR.getInstance().watereffect = 2.3F; + } else { + if (((GameRendererExtension) this.gameRenderer).isInWater()) { + ClientDataHolderVR.getInstance().watereffect -= 0.008333334F; + } else { + ClientDataHolderVR.getInstance().watereffect -= 0.016666668F; + } + + if (ClientDataHolderVR.getInstance().watereffect < 0.0F) { + ClientDataHolderVR.getInstance().watereffect = 0.0F; + } + } + + ((GameRendererExtension) this.gameRenderer) + .setWasInWater(((GameRendererExtension) this.gameRenderer).isInWater()); + + if (Xplat + .isModLoaded("iris") || Xplat.isModLoaded("oculus")) { + if (!IrisHelper.hasWaterEffect()) { + ClientDataHolderVR.getInstance().watereffect = 0.0F; + } + } + + if (((GameRendererExtension) this.gameRenderer).isInPortal()) { + ClientDataHolderVR.getInstance().portaleffect = 1.0F; + } else { + ClientDataHolderVR.getInstance().portaleffect -= 0.016666668F; + + if (ClientDataHolderVR.getInstance().portaleffect < 0.0F) { + ClientDataHolderVR.getInstance().portaleffect = 0.0F; + } + } + + ItemStack itemstack = this.player.getInventory().getArmor(3); + + if (itemstack.getItem() == Blocks.CARVED_PUMPKIN.asItem() + && (!itemstack.hasTag() || itemstack.getTag().getInt("CustomModelData") == 0)) { + ClientDataHolderVR.getInstance().pumpkineffect = 1.0F; + } else { + ClientDataHolderVR.getInstance().pumpkineffect = 0.0F; + } + + float hurtTimer = (float) this.player.hurtTime - nano; + float healthpercent = 1.0F - this.player.getHealth() / this.player.getMaxHealth(); + healthpercent = (healthpercent - 0.5F) * 0.75F; + + if (hurtTimer > 0.0F) { // hurt flash + hurtTimer = hurtTimer / (float) this.player.hurtDuration; + hurtTimer = healthpercent + + Mth.sin(hurtTimer * hurtTimer * hurtTimer * hurtTimer * (float) Math.PI) * 0.5F; + red = hurtTimer; + } else if (ClientDataHolderVR.getInstance().vrSettings.low_health_indicator) { // red due to low health + red = (float) ((double) healthpercent + * Math.abs(Math.sin((double) (2.5F * time) / ((double) (1.0F - healthpercent) + 0.1D)))); + + if (this.player.isCreative()) { + red = 0.0F; + } + } + + float freeze = this.player.getPercentFrozen(); + if (freeze > 0) { + blue = red; + blue = Math.max(freeze / 2, blue); + red = 0; + } + + if (this.player.isSleeping() && (double) black < 0.8D) { + black = 0.5F + 0.3F * this.player.getSleepTimer() * 0.01F; + } + + if (ClientDataHolderVR.getInstance().vr.isWalkingAbout && (double) black < 0.8D) { + black = 0.5F; + } + } else { + ClientDataHolderVR.getInstance().watereffect = 0.0F; + ClientDataHolderVR.getInstance().portaleffect = 0.0F; + ClientDataHolderVR.getInstance().pumpkineffect = 0.0F; + } + + if (ClientDataHolderVR.getInstance().pumpkineffect > 0.0F) { + VRShaders._FOVReduction_RadiusUniform.set(0.3F); + VRShaders._FOVReduction_BorderUniform.set(0.0F); + } else { + VRShaders._FOVReduction_RadiusUniform.set(this.fov); + VRShaders._FOVReduction_BorderUniform.set(0.06F); + } + + VRShaders._Overlay_HealthAlpha.set(red); + VRShaders._Overlay_FreezeAlpha.set(blue); + VRShaders._Overlay_BlackAlpha.set(black); + VRShaders._Overlay_time.set(time); + VRShaders._Overlay_waterAmplitude.set(ClientDataHolderVR.getInstance().watereffect); + VRShaders._Overlay_portalAmplitutde.set(ClientDataHolderVR.getInstance().portaleffect); + VRShaders._Overlay_pumpkinAmplitutde.set( + ClientDataHolderVR.getInstance().pumpkineffect); + RenderPass renderpass = ClientDataHolderVR.getInstance().currentPass; + + VRShaders._Overlay_eye.set( + ClientDataHolderVR.getInstance().currentPass == RenderPass.LEFT ? 1 : -1); + ((RenderTargetExtension) rendertarget).blitFovReduction(VRShaders.fovReductionShader, ClientDataHolderVR.getInstance().vrRenderer.framebufferEye0.viewWidth, + ClientDataHolderVR.getInstance().vrRenderer.framebufferEye0.viewHeight); + GlStateManager._glUseProgram(0); + this.checkGLError("post overlay" + eye); + this.profiler.pop(); + } + + if (ClientDataHolderVR.getInstance().currentPass == RenderPass.CAMERA) { + this.profiler.push("cameracopy"); + ClientDataHolderVR.getInstance().vrRenderer.cameraFramebuffer.bindWrite(true); + RenderSystem.clearColor(0.0F, 0.0F, 0.0F, 1.0F); + RenderSystem.clear(16640, ON_OSX); + ((RenderTargetExtension) ClientDataHolderVR.getInstance().vrRenderer.cameraRenderFramebuffer).blitToScreen(0, + ClientDataHolderVR.getInstance().vrRenderer.cameraFramebuffer.viewWidth, + ClientDataHolderVR.getInstance().vrRenderer.cameraFramebuffer.viewHeight, 0, true, 0.0F, 0.0F, false); + this.profiler.pop(); + } + } + + private void copyToMirror() { + // TODO: fix mixed reality... again + if (ClientDataHolderVR.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.OFF + && ClientDataHolderVR.getInstance().vr.isHMDTracking()) { + this.notifyMirror("Mirror is OFF", true, 1000); + } else if (ClientDataHolderVR.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY) { + if (VRShaders.depthMaskShader != null) { + this.doMixedRealityMirror(); + } else { + this.notifyMirror("Shader compile failed, see log", true, 10000); + } + } else if (ClientDataHolderVR.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.DUAL) { + RenderTarget rendertarget = ClientDataHolderVR.getInstance().vrRenderer.framebufferEye0; + RenderTarget rendertarget1 = ClientDataHolderVR.getInstance().vrRenderer.framebufferEye1; + + if (rendertarget != null) { + ((RenderTargetExtension) rendertarget).blitToScreen(0, this.window.getScreenWidth() / 2, + this.window.getScreenHeight(), 0, true, 0.0F, 0.0F, false); + } + + if (rendertarget1 != null) { + ((RenderTargetExtension) rendertarget1).blitToScreen(this.window.getScreenWidth() / 2, + this.window.getScreenWidth() / 2, this.window.getScreenHeight(), 0, true, 0.0F, 0.0F, false); + } + } else { + float xcrop = 0.0F; + float ycrop = 0.0F; + boolean ar = false; + RenderTarget source = ClientDataHolderVR.getInstance().vrRenderer.framebufferEye0; + + if (ClientDataHolderVR.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.FIRST_PERSON) { + source = ClientDataHolderVR.getInstance().vrRenderer.framebufferUndistorted; + } else if (ClientDataHolderVR.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON) { + source = ClientDataHolderVR.getInstance().vrRenderer.framebufferMR; + } else if (ClientDataHolderVR.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.GUI) { + source = GuiHandler.guiFramebuffer; + } else if (ClientDataHolderVR.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.SINGLE + || ClientDataHolderVR.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.OFF) { + if (!ClientDataHolderVR.getInstance().vrSettings.displayMirrorLeftEye) + source = ClientDataHolderVR.getInstance().vrRenderer.framebufferEye1; + } else if (ClientDataHolderVR.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.CROPPED) { + if (!ClientDataHolderVR.getInstance().vrSettings.displayMirrorLeftEye) + source = ClientDataHolderVR.getInstance().vrRenderer.framebufferEye1; + + xcrop = 0.15F; + ycrop = 0.15F; + ar = true; + } + // Debug + // source = GuiHandler.guiFramebuffer; + // source = DataHolder.getInstance().vrRenderer.telescopeFramebufferR; + // + if (source != null) { + ((RenderTargetExtension) source).blitToScreen(0, this.window.getScreenWidth(), + this.window.getScreenHeight(), 0, true, xcrop, ycrop, ar); + } + } + } + + private void doMixedRealityMirror() { +// boolean flag = Config.isShaders(); + boolean flag = false; + boolean flag1 = ClientDataHolderVR.getInstance().vrSettings.mixedRealityUnityLike + && ClientDataHolderVR.getInstance().vrSettings.mixedRealityAlphaMask; + + if (!flag1) { + RenderSystem.clearColor( + (float) ClientDataHolderVR.getInstance().vrSettings.mixedRealityKeyColor.getRed() / 255.0F, + (float) ClientDataHolderVR.getInstance().vrSettings.mixedRealityKeyColor.getGreen() / 255.0F, + (float) ClientDataHolderVR.getInstance().vrSettings.mixedRealityKeyColor.getBlue() / 255.0F, 1.0F); + } else { + RenderSystem.clearColor(0.0F, 0.0F, 0.0F, 1.0F); + } + + RenderSystem.clear(16640, ON_OSX); + Vec3 vec3 = ClientDataHolderVR.getInstance().vrPlayer.vrdata_room_pre.getHeadPivot() + .subtract(ClientDataHolderVR.getInstance().vrPlayer.vrdata_room_pre.getEye(RenderPass.THIRD).getPosition()); + Matrix4f matrix4f = ClientDataHolderVR.getInstance().vrPlayer.vrdata_room_pre.getEye(RenderPass.THIRD) + .getMatrix().transposed().toMCMatrix(); + Vector3 vector3 = ClientDataHolderVR.getInstance().vrPlayer.vrdata_room_pre.getEye(RenderPass.THIRD).getMatrix() + .transform(Vector3.forward()); + VRShaders._DepthMask_projectionMatrix.set(((GameRendererExtension) this.gameRenderer).getThirdPassProjectionMatrix()); + VRShaders._DepthMask_viewMatrix.set(matrix4f); + VRShaders._DepthMask_hmdViewPosition.set((float) vec3.x, (float) vec3.y, + (float) vec3.z); + VRShaders._DepthMask_hmdPlaneNormal.set(-vector3.getX(), 0.0F, -vector3.getZ()); + VRShaders._DepthMask_keyColorUniform.set( + (float) ClientDataHolderVR.getInstance().vrSettings.mixedRealityKeyColor.getRed() / 255.0F, + (float) ClientDataHolderVR.getInstance().vrSettings.mixedRealityKeyColor.getGreen() / 255.0F, + (float) ClientDataHolderVR.getInstance().vrSettings.mixedRealityKeyColor.getBlue() / 255.0F); + VRShaders._DepthMask_alphaModeUniform.set(flag1 ? 1 : 0); + RenderSystem.activeTexture(33985); + RenderSystem.setShaderTexture(0, ClientDataHolderVR.getInstance().vrRenderer.framebufferMR.getColorTextureId()); + RenderSystem.activeTexture(33986); + +// if (flag && Shaders.dfb != null) { TODO +// GlStateManager._bindTexture(Shaders.dfb.depthTextures.get(0)); +// } else { + RenderSystem.setShaderTexture(1, ClientDataHolderVR.getInstance().vrRenderer.framebufferMR.getDepthTextureId()); + +// } + + RenderSystem.activeTexture(33984); + + for (int i = 0; i < (flag1 ? 3 : 2); ++i) { + int j = this.window.getScreenWidth() / 2; + int k = this.window.getScreenHeight(); + int l = this.window.getScreenWidth() / 2 * i; + int i1 = 0; + + if (ClientDataHolderVR.getInstance().vrSettings.mixedRealityUnityLike) { + j = this.window.getScreenWidth() / 2; + k = this.window.getScreenHeight() / 2; + + if (ClientDataHolderVR.getInstance().vrSettings.mixedRealityAlphaMask && i == 2) { + l = this.window.getScreenWidth() / 2; + i1 = this.window.getScreenHeight() / 2; + } else { + l = 0; + i1 = this.window.getScreenHeight() / 2 * (1 - i); + } + } + + VRShaders._DepthMask_resolutionUniform.set((float) j, (float) k); + VRShaders._DepthMask_positionUniform.set((float) l, (float) i1); + VRShaders._DepthMask_passUniform.set(i); + ((RenderTargetExtension) ClientDataHolderVR.getInstance().vrRenderer.framebufferMR).blitToScreen(VRShaders.depthMaskShader, l, j, k, i1, true, + 0.0F, 0.0F, false); + } + + GlStateManager._glUseProgram(0); + + if (ClientDataHolderVR.getInstance().vrSettings.mixedRealityUnityLike) { + if (ClientDataHolderVR.getInstance().vrSettings.mixedRealityUndistorted) { + ((RenderTargetExtension) ClientDataHolderVR.getInstance().vrRenderer.framebufferUndistorted).blitToScreen( + this.window.getScreenWidth() / 2, this.window.getScreenWidth() / 2, + this.window.getScreenHeight() / 2, 0, true, 0.0F, 0.0F, false); + } else { + ((RenderTargetExtension) ClientDataHolderVR.getInstance().vrRenderer.framebufferEye0).blitToScreen( + this.window.getScreenWidth() / 2, this.window.getScreenWidth() / 2, + this.window.getScreenHeight() / 2, 0, true, 0.0F, 0.0F, false); + } + } + } + +} diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/MouseHandlerVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/MouseHandlerVRMixin.java new file mode 100644 index 000000000..92644cc7d --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/MouseHandlerVRMixin.java @@ -0,0 +1,87 @@ +package org.vivecraft.mixin.client_vr; + +import net.minecraft.client.player.LocalPlayer; +import org.vivecraft.client_vr.ClientDataHolderVR; +import net.minecraft.client.Minecraft; +import net.minecraft.client.MouseHandler; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.provider.MCVR; + +@Mixin(MouseHandler.class) +public class MouseHandlerVRMixin { + + @Shadow private boolean mouseGrabbed; + @Final + @Shadow + private Minecraft minecraft; + + // TODO, this seems unnecessary, and wrong + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;mouseScrolled(DDD)Z", shift = At.Shift.BEFORE), method = "onScroll", cancellable = true) + public void cancelScroll(long g, double h, double f, CallbackInfo ci) { + if (this.minecraft.screen.mouseScrolled(g, h, f)) { + ci.cancel(); + } + } + + @Redirect(method = "onPress", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;isSpectator()Z")) + private boolean checkNull(LocalPlayer instance) { + return instance != null && instance.isSpectator(); + } + + + @Inject(at = @At("HEAD"), method = "turnPlayer", cancellable = true) + public void noTurnStanding(CallbackInfo ci) { + if (!VRState.vrRunning) { + return; + } + + if (!ClientDataHolderVR.getInstance().vrSettings.seated) { + // call the tutorial before canceling + // head movement + // this.minecraft.getTutorial().onMouse(1.0 - MCVR.get().hmdHistory.averagePosition(0.2).subtract(MCVR.get().hmdPivotHistory.averagePosition(0.2)).normalize().dot(MCVR.get().hmdHistory.averagePosition(1.0).subtract(MCVR.get().hmdPivotHistory.averagePosition(1.0)).normalize()),0); + // controller movement + int mainController = ClientDataHolderVR.getInstance().vrSettings.reverseHands ? 1 : 0; + this.minecraft.getTutorial().onMouse(1.0 - MCVR.get().controllerForwardHistory[mainController].averagePosition(0.2).normalize().dot(MCVR.get().controllerForwardHistory[mainController].averagePosition(1.0).normalize()),0); + ci.cancel(); + } + } + + // cancel after tutorial call + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/tutorial/Tutorial;onMouse(DD)V", shift = At.Shift.AFTER), method = "turnPlayer", cancellable = true) + public void noTurnSeated(CallbackInfo ci) { + if (!VRState.vrRunning) { + return; + } + + ci.cancel(); + } + + @Inject(at = @At("HEAD"), method = "grabMouse", cancellable = true) + public void seated(CallbackInfo ci) { + if (!VRState.vrRunning) { + return; + } + + if (!ClientDataHolderVR.getInstance().vrSettings.seated) { + this.mouseGrabbed = true; + ci.cancel(); + } + } + + @Inject(at = @At(value = "HEAD"), method = "releaseMouse", cancellable = true) + public void grabMouse(CallbackInfo ci) { + if (!VRState.vrRunning) { + return; + } + + if (!ClientDataHolderVR.getInstance().vrSettings.seated) { + this.mouseGrabbed = false; + ci.cancel(); + } + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client/OptionsVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/OptionsVRMixin.java similarity index 76% rename from common/src/main/java/org/vivecraft/mixin/client/OptionsVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/OptionsVRMixin.java index 136979377..2a1a5e8e5 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/OptionsVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/OptionsVRMixin.java @@ -1,12 +1,12 @@ -package org.vivecraft.mixin.client; +package org.vivecraft.mixin.client_vr; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.vivecraft.ClientDataHolder; import net.minecraft.client.KeyMapping; import net.minecraft.client.Options; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.vivecraft.client.VivecraftVRMod; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; @Mixin(Options.class) public abstract class OptionsVRMixin { @@ -15,7 +15,8 @@ public abstract class OptionsVRMixin { @Redirect(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Options;load()V")) void processOptionsMixin(Options instance) { - this.keyMappings = ClientDataHolder.getInstance().vr.initializeBindings(this.keyMappings); + this.keyMappings = VivecraftVRMod.INSTANCE.initializeBindings(this.keyMappings); instance.load(); } + } diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/audio/LibraryVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/blaze3d/audio/LibraryVRMixin.java similarity index 85% rename from common/src/main/java/org/vivecraft/mixin/blaze3d/audio/LibraryVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/blaze3d/audio/LibraryVRMixin.java index a7ce3776e..4ba6a391c 100644 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/audio/LibraryVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/blaze3d/audio/LibraryVRMixin.java @@ -1,4 +1,4 @@ -package org.vivecraft.mixin.blaze3d.audio; +package org.vivecraft.mixin.client_vr.blaze3d.audio; import com.mojang.blaze3d.audio.Library; import org.lwjgl.BufferUtils; @@ -11,11 +11,13 @@ import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; -import org.vivecraft.ClientDataHolder; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRState; import java.nio.Buffer; import java.nio.IntBuffer; @@ -30,7 +32,8 @@ public class LibraryVRMixin { @Shadow private long currentDevice; - private static boolean checkALError(String string) { + @Unique + private boolean checkALError(String string) { int i = AL10.alGetError(); if (i != 0) { LOGGER.error("{}: {}", string, alErrorToString(i)); @@ -40,7 +43,8 @@ private static boolean checkALError(String string) { } } - private static String alErrorToString(int i) { + @Unique + private String alErrorToString(int i) { return switch (i) { case 40961 -> "Invalid name parameter."; case 40962 -> "Invalid enumerated parameter value."; @@ -53,7 +57,10 @@ private static String alErrorToString(int i) { @Inject(method = "init", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/audio/OpenAlUtil;checkALError(Ljava/lang/String;)Z", ordinal = 0, shift = At.Shift.AFTER), locals = LocalCapture.CAPTURE_FAILHARD) private void setHRTF(String string, CallbackInfo ci, ALCCapabilities aLCCapabilities, int i, int j, int k, ALCapabilities aLCapabilities) { - ClientDataHolder.hrtfList.clear(); + if (!VRState.vrRunning) { + return; + } + ClientDataHolderVR.hrtfList.clear(); if (aLCCapabilities.ALC_SOFT_HRTF) { int l = ALC10.alcGetInteger(this.currentDevice, 6548); @@ -63,11 +70,11 @@ private void setHRTF(String string, CallbackInfo ci, ALCCapabilities aLCCapabili for (int i1 = 0; i1 < l; i1++) { String s = Objects.requireNonNull(SOFTHRTF.alcGetStringiSOFT(this.currentDevice, 6549, i1)); - ClientDataHolder.hrtfList.add(s); + ClientDataHolderVR.hrtfList.add(s); LOGGER.info("{}: {}", i1, s); } - int k1 = ClientDataHolder.getInstance().vrSettings.hrtfSelection; + int k1 = ClientDataHolderVR.getInstance().vrSettings.hrtfSelection; int l1; if (k1 == -1) { @@ -79,11 +86,11 @@ private void setHRTF(String string, CallbackInfo ci, ALCCapabilities aLCCapabili IntBuffer intbuffer = BufferUtils.createIntBuffer(10).put(6546).put(l1); if (k1 != -1) { - if (k1 > 0 && k1 <= ClientDataHolder.hrtfList.size()) { - LOGGER.info("Using HRTF: {}", ClientDataHolder.hrtfList.get(k1 - 1)); + if (k1 > 0 && k1 <= ClientDataHolderVR.hrtfList.size()) { + LOGGER.info("Using HRTF: {}", ClientDataHolderVR.hrtfList.get(k1 - 1)); intbuffer.put(6550).put(k1 - 1); } else { - if (k1 > ClientDataHolder.hrtfList.size()) { + if (k1 > ClientDataHolderVR.hrtfList.size()) { LOGGER.warn("Invalid HRTF index: {}", k1); } diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/platform/GlStateManagerVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/blaze3d/platform/GlStateManagerVRMixin.java similarity index 93% rename from common/src/main/java/org/vivecraft/mixin/blaze3d/platform/GlStateManagerVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/blaze3d/platform/GlStateManagerVRMixin.java index 7d1d2044d..e8b05e496 100644 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/platform/GlStateManagerVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/blaze3d/platform/GlStateManagerVRMixin.java @@ -1,11 +1,11 @@ -package org.vivecraft.mixin.blaze3d.platform; +package org.vivecraft.mixin.client_vr.blaze3d.platform; -import org.vivecraft.mixin.blaze3d.systems.RenderSystemAccessor; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.injection.*; +import org.vivecraft.mixin.client.blaze3d.RenderSystemAccessor; import static com.mojang.blaze3d.platform.GlStateManager.BLEND; import static com.mojang.blaze3d.platform.GlStateManager.glBlendFuncSeparate; diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/platform/InputConstantsVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/blaze3d/platform/InputConstantsVRMixin.java similarity index 67% rename from common/src/main/java/org/vivecraft/mixin/blaze3d/platform/InputConstantsVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/blaze3d/platform/InputConstantsVRMixin.java index e164f85d1..3ca52b072 100644 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/platform/InputConstantsVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/blaze3d/platform/InputConstantsVRMixin.java @@ -1,4 +1,4 @@ -package org.vivecraft.mixin.blaze3d.platform; +package org.vivecraft.mixin.client_vr.blaze3d.platform; import com.mojang.blaze3d.platform.InputConstants; import org.lwjgl.glfw.GLFW; @@ -6,13 +6,14 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.vivecraft.provider.InputSimulator; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.provider.InputSimulator; @Mixin(InputConstants.class) public class InputConstantsVRMixin { @Inject(at = @At("HEAD"), method = "isKeyDown", cancellable = true) private static void keyDown(long l, int i, CallbackInfoReturnable cir){ - cir.setReturnValue(GLFW.glfwGetKey(l,i) == 1 || InputSimulator.isKeyDown(i)) ; + cir.setReturnValue(GLFW.glfwGetKey(l,i) == 1 || (VRState.vrRunning && InputSimulator.isKeyDown(i))) ; } } diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/blaze3d/platform/WindowVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/blaze3d/platform/WindowVRMixin.java new file mode 100644 index 000000000..770689a1e --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/blaze3d/platform/WindowVRMixin.java @@ -0,0 +1,84 @@ +package org.vivecraft.mixin.client_vr.blaze3d.platform; + +import com.mojang.blaze3d.platform.Window; +import net.minecraft.client.Minecraft; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.gameplay.screenhandlers.GuiHandler; +import org.vivecraft.client_vr.VRState; + +@Mixin(Window.class) +public abstract class WindowVRMixin { + + // TODO: check if that actually works like that with sodium extras adaptive sync + @ModifyVariable(method = "updateVsync", ordinal = 0, at = @At("HEAD"), argsOnly = true) + boolean overwriteVsync(boolean v) { + if (VRState.vrRunning) { + return false; + } + return v; + } + + @Inject(method = {/*"getScreenWidth", */"getWidth"}, at = @At("HEAD"), cancellable = true) + void getVivecraftWidth(CallbackInfoReturnable cir) { + if (shouldOverrideSide()) { +// if (mcxrGameRenderer.reloadingDepth > 0) { +// var swapchain = MCXRPlayClient.OPEN_XR_STATE.session.swapchain; +// cir.setReturnValue(swapchain.getRenderWidth()); +// } else { + var mainTarget = Minecraft.getInstance().getMainRenderTarget(); + cir.setReturnValue(mainTarget.viewWidth); +// } + } + } + + @Inject(method = {/*"getScreenHeight",*/ "getHeight"}, at = @At("HEAD"), cancellable = true) + void getVivecraftHeight(CallbackInfoReturnable cir) { + if (shouldOverrideSide()) { +// if (mcxrGameRenderer.reloadingDepth > 0) { +// var swapchain = MCXRPlayClient.OPEN_XR_STATE.session.swapchain; +// cir.setReturnValue(swapchain.getRenderHeight()); +// } else { + var mainTarget = Minecraft.getInstance().getMainRenderTarget(); + cir.setReturnValue(mainTarget.viewHeight); +// } + } + } + + @Inject(method = "getGuiScaledHeight", at = @At("HEAD"), cancellable = true) + void getScaledHeight(CallbackInfoReturnable cir) { + if (shouldOverrideSide()) { + cir.setReturnValue(GuiHandler.scaledHeight); + } + } + + @Inject(method = "getGuiScaledWidth", at = @At("HEAD"), cancellable = true) + void getScaledWidth(CallbackInfoReturnable cir) { + if (shouldOverrideSide()) { + cir.setReturnValue(GuiHandler.scaledWidth); + } + } + + @Inject(method = "getGuiScale", at = @At("HEAD"), cancellable = true) + void getScaleFactor(CallbackInfoReturnable cir) { + if (shouldOverrideSide()) { + cir.setReturnValue((double) GuiHandler.guiScaleFactor); + } + } + + @Inject(method = "onResize", at = @At("HEAD")) + private void reinitFrameBuffers(long l, int i, int j, CallbackInfo ci){ + if (VRState.vrEnabled) { + ClientDataHolderVR.getInstance().vrRenderer.reinitFrameBuffers("Main Window Resized"); + } + } + + @Unique + private boolean shouldOverrideSide() { + //MCXR: return mcxrGameRenderer.overrideWindowSize || (mcxrGameRenderer.isXrMode() && mcxrGameRenderer.reloadingDepth > 0); + return VRState.vrRunning; + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/blaze3d/systems/RenderSystemVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/blaze3d/systems/RenderSystemVRMixin.java similarity index 93% rename from common/src/main/java/org/vivecraft/mixin/blaze3d/systems/RenderSystemVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/blaze3d/systems/RenderSystemVRMixin.java index c0607cf1b..3a4c979e6 100644 --- a/common/src/main/java/org/vivecraft/mixin/blaze3d/systems/RenderSystemVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/blaze3d/systems/RenderSystemVRMixin.java @@ -1,4 +1,4 @@ -package org.vivecraft.mixin.blaze3d.systems; +package org.vivecraft.mixin.client_vr.blaze3d.systems; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/components/EditBoxVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/EditBoxVRMixin.java similarity index 61% rename from common/src/main/java/org/vivecraft/mixin/client/gui/components/EditBoxVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/gui/EditBoxVRMixin.java index a8b717e1f..ca922b60c 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/components/EditBoxVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/EditBoxVRMixin.java @@ -1,4 +1,4 @@ -package org.vivecraft.mixin.client.gui.components; +package org.vivecraft.mixin.client_vr.gui; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -11,7 +11,8 @@ import net.minecraft.client.gui.components.EditBox; import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; -import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler; @Mixin(EditBox.class) public abstract class EditBoxVRMixin extends AbstractWidget{ @@ -24,16 +25,16 @@ public EditBoxVRMixin(int p_93629_, int p_93630_, int p_93631_, int p_93632_, Co } //TODO test - @Redirect(at = @At(value = "FIELD", target = "Lnet/minecraft/client/gui/components/EditBox;canLoseFocus:Z"), method = "Lnet/minecraft/client/gui/components/EditBox;mouseClicked(DDI)Z") + @Redirect(at = @At(value = "FIELD", target = "Lnet/minecraft/client/gui/components/EditBox;canLoseFocus:Z"), method = "mouseClicked(DDI)Z") public boolean focus(EditBox instance) { return canLoseFocus || !this.isFocused(); } -@Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/EditBox;isFocused()Z", shift = At.Shift.BEFORE), method = "Lnet/minecraft/client/gui/components/EditBox;mouseClicked(DDI)Z", locals = LocalCapture.CAPTURE_FAILHARD) -public void openKeyboard(double d, double e, int i, CallbackInfoReturnable cir, boolean bl) { - if (bl) { - KeyboardHandler.setOverlayShowing(true); + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/EditBox;isFocused()Z", shift = At.Shift.BEFORE), method = "mouseClicked(DDI)Z", locals = LocalCapture.CAPTURE_FAILHARD) + public void openKeyboard(double d, double e, int i, CallbackInfoReturnable cir, boolean bl) { + if (bl && VRState.vrRunning) { + KeyboardHandler.setOverlayShowing(true); + } } -} } diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/GuiComponentVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/GuiComponentVRMixin.java similarity index 63% rename from common/src/main/java/org/vivecraft/mixin/client/gui/GuiComponentVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/gui/GuiComponentVRMixin.java index c72f8b24a..e6b2526d6 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/GuiComponentVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/GuiComponentVRMixin.java @@ -1,4 +1,4 @@ -package org.vivecraft.mixin.client.gui; +package org.vivecraft.mixin.client_vr.gui; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; @@ -7,18 +7,24 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.client_vr.VRState; @Mixin(GuiComponent.class) public class GuiComponentVRMixin { @Inject(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;setShader(Ljava/util/function/Supplier;)V", shift = At.Shift.AFTER), method = "innerBlit(Lcom/mojang/math/Matrix4f;IIIIIFFFF)V") private static void addBlend(CallbackInfo ci) { - RenderSystem.enableBlend(); - RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + if (VRState.vrRunning) { + RenderSystem.enableBlend(); + // only change the alpha blending + RenderSystem.blendFuncSeparate(GlStateManager.BLEND.srcRgb, GlStateManager.BLEND.dstRgb, GlStateManager.SourceFactor.ONE.value, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA.value); + } } @Inject(at = @At("TAIL"), method = "innerBlit(Lcom/mojang/math/Matrix4f;IIIIIFFFF)V") private static void stopBlend(CallbackInfo ci) { - RenderSystem.disableBlend(); + if (VRState.vrRunning) { + RenderSystem.disableBlend(); + } } } diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/GuiVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/GuiVRMixin.java similarity index 56% rename from common/src/main/java/org/vivecraft/mixin/client/gui/GuiVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/gui/GuiVRMixin.java index e0424130f..ac3f0d4ff 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/GuiVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/GuiVRMixin.java @@ -1,20 +1,18 @@ -package org.vivecraft.mixin.client.gui; +package org.vivecraft.mixin.client_vr.gui; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.SodiumHelper; -import org.vivecraft.Xplat; -import org.vivecraft.extensions.GuiExtension; +import net.minecraft.client.KeyMapping; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.resources.ResourceLocation; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.extensions.GuiExtension; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; -import net.minecraft.client.CameraType; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Font; import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiComponent; -import net.minecraft.client.gui.components.PlayerTabOverlay; import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.world.effect.MobEffect; @@ -23,8 +21,6 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; -import net.minecraft.world.scores.Objective; -import net.minecraft.world.scores.Scoreboard; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -33,6 +29,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.client_xr.render_pass.RenderPassType; @Mixin(Gui.class) public abstract class GuiVRMixin extends GuiComponent implements GuiExtension { @@ -50,93 +47,112 @@ public abstract class GuiVRMixin extends GuiComponent implements GuiExtension { @Shadow protected abstract Player getCameraPlayer(); - //Moved to render for sodium - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Gui;renderVignette(Lnet/minecraft/world/entity/Entity;)V"), method = "render") - public void noVignette(Gui instance, Entity entity) { - if(Xplat.isModLoaded("sodium") || Xplat.isModLoaded("rubidium")) { - SodiumHelper.vignette(false); + @Inject(method = "renderVignette", at = @At("HEAD"), cancellable = true) + void cancelRenderVignette(Entity entity, CallbackInfo ci) { + if (RenderPassType.isGuiOnly()) { + RenderSystem.enableDepthTest(); + ci.cancel(); } } - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/CameraType;isFirstPerson()Z"), method = "render") - public boolean noFirstPerson(CameraType instance) { - return false; + @Inject(method = "renderTextureOverlay", at = @At("HEAD"), cancellable = true) + void cancelRenderOverlay(ResourceLocation resourceLocation, float f, CallbackInfo ci) { + if (RenderPassType.isGuiOnly()) { + ci.cancel(); + } } - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;getTicksFrozen()I"), method = "render") - public int noFrozen(LocalPlayer instance) { - return 0; + @Inject(method = "renderPortalOverlay", at = @At("HEAD"), cancellable = true) + void cancelRenderPortalOverlay(float f, CallbackInfo ci) { + if (RenderPassType.isGuiOnly()) { + ci.cancel(); + } } - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;hasEffect(Lnet/minecraft/world/effect/MobEffect;)Z"), method = "render") - public boolean noConfusion(LocalPlayer instance, MobEffect mobEffect) { - return true; + @Inject(at = @At("HEAD"), method = "renderSpyglassOverlay", cancellable = true) + public void cancelRenderSpyglassOverlay(float f, CallbackInfo ci) { + if (RenderPassType.isGuiOnly()) { + ci.cancel(); + } } -// @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Gui;renderCrosshair(Lcom/mojang/blaze3d/vertex/PoseStack;)V"), method = "render") -// public void noCrosshair(Gui instance, PoseStack poseStack) { -// return ; -// } + @Inject(at = @At("HEAD"), method = "renderCrosshair", cancellable = true) + public void cancelRenderCrosshair(PoseStack poseStack, CallbackInfo ci) { + if (RenderPassType.isGuiOnly()) { + ci.cancel(); + } + } - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/PlayerTabOverlay;render(Lcom/mojang/blaze3d/vertex/PoseStack;ILnet/minecraft/world/scores/Scoreboard;Lnet/minecraft/world/scores/Objective;)V"), method = "render") - public void noTabList(PlayerTabOverlay instance, PoseStack poseStack, int i, Scoreboard scoreboard, Objective objective) { - return ; + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;getSleepTimer()I"), method = "render") + public int noSleepOverlay(LocalPlayer instance) { + return VRState.vrRunning ? 0 : instance.getSleepTimer(); } - @Inject(at = @At("HEAD"), method = "renderCrosshair", cancellable = true) - public void noRenderCrosshair(PoseStack poseStack, CallbackInfo ci) { - ci.cancel(); + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/KeyMapping;isDown()Z"), method = "render") + public boolean toggleableTabList(KeyMapping instance) { + return instance.isDown() || showPlayerList; } @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Gui;blit(Lcom/mojang/blaze3d/vertex/PoseStack;IIIIII)V", ordinal = 1, shift = At.Shift.AFTER), method = "renderHotbar") public void hotbarContext(float f, PoseStack poseStack, CallbackInfo ci) { - int i = this.screenWidth / 2; - if (ClientDataHolder.getInstance().interactTracker.hotbar >= 0 && ClientDataHolder.getInstance().interactTracker.hotbar < 9 && this.getCameraPlayer().getInventory().selected != ClientDataHolder.getInstance().interactTracker.hotbar) { + if (VRState.vrRunning && ClientDataHolderVR.getInstance().interactTracker.hotbar >= 0 && ClientDataHolderVR.getInstance().interactTracker.hotbar < 9 && this.getCameraPlayer().getInventory().selected != ClientDataHolderVR.getInstance().interactTracker.hotbar && ClientDataHolderVR.getInstance().interactTracker.isActive(minecraft.player)) { + int i = this.screenWidth / 2; RenderSystem.setShaderColor(0.0F, 1.0F, 0.0F, 1.0F); - this.blit(poseStack, i - 91 - 1 + ClientDataHolder.getInstance().interactTracker.hotbar * 20, this.screenHeight - 22 - 1, 0, 22, 24, 22); + blit(poseStack, i - 91 - 1 + ClientDataHolderVR.getInstance().interactTracker.hotbar * 20, this.screenHeight - 22 - 1, 0, 22, 24, 22); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); } } @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;isEmpty()Z", ordinal = 0), method = "renderHotbar") public boolean slotSwap(ItemStack instance) { - return !(!instance.isEmpty() || ClientDataHolder.getInstance().vrSettings.vrTouchHotbar); + return !(!instance.isEmpty() || (VRState.vrRunning && ClientDataHolderVR.getInstance().vrSettings.vrTouchHotbar)); + } + + @Inject(at = @At("HEAD"), method = "renderHotbar", cancellable = true) + public void notHotbarOnScreens(float f, PoseStack poseStack, CallbackInfo ci) { + if (VRState.vrRunning && minecraft.screen != null) { + ci.cancel(); + } } - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Gui;blit(Lcom/mojang/blaze3d/vertex/PoseStack;IIIIII)V", ordinal = 2), method = "renderHotbar") - public void renderVRHotbarLeft(Gui instance, PoseStack poseStack, int x, int y, int uOffset, int vOffset, int uWidth, int vWidth) { - if (ClientDataHolder.getInstance().interactTracker.hotbar == 9) { + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Gui;blit(Lcom/mojang/blaze3d/vertex/PoseStack;IIIIII)V", ordinal = 2, shift = At.Shift.BEFORE), method = "renderHotbar") + public void renderVRHotbarLeft(float f, PoseStack poseStack, CallbackInfo ci) { + if (VRState.vrRunning && ClientDataHolderVR.getInstance().interactTracker.hotbar == 9 && ClientDataHolderVR.getInstance().interactTracker.isActive(minecraft.player)) { RenderSystem.setShaderColor(0.0F, 0.0F, 1.0F, 1.0F); - this.blit(poseStack, x, y, uOffset, vOffset, uWidth, vWidth); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); } - else { - this.blit(poseStack, x, y, uOffset, vOffset, uWidth, vWidth); + } + + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Gui;blit(Lcom/mojang/blaze3d/vertex/PoseStack;IIIIII)V", ordinal = 2, shift = At.Shift.AFTER), method = "renderHotbar") + public void renderVRHotbarLeftReset(float f, PoseStack poseStack, CallbackInfo ci) { + if (VRState.vrRunning && ClientDataHolderVR.getInstance().interactTracker.hotbar == 9) { + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); } } - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Gui;blit(Lcom/mojang/blaze3d/vertex/PoseStack;IIIIII)V", ordinal = 3), method = "renderHotbar") - public void renderVRHotbarRight(Gui instance, PoseStack poseStack, int x, int y, int uOffset, int vOffset, int uWidth, int vWidth) { - if (ClientDataHolder.getInstance().interactTracker.hotbar == 9){ + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Gui;blit(Lcom/mojang/blaze3d/vertex/PoseStack;IIIIII)V", ordinal = 3, shift = At.Shift.BEFORE), method = "renderHotbar") + public void renderVRHotbarRight(float f, PoseStack poseStack, CallbackInfo ci) { + if (VRState.vrRunning && ClientDataHolderVR.getInstance().interactTracker.hotbar == 9 && ClientDataHolderVR.getInstance().interactTracker.isActive(minecraft.player)){ RenderSystem.setShaderColor(0.0F, 0.0F, 1.0F, 1.0F); - this.blit(poseStack, x, y, uOffset, vOffset, uWidth, vWidth); + } + } + + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Gui;blit(Lcom/mojang/blaze3d/vertex/PoseStack;IIIIII)V", ordinal = 3, shift = At.Shift.AFTER), method = "renderHotbar") + public void renderVRHotbarRightReset(float f, PoseStack poseStack, CallbackInfo ci) { + if (VRState.vrRunning && ClientDataHolderVR.getInstance().interactTracker.hotbar == 9){ RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - } else { - this.blit(poseStack, x, y, uOffset, vOffset, uWidth, vWidth); } } // do remap because of forge @Inject(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;disableBlend()V"), method = "renderHotbar") - public void renderVive(float f, PoseStack poseStack, CallbackInfo ci){ - this.renderViveHudIcons(poseStack); + public void renderVive(float f, PoseStack poseStack, CallbackInfo ci) { + if (VRState.vrRunning) { + this.renderViveHudIcons(poseStack); + } } private void renderViveHudIcons(PoseStack matrixstack) { if (this.minecraft.getCameraEntity() instanceof Player) { - int i = this.minecraft.getWindow().getGuiScaledWidth(); - int j = this.minecraft.getWindow().getGuiScaledHeight(); - Font font = this.minecraft.gui.getFont(); Player player = (Player)this.minecraft.getCameraEntity(); int k = 0; MobEffect mobeffect = null; @@ -156,31 +172,32 @@ private void renderViveHudIcons(PoseStack matrixstack) { if (player.isFallFlying()) { k = -1; } - if (ClientDataHolder.getInstance().crawlTracker.crawling) { + if (ClientDataHolderVR.getInstance().crawlTracker.crawling) { k = -2; } - int l = this.minecraft.getWindow().getGuiScaledWidth() / 2 - 109; - int i1 = this.minecraft.getWindow().getGuiScaledHeight() - 39; + int x = this.minecraft.getWindow().getGuiScaledWidth() / 2 - 109; + int y = this.minecraft.getWindow().getGuiScaledHeight() - 39; if (k == -1) { - this.minecraft.getItemRenderer().renderGuiItem(new ItemStack(Items.ELYTRA), l, i1); + this.minecraft.getItemRenderer().renderGuiItem(new ItemStack(Items.ELYTRA), x, y); mobeffect = null; } else if (k == -2) { + int x2 = x; if (player.isShiftKeyDown()) { - l -= 19; + x2 -= 19; } else { mobeffect = null; } - this.minecraft.getItemRenderer().renderGuiItem(new ItemStack(Items.RABBIT_FOOT), l, i1); + this.minecraft.getItemRenderer().renderGuiItem(new ItemStack(Items.RABBIT_FOOT), x2, y); } if (mobeffect != null) { TextureAtlasSprite textureatlassprite = this.minecraft.getMobEffectTextures().get(mobeffect); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); RenderSystem.setShaderTexture(0, textureatlassprite.atlas().location()); - GuiComponent.blit(matrixstack, l, i1, 0, 18, 18, textureatlassprite); + GuiComponent.blit(matrixstack, x, y, 0, 18, 18, textureatlassprite); } } } @@ -203,7 +220,7 @@ public void drawMouseMenuQuad(int mouseX, int mouseY) { RenderSystem.setShader(GameRenderer::getPositionTexShader); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); RenderSystem.setShaderTexture(0, Screen.GUI_ICONS_LOCATION); - float f = 16.0F * ClientDataHolder.getInstance().vrSettings.menuCrosshairScale; + float f = 16.0F * ClientDataHolderVR.getInstance().vrSettings.menuCrosshairScale; RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.ONE_MINUS_DST_COLOR, GlStateManager.DestFactor.ZERO, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE); this.drawCentredTexturedModalRect(mouseX, mouseY, f, f, 0, 0, 15, 15); RenderSystem.disableBlend(); diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/gui/TutorialToastVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/TutorialToastVRMixin.java new file mode 100644 index 000000000..f91208cca --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/TutorialToastVRMixin.java @@ -0,0 +1,61 @@ +package org.vivecraft.mixin.client_vr.gui; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.gui.components.toasts.Toast; +import net.minecraft.client.gui.components.toasts.ToastComponent; +import net.minecraft.client.gui.components.toasts.TutorialToast; +import net.minecraft.network.chat.Component; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(TutorialToast.class) +public abstract class TutorialToastVRMixin implements Toast{ + + @Shadow + @Final + private Component title; + + @Shadow + @Final + private Component message; + + private int offset; + + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/toasts/ToastComponent;blit(Lcom/mojang/blaze3d/vertex/PoseStack;IIIIII)V", shift = At.Shift.AFTER), method = "render") + private void extendToast(PoseStack poseStack, ToastComponent toastComponent, long l, CallbackInfoReturnable cir){ + int width = Math.max(toastComponent.getMinecraft().font.width(this.title), message != null ? toastComponent.getMinecraft().font.width(this.message) : 0) + 34; + offset = Math.min(this.width()-width, 0); + if (offset < 0) { + // draw a bigger toast from right to left, to override the left border + for (int i = offset - (this.width() - 8) * (offset / (this.width() - 8)); i >= offset; i -= this.width() - 8) { + toastComponent.blit(poseStack, i, 0, 0, 96, this.width() - 4, this.height()); + } + } + } + + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/toasts/TutorialToast$Icons;render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/gui/GuiComponent;II)V"), method = "render", index = 2) + private int offsetIcon(int x){ + return x + offset; + } + + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Font;draw(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/network/chat/Component;FFI)I"), method = "render", index = 2) + private float offsetText(float x){ + return x + offset; + } + + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiComponent;fill(Lcom/mojang/blaze3d/vertex/PoseStack;IIIII)V"), method = "render", index = 1) + private int offsetProgressStart(int x){ + return x + offset; + } + + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiComponent;fill(Lcom/mojang/blaze3d/vertex/PoseStack;IIIII)V", ordinal = 1), method = "render", index = 3) + private int offsetProgressEnd(int x){ + return x + offset - (int)((float)x / TutorialToast.PROGRESS_BAR_WIDTH * offset ); + } + +} diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/OptionsScreenVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/OptionsScreenVRMixin.java new file mode 100644 index 000000000..6f0eb4f1b --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/OptionsScreenVRMixin.java @@ -0,0 +1,48 @@ +package org.vivecraft.mixin.client_vr.gui.screens; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.screens.OptionsScreen; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TranslatableComponent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.client.gui.settings.GuiMainVRSettings; + +@Mixin(OptionsScreen.class) +public class OptionsScreenVRMixin extends Screen { + protected OptionsScreenVRMixin(Component component) { + super(component); + } + + // replace FOV slider + /* + @Redirect(method = "init", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/OptionInstance;createButton(Lnet/minecraft/client/Options;III)Lnet/minecraft/client/gui/components/AbstractWidget;")) + private AbstractWidget addVivecraftSettings(OptionInstance option, Options options, int i, int j, int k) { + if (option == options.fov()) { + return new Button.Builder( Component.translatable("vivecraft.options.screen.main.button"), (p) -> + { + Minecraft.getInstance().options.save(); + Minecraft.getInstance().setScreen(new GuiMainVRSettings(this)); + }) + .size( k, 20) + .pos(i, j) + .build(); + } else { + return option.createButton(options, i, j, k); + } + } + */ + + // place below FOV slider + @Inject(method = "init", at = @At(value = "HEAD")) + private void addVivecraftSettings(CallbackInfo ci) { + this.addRenderableWidget(new Button(this.width / 2 - 155, this.height / 6 - 12 + 24, 150, 20, new TranslatableComponent("vivecraft.options.screen.main.button"), (p) -> + { + Minecraft.getInstance().options.save(); + Minecraft.getInstance().setScreen(new GuiMainVRSettings(this)); + })); + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/PauseScreenVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/PauseScreenVRMixin.java similarity index 54% rename from common/src/main/java/org/vivecraft/mixin/client/gui/screens/PauseScreenVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/PauseScreenVRMixin.java index 9d4daf7ab..8624b6cd6 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/PauseScreenVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/PauseScreenVRMixin.java @@ -1,9 +1,7 @@ -package org.vivecraft.mixin.client.gui.screens; +package org.vivecraft.mixin.client_vr.gui.screens; -import net.minecraft.client.gui.components.AbstractWidget; -import net.minecraft.client.gui.components.Widget; -import org.vivecraft.ClientDataHolder; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.ChatScreen; @@ -15,18 +13,18 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; -import org.vivecraft.settings.AutoCalibration; -import org.vivecraft.settings.VRHotkeys; -import org.vivecraft.settings.VRSettings; -import org.vivecraft.utils.external.jkatvr; -import org.vivecraft.gui.settings.GuiQuickCommandsInGame; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler; +import org.vivecraft.client.gui.settings.GuiQuickCommandsInGame; +import org.vivecraft.client_vr.settings.AutoCalibration; +import org.vivecraft.client_vr.settings.VRHotkeys; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.client_vr.utils.external.jkatvr; -@Mixin(PauseScreen.class) +@Mixin(value = PauseScreen.class, priority = 900) public abstract class PauseScreenVRMixin extends Screen { - private ClientDataHolder dataholder = ClientDataHolder.getInstance(); - protected PauseScreenVRMixin(Component component) { super(component); } @@ -34,105 +32,117 @@ protected PauseScreenVRMixin(Component component) { @Inject(at = @At("TAIL"), method = "createPauseMenu") public void addInit(CallbackInfo ci) { + if (!VRState.vrEnabled) { + return; + } + boolean moveAllButtons = !ClientDataHolderVR.getInstance().vrSettings.seated || ClientDataHolderVR.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON || ClientDataHolderVR.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY; + + int threshold = this.height / 4 - 16 + 120; + + // move every button up a bit + for (GuiEventListener widget: this.children()) { + if (widget instanceof AbstractWidget) { + if (((AbstractWidget) widget).y >= threshold) { + ((AbstractWidget) widget).y += 24; + } else if (moveAllButtons) { + ((AbstractWidget) widget).y -= 24; + } + } + } + + int offset = moveAllButtons ? 0 : 24; + if (!Minecraft.getInstance().isMultiplayerServer()) { - this.addRenderableWidget(new Button(this.width / 2 - 102, this.height / 4 + 72 + -16, 98, 20, new TranslatableComponent("vivecraft.gui.chat"), (p) -> + this.addRenderableWidget(new Button(this.width / 2 - 102, this.height / 4 + 48 + -16 + offset, 98, 20, new TranslatableComponent("vivecraft.gui.chat"), (p) -> { this.minecraft.setScreen(new ChatScreen("")); - if (ClientDataHolder.getInstance().vrSettings.autoOpenKeyboard) + if (ClientDataHolderVR.getInstance().vrSettings.autoOpenKeyboard) KeyboardHandler.setOverlayShowing(true); })); } else { - this.addRenderableWidget(new Button(this.width / 2 - 102, this.height / 4 + 72 + -16, 46, 20, new TranslatableComponent("vivecraft.gui.chat"), (p) -> + this.addRenderableWidget(new Button(this.width / 2 - 102, this.height / 4 + 48 + -16 + offset, 46, 20, new TranslatableComponent("vivecraft.gui.chat"), (p) -> { this.minecraft.setScreen(new ChatScreen("")); })); - this.addRenderableWidget(new Button(this.width / 2 - 102 + 48, this.height / 4 + 72 + -16, 46, 20, new TranslatableComponent("vivecraft.gui.social"), (p) -> + this.addRenderableWidget(new Button(this.width / 2 - 102 + 48, this.height / 4 + 48 + -16 + offset, 46, 20, new TranslatableComponent("vivecraft.gui.social"), (p) -> { this.minecraft.setScreen(new SocialInteractionsScreen()); })); } - this.addRenderableWidget(new Button(this.width / 2 + 4, this.height / 4 + 72 + -16, 98, 20, new TranslatableComponent("vivecraft.gui.commands"), (p) -> + this.addRenderableWidget(new Button(this.width / 2 + 4, this.height / 4 + 48 + -16 + offset, 98, 20, new TranslatableComponent("vivecraft.gui.commands"), (p) -> { this.minecraft.setScreen(new GuiQuickCommandsInGame(this)); this.init(); })); - this.addRenderableWidget(new Button(this.width / 2 - 102, this.height / 4 + 120 + -16, 49, 20, new TranslatableComponent("vivecraft.gui.overlay"), (p) -> + this.addRenderableWidget(new Button(this.width / 2 - 102, this.height / 4 + 96 + -16 + offset, 49, 20, new TranslatableComponent("vivecraft.gui.overlay"), (p) -> { this.minecraft.options.renderDebug = !this.minecraft.options.renderDebug; this.minecraft.setScreen((Screen) null); })); - this.addRenderableWidget(new Button(this.width / 2 - 52, this.height / 4 + 120 + -16, 49, 20, new TranslatableComponent("vivecraft.gui.profiler"), (p) -> + this.addRenderableWidget(new Button(this.width / 2 - 52, this.height / 4 + 96 + -16 + offset, 49, 20, new TranslatableComponent("vivecraft.gui.profiler"), (p) -> { if (!this.minecraft.options.renderDebug) this.minecraft.options.renderDebugCharts = false; this.minecraft.options.renderDebugCharts = !this.minecraft.options.renderDebugCharts; this.minecraft.options.renderDebug = this.minecraft.options.renderDebugCharts; this.minecraft.setScreen((Screen) null); })); - this.addRenderableWidget(new Button(this.width / 2 + 4, this.height / 4 + 120 + -16, 98, 20, new TranslatableComponent("vivecraft.gui.screenshot"), (p) -> + this.addRenderableWidget(new Button(this.width / 2 + 4, this.height / 4 + 96 + -16 + offset, 98, 20, new TranslatableComponent("vivecraft.gui.screenshot"), (p) -> { this.minecraft.setScreen((Screen) null); - ClientDataHolder.getInstance().grabScreenShot = true; + ClientDataHolderVR.getInstance().grabScreenShot = true; })); - if (!ClientDataHolder.getInstance().vrSettings.seated) { - this.addRenderableWidget(new Button(this.width / 2 - 102, this.height / 4 + 144 + -16, 98, 20, new TranslatableComponent("vivecraft.gui.calibrateheight"), (p) -> + if (!ClientDataHolderVR.getInstance().vrSettings.seated) { + this.addRenderableWidget(new Button(this.width / 2 - 102, this.height / 4 + 120 + -16 + offset, 98, 20, new TranslatableComponent("vivecraft.gui.calibrateheight"), (p) -> { AutoCalibration.calibrateManual(); - ClientDataHolder.getInstance().vrSettings.saveOptions(); + ClientDataHolderVR.getInstance().vrSettings.saveOptions(); this.minecraft.setScreen((Screen) null); })); } - if (ClientDataHolder.katvr) { - this.addRenderableWidget(new Button(this.width / 2 + 106, this.height / 4 + 144 + -16, 98, 20, new TranslatableComponent("vivecraft.gui.alignkatwalk"), (p) -> + if (ClientDataHolderVR.katvr) { + this.addRenderableWidget(new Button(this.width / 2 + 106, this.height / 4 + 120 + -16 + offset, 98, 20, new TranslatableComponent("vivecraft.gui.alignkatwalk"), (p) -> { - jkatvr.resetYaw(ClientDataHolder.getInstance().vrPlayer.vrdata_room_pre.hmd.getYaw()); + jkatvr.resetYaw(ClientDataHolderVR.getInstance().vrPlayer.vrdata_room_pre.hmd.getYaw()); this.minecraft.setScreen((Screen) null); })); } - if (!ClientDataHolder.getInstance().vrSettings.seated || ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON || ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY) { - this.addRenderableWidget(new Button(this.width / 2 + 4, this.height / 4 + 144 + -16, 98, 20, new TranslatableComponent("vivecraft.gui.movethirdpersoncam"), (p) -> + if (!ClientDataHolderVR.getInstance().vrSettings.seated || ClientDataHolderVR.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON || ClientDataHolderVR.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY) { + this.addRenderableWidget(new Button(this.width / 2 + 4, this.height / 4 + 120 + -16 + offset, 98, 20, new TranslatableComponent("vivecraft.gui.movethirdpersoncam"), (p) -> { if (!VRHotkeys.isMovingThirdPersonCam()) { VRHotkeys.startMovingThirdPersonCam(1, VRHotkeys.Triggerer.MENUBUTTON); } else if (VRHotkeys.getMovingThirdPersonCamTriggerer() == VRHotkeys.Triggerer.MENUBUTTON) { VRHotkeys.stopMovingThirdPersonCam(); - ClientDataHolder.getInstance().vrSettings.saveOptions(); + ClientDataHolderVR.getInstance().vrSettings.saveOptions(); } })); } - - // move every button up a bit - if (!ClientDataHolder.getInstance().vrSettings.seated || ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON || ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY) { - for (Widget widget: this.renderables) { - ((AbstractWidget)widget).y -= 24; - } - } - } - - @ModifyConstant(method = "render", constant = @Constant(intValue = 40)) - private int moveTitleUp(int constant) { - return (!ClientDataHolder.getInstance().vrSettings.seated || ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON || ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY) ? 16 : 40; } @Redirect(method = "createPauseMenu", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/PauseScreen;addRenderableWidget(Lnet/minecraft/client/gui/components/events/GuiEventListener;)Lnet/minecraft/client/gui/components/events/GuiEventListener;", ordinal = 3)) private GuiEventListener remove(PauseScreen instance, GuiEventListener guiEventListener) { // Feedback button // don't remove, just hide, so mods that rely on it being there, still work - ((AbstractWidget)guiEventListener).visible = false; + ((AbstractWidget)guiEventListener).visible = !VRState.vrEnabled; return this.addRenderableWidget((Button)guiEventListener); } @Redirect(method = "createPauseMenu", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/PauseScreen;addRenderableWidget(Lnet/minecraft/client/gui/components/events/GuiEventListener;)Lnet/minecraft/client/gui/components/events/GuiEventListener;", ordinal = 4)) private GuiEventListener remove2(PauseScreen instance, GuiEventListener guiEventListener) { // report bugs button // don't remove, just hide, so mods that rely on it being there, still work - ((AbstractWidget)guiEventListener).visible = false; + ((AbstractWidget)guiEventListener).visible = !VRState.vrEnabled; return this.addRenderableWidget((Button)guiEventListener); } - @ModifyConstant(method = "createPauseMenu", constant = @Constant(intValue = 120), remap = false) - private int moveDown(int constant) { - return (!ClientDataHolder.getInstance().vrSettings.seated || ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON || ClientDataHolder.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY) ? 168 : 144; + // TODO this seems unneeded? + @Redirect(method = "createPauseMenu", at = @At(value = "FIELD", target = "Lnet/minecraft/client/gui/components/Button;active:Z")) + private void remove3(Button instance, boolean value) {} + + @ModifyConstant(method = "render", constant = @Constant(intValue = 40)) + private int moveTitleUp(int constant) { + return (VRState.vrEnabled && (!ClientDataHolderVR.getInstance().vrSettings.seated || ClientDataHolderVR.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON || ClientDataHolderVR.getInstance().vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY)) ? 16 : 40; } } diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/ScreenVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/ScreenVRMixin.java similarity index 76% rename from common/src/main/java/org/vivecraft/mixin/client/gui/screens/ScreenVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/ScreenVRMixin.java index 2cfc8cc59..d0b259e2a 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/ScreenVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/ScreenVRMixin.java @@ -1,6 +1,6 @@ -package org.vivecraft.mixin.client.gui.screens; +package org.vivecraft.mixin.client_vr.gui.screens; -import org.vivecraft.ClientDataHolder; +import org.vivecraft.client_vr.ClientDataHolderVR; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.components.Widget; import net.minecraft.client.gui.components.events.AbstractContainerEventHandler; @@ -8,13 +8,14 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +import org.vivecraft.client_vr.VRState; @Mixin(Screen.class) public abstract class ScreenVRMixin extends AbstractContainerEventHandler implements Widget { @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;fillGradient(Lcom/mojang/blaze3d/vertex/PoseStack;IIIIII)V"), method = "renderBackground(Lcom/mojang/blaze3d/vertex/PoseStack;I)V") public void vrBackground(Screen instance, PoseStack poseStack, int i, int j, int k, int l, int m, int n) { - if (ClientDataHolder.getInstance().vrSettings != null && !ClientDataHolder.getInstance().vrSettings.menuBackground) { + if (VRState.vrRunning && ClientDataHolderVR.getInstance().vrSettings != null && !ClientDataHolderVR.getInstance().vrSettings.menuBackground) { this.fillGradient(poseStack, i, j, k, l, 0, 0); } else { this.fillGradient(poseStack, i, j, k, l, m, n); diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/SoundOptionsScreenVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/SoundOptionsScreenVRMixin.java new file mode 100644 index 000000000..0500412e5 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/SoundOptionsScreenVRMixin.java @@ -0,0 +1,64 @@ +package org.vivecraft.mixin.client_vr.gui.screens; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.components.CycleButton; +import net.minecraft.client.gui.components.TooltipAccessor; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.SoundOptionsScreen; +import net.minecraft.client.resources.sounds.SimpleSoundInstance; +import net.minecraft.client.sounds.SoundManager; +import net.minecraft.network.chat.CommonComponents; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.util.FormattedCharSequence; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.settings.VRSettings; + +import java.util.List; + +@Mixin(SoundOptionsScreen.class) +public class SoundOptionsScreenVRMixin extends Screen { + + protected SoundOptionsScreenVRMixin(Component component) { + super(component); + } + + @Unique + private AbstractWidget directionalAudioVRButton = null; + + @Inject(method = "init", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/SoundOptionsScreen;addRenderableWidget(Lnet/minecraft/client/gui/components/events/GuiEventListener;)Lnet/minecraft/client/gui/components/events/GuiEventListener;", ordinal = 2, shift = At.Shift.BEFORE)) + private void addVivecraftSettings(CallbackInfo ci) { + directionalAudioVRButton = CycleButton.builder((bool) -> (boolean)bool ? CommonComponents.OPTION_ON : CommonComponents.OPTION_OFF) + .withValues(false, true) + .withInitialValue(ClientDataHolderVR.getInstance().vrSettings.hrtfSelection >= 0) + .withTooltip(obj -> + minecraft.font.split(new TextComponent("vivecraft.options.HRTF_SELECTION.tooltip"), 200)) + .create(this.width / 2 - 155 + 160, this.height / 6 - 12 + 22 * 5, 150, 20, new TranslatableComponent("vivecraft.options.HRTF_SELECTION"), (cycleButton, newValue) -> { + ClientDataHolderVR.getInstance().vrSettings.hrtfSelection = (boolean)newValue ? 0 : -1; + ClientDataHolderVR.getInstance().vrSettings.setOptionValue(VRSettings.VrOptions.HRTF_SELECTION); + ClientDataHolderVR.getInstance().vrSettings.saveOptions(); + + SoundManager soundManager = Minecraft.getInstance().getSoundManager(); + soundManager.reload(); + soundManager.play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F)); + }); + + this.addRenderableWidget(directionalAudioVRButton); + } + @Inject(at = @At("TAIL"), method = "render") + private void renderTooltip(PoseStack poseStack, int i, int j, float f, CallbackInfo ci) { + if (directionalAudioVRButton != null && directionalAudioVRButton.isMouseOver(i, j)) { + List list = ((TooltipAccessor)this.directionalAudioVRButton).getTooltip(); + this.renderTooltip(poseStack, list, i, j); + } + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/WinScreenVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/WinScreenVRMixin.java new file mode 100644 index 000000000..5e6e1fc21 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/WinScreenVRMixin.java @@ -0,0 +1,25 @@ +package org.vivecraft.mixin.client_vr.gui.screens; + +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.WinScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(WinScreen.class) +public class WinScreenVRMixin { + @Redirect(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;blendFunc(Lcom/mojang/blaze3d/platform/GlStateManager$SourceFactor;Lcom/mojang/blaze3d/platform/GlStateManager$DestFactor;)V"), method = "render") + private void dontDestroyAlpha(GlStateManager.SourceFactor sourceFactor, GlStateManager.DestFactor destFactor){ + RenderSystem.blendFuncSeparate(sourceFactor, destFactor, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V"), method = "respawn") + private void dontClearScreenInLevel(Minecraft instance, Screen screen){ + if (Minecraft.getInstance().level == null) { + instance.setScreen(screen); + } + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/AbstractContainerScreenVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/inventory/AbstractContainerScreenVRMixin.java similarity index 92% rename from common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/AbstractContainerScreenVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/inventory/AbstractContainerScreenVRMixin.java index 9087407fe..af0c5bf56 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/AbstractContainerScreenVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/inventory/AbstractContainerScreenVRMixin.java @@ -1,4 +1,4 @@ -package org.vivecraft.mixin.client.gui.screens.inventory; +package org.vivecraft.mixin.client_vr.gui.screens.inventory; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/BookEditScreenVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/inventory/BookEditScreenVRMixin.java similarity index 68% rename from common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/BookEditScreenVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/inventory/BookEditScreenVRMixin.java index 01d8a92f8..08bee0d46 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/BookEditScreenVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/inventory/BookEditScreenVRMixin.java @@ -1,17 +1,20 @@ -package org.vivecraft.mixin.client.gui.screens.inventory; +package org.vivecraft.mixin.client_vr.gui.screens.inventory; import net.minecraft.client.gui.screens.inventory.BookEditScreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler; @Mixin(BookEditScreen.class) public class BookEditScreenVRMixin { @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/inventory/BookEditScreen;updateButtonVisibility()V", shift = At.Shift.BEFORE), method = "init") public void overlay(CallbackInfo ci) { - KeyboardHandler.setOverlayShowing(true); + if (VRState.vrRunning) { + KeyboardHandler.setOverlayShowing(true); + } } } diff --git a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/CreativeModeInventoryScreenVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/inventory/CreativeModeInventoryScreenVRMixin.java similarity index 98% rename from common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/CreativeModeInventoryScreenVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/inventory/CreativeModeInventoryScreenVRMixin.java index 2aeab032f..9eed87107 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/gui/screens/inventory/CreativeModeInventoryScreenVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/inventory/CreativeModeInventoryScreenVRMixin.java @@ -1,4 +1,4 @@ -package org.vivecraft.mixin.client.gui.screens.inventory; +package org.vivecraft.mixin.client_vr.gui.screens.inventory; import net.minecraft.client.gui.components.EditBox; import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen; diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/inventory/SignEditScreenVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/inventory/SignEditScreenVRMixin.java new file mode 100644 index 000000000..16ddebbac --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/gui/screens/inventory/SignEditScreenVRMixin.java @@ -0,0 +1,27 @@ +package org.vivecraft.mixin.client_vr.gui.screens.inventory; + +import net.minecraft.client.gui.screens.inventory.SignEditScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler; + +@Mixin(SignEditScreen.class) +public class SignEditScreenVRMixin { + + @Inject(at = @At("HEAD"), method = "init") + public void showOverlay(CallbackInfo ci) { + if(VRState.vrRunning) { + KeyboardHandler.setOverlayShowing(true); + } + } + + @Inject(at = @At("HEAD"), method = "removed") + public void dontShowOverlay(CallbackInfo ci) { + if(VRState.vrRunning) { + KeyboardHandler.setOverlayShowing(false); + } + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/multiplayer/ClientPacketListenerVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/multiplayer/ClientPacketListenerVRMixin.java new file mode 100644 index 000000000..263ef8842 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/multiplayer/ClientPacketListenerVRMixin.java @@ -0,0 +1,140 @@ +package org.vivecraft.mixin.client_vr.multiplayer; + +import com.mojang.authlib.GameProfile; +import net.minecraft.client.ClientTelemetryManager; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.core.Registry; +import net.minecraft.network.Connection; +import net.minecraft.network.protocol.game.*; +import org.spongepowered.asm.mixin.Unique; +import org.vivecraft.client.VRPlayersClient; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.extensions.PlayerExtension; +import org.vivecraft.common.network.CommonNetworkHelper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.level.GameType; +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; +import org.vivecraft.client.network.ClientNetworking; +import org.vivecraft.client_vr.gameplay.screenhandlers.GuiHandler; +import org.vivecraft.common.VRServerPerms; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.provider.ControllerType; +import org.vivecraft.client_vr.settings.VRSettings; + +@Mixin(ClientPacketListener.class) +public class ClientPacketListenerVRMixin { + @Final + @Shadow + private Minecraft minecraft; + + @Inject(at = @At("TAIL"), method = "") + public void init(Minecraft minecraft, Screen screen, Connection connection, GameProfile gameProfile, ClientTelemetryManager clientTelemetryManager, CallbackInfo ci) { + if (ClientNetworking.needsReset) { + ClientDataHolderVR.getInstance().vrSettings.overrides.resetAll(); + ClientNetworking.resetServerSettings(); + ClientNetworking.displayedChatMessage = false; + ClientNetworking.displayedChatWarning = false; + ClientNetworking.needsReset = false; + } + } + + @Inject(at = @At("TAIL"), method = "handleLogin(Lnet/minecraft/network/protocol/game/ClientboundLoginPacket;)V") + public void login(ClientboundLoginPacket p_105030_, CallbackInfo callback) { + VRPlayersClient.clear(); + ClientNetworking.sendVersionInfo(); + + if (VRState.vrInitialized) { + // set the timer, even if vr is currently not running + ClientDataHolderVR.getInstance().vrPlayer.chatWarningTimer = 200; + ClientDataHolderVR.getInstance().vrPlayer.teleportWarning = true; + ClientDataHolderVR.getInstance().vrPlayer.vrSwitchWarning = false; + } + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/ClientTelemetryManager;onPlayerInfoReceived(Lnet/minecraft/world/level/GameType;Z)V"), method = "handleLogin(Lnet/minecraft/network/protocol/game/ClientboundLoginPacket;)V") + public void noTelemetry(ClientTelemetryManager instance, GameType gameType, boolean bl) { + // TODO, should we still cancel that in NONVR? + return; + } + + @Inject(at = @At("TAIL"), method = "onDisconnect") + public void disconnect(Component component, CallbackInfo ci) { + VRServerPerms.INSTANCE.setTeleportSupported(false); + if (VRState.vrInitialized) { + ClientDataHolderVR.getInstance().vrPlayer.setTeleportOverride(false); + } + ClientDataHolderVR.getInstance().vrSettings.overrides.resetAll(); + } + + @Inject(at = @At("TAIL"), method = "cleanup") + public void cleanup(CallbackInfo ci) { + ClientNetworking.needsReset = true; + } + @Inject(at = @At("TAIL"), method = "handleChat") + public void chat(ClientboundChatPacket clientboundChatPacket, CallbackInfo ci) { + String lastMsg = ((PlayerExtension)minecraft.player).getLastMsg(); + ((PlayerExtension)minecraft.player).setLastMsg(null); + if (VRState.vrRunning && (minecraft.player == null || lastMsg == null || !clientboundChatPacket.getMessage().getString().contains(lastMsg))) { + triggerHapticSound(); + } + } + + @Unique + private void triggerHapticSound(){ + ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); + if (dataholder.vrSettings.chatNotifications != VRSettings.ChatNotifications.NONE) { + if ((dataholder.vrSettings.chatNotifications == VRSettings.ChatNotifications.HAPTIC || dataholder.vrSettings.chatNotifications == VRSettings.ChatNotifications.BOTH) && !dataholder.vrSettings.seated) { + dataholder.vr.triggerHapticPulse(ControllerType.LEFT, 0.2F, 1000.0F, 1.0F);} + + if (dataholder.vrSettings.chatNotifications == VRSettings.ChatNotifications.SOUND || dataholder.vrSettings.chatNotifications == VRSettings.ChatNotifications.BOTH) { + Vec3 vec3 = dataholder.vrPlayer.vrdata_world_pre.getController(1).getPosition(); + minecraft.level.playLocalSound(vec3.x(), vec3.y(), vec3.z(), Registry.SOUND_EVENT.get(new ResourceLocation(dataholder.vrSettings.chatNotificationSound)), SoundSource.NEUTRAL, 0.3F, 0.1F, false); + } + } + } + + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/MultiPlayerGameMode;adjustPlayer(Lnet/minecraft/world/entity/player/Player;)V", shift = At.Shift.BEFORE), method = "handleRespawn") + public void readdInput2(ClientboundRespawnPacket clientboundRespawnPacket, CallbackInfo ci) { + ClientNetworking.resetServerSettings(); + ClientNetworking.sendVersionInfo(); + if (VRState.vrInitialized) { + // set the timer, even if vr is currently not running + ClientDataHolderVR.getInstance().vrPlayer.chatWarningTimer = 200; + ClientDataHolderVR.getInstance().vrPlayer.teleportWarning = true; + ClientDataHolderVR.getInstance().vrPlayer.vrSwitchWarning = false; + } + } + + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V", ordinal = 0, shift = At.Shift.AFTER), method = "handleRespawn(Lnet/minecraft/network/protocol/game/ClientboundRespawnPacket;)V") + public void respawn(ClientboundRespawnPacket packet, CallbackInfo callback) { + ClientDataHolderVR.getInstance().vrSettings.overrides.resetAll(); + } + + @Inject(at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/network/protocol/game/ClientboundCustomPayloadPacket;getData()Lnet/minecraft/network/FriendlyByteBuf;"), method = "handleCustomPayload(Lnet/minecraft/network/protocol/game/ClientboundCustomPayloadPacket;)V", cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD) + public void handlepacket(ClientboundCustomPayloadPacket p_105004_, CallbackInfo info, ResourceLocation channelID, FriendlyByteBuf buffer) { + if (channelID.equals(CommonNetworkHelper.CHANNEL)) { + var packetID = CommonNetworkHelper.PacketDiscriminators.values()[buffer.readByte()]; + ClientNetworking.handlePacket(packetID, buffer); + buffer.release(); + info.cancel(); + } + } + + @Inject(at = @At("HEAD"), method = "handleOpenScreen") + public void markScreenActive(ClientboundOpenScreenPacket clientboundOpenScreenPacket, CallbackInfo ci) { + GuiHandler.guiAppearOverBlockActive = true; + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client/multiplayer/MultiPlayerGameModeVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/multiplayer/MultiPlayerGameModeVRMixin.java similarity index 63% rename from common/src/main/java/org/vivecraft/mixin/client/multiplayer/MultiPlayerGameModeVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/multiplayer/MultiPlayerGameModeVRMixin.java index de3aa305b..32489918e 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/multiplayer/MultiPlayerGameModeVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/multiplayer/MultiPlayerGameModeVRMixin.java @@ -1,36 +1,43 @@ -package org.vivecraft.mixin.client.multiplayer; +package org.vivecraft.mixin.client_vr.multiplayer; -import org.vivecraft.ClientDataHolder; import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.world.level.Level; +import org.vivecraft.client_vr.ClientDataHolderVR; import net.minecraft.client.multiplayer.MultiPlayerGameMode; import net.minecraft.client.player.LocalPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; import net.minecraft.world.phys.BlockHitResult; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.vivecraft.api.ClientNetworkHelper; +import org.vivecraft.client.network.ClientNetworking; +import org.vivecraft.client_vr.VRState; @Mixin(MultiPlayerGameMode.class) public class MultiPlayerGameModeVRMixin { @Inject(at = @At("HEAD"), method = "useItem") public void overrideUse(Player player, Level level, InteractionHand interactionHand, CallbackInfoReturnable cir) { - ClientNetworkHelper.overrideLook(player, ClientDataHolder.getInstance().vrPlayer.getRightClickLookOverride(player, interactionHand.ordinal())); + if (VRState.vrRunning) { + ClientNetworking.overrideLook(player, ClientDataHolderVR.getInstance().vrPlayer.getRightClickLookOverride(player, interactionHand.ordinal())); + } } @Inject(at = @At("HEAD"), method = "releaseUsingItem") public void overrideReleaseUse(Player player, CallbackInfo ci) { - ClientNetworkHelper.overrideLook(player, ClientDataHolder.getInstance().vrPlayer.getRightClickLookOverride(player, player.getUsedItemHand().ordinal())); + if (VRState.vrRunning) { + ClientNetworking.overrideLook(player, ClientDataHolderVR.getInstance().vrPlayer.getRightClickLookOverride(player, player.getUsedItemHand().ordinal())); + } } @Inject(at = @At("HEAD"), method = "useItemOn") public void overrideUseOn(LocalPlayer localPlayer, ClientLevel clientLevel, InteractionHand interactionHand, BlockHitResult blockHitResult, CallbackInfoReturnable cir) { - ClientNetworkHelper.overrideLook(localPlayer, blockHitResult.getLocation().subtract(localPlayer.getEyePosition(1.0F)).normalize()); + if (VRState.vrRunning) { + ClientNetworking.overrideLook(localPlayer, blockHitResult.getLocation().subtract(localPlayer.getEyePosition(1.0F)).normalize()); + } } } diff --git a/common/src/main/java/org/vivecraft/mixin/client/particle/ItemPickupParticleVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/particle/ItemPickupParticleVRMixin.java similarity index 71% rename from common/src/main/java/org/vivecraft/mixin/client/particle/ItemPickupParticleVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/particle/ItemPickupParticleVRMixin.java index ac8f3907c..8dc79f74d 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/particle/ItemPickupParticleVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/particle/ItemPickupParticleVRMixin.java @@ -1,10 +1,12 @@ -package org.vivecraft.mixin.client.particle; +package org.vivecraft.mixin.client_vr.particle; import net.minecraft.world.entity.Entity; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.*; -import org.vivecraft.PehkuiHelper; -import org.vivecraft.Xplat; -import org.vivecraft.extensions.GameRendererExtension; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.mod_compat_vr.pehkui.PehkuiHelper; +import org.vivecraft.client.Xplat; +import org.vivecraft.client_vr.extensions.GameRendererExtension; import net.minecraft.client.Minecraft; import net.minecraft.client.particle.ItemPickupParticle; import net.minecraft.util.Mth; @@ -16,6 +18,9 @@ @Mixin(ItemPickupParticle.class) public class ItemPickupParticleVRMixin { + @Unique + private static final Minecraft mc = Minecraft.getInstance(); + @Final @Shadow private Entity target; @@ -23,13 +28,13 @@ public class ItemPickupParticleVRMixin { @Shadow private Entity itemEntity; + @Unique private Vec3 playerPos; @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;lerp(DDD)D", ordinal = 0), method = "render") public double updateX(double d, double e, double f) { - Minecraft mc = Minecraft.getInstance(); - if (target == mc.player) { - playerPos = ((GameRendererExtension)mc.gameRenderer).getControllerRenderPos(0); + if (VRState.vrRunning && target == mc.player) { + playerPos = ((GameRendererExtension) mc.gameRenderer).getControllerRenderPos(0); e = f = playerPos.x; } @@ -38,11 +43,11 @@ public double updateX(double d, double e, double f) { @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;lerp(DDD)D", ordinal = 1), method = "render") public double updateY(double d, double e, double f) { - if (target == Minecraft.getInstance().player) { + if (VRState.vrRunning && target == mc.player) { float offset = 0.5F; - if (Xplat.isModLoaded("pehkui")){ + if (Xplat.isModLoaded("pehkui")) { // pehkui changes the offset, need to account for that - offset *= PehkuiHelper.getPlayerScale(target, (float)d); + offset *= PehkuiHelper.getPlayerScale(target, (float) d); } // offset, so the particle is centered around the arm offset += itemEntity.getBbHeight(); @@ -54,7 +59,7 @@ public double updateY(double d, double e, double f) { @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;lerp(DDD)D", ordinal = 2), method = "render") public double updateZ(double d, double e, double f) { - if (target == Minecraft.getInstance().player) { + if (VRState.vrRunning && target == mc.player) { e = f = playerPos.z; playerPos = null; } diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/player/LocalPlayerVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/player/LocalPlayerVRMixin.java new file mode 100644 index 000000000..c8e553cfc --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/player/LocalPlayerVRMixin.java @@ -0,0 +1,568 @@ +package org.vivecraft.mixin.client_vr.player; + +import net.minecraft.network.protocol.Packet; +import net.minecraft.world.level.Level; +import org.spongepowered.asm.mixin.injection.*; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.common.network.CommonNetworkHelper; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.extensions.ItemInHandRendererExtension; +import org.vivecraft.client_vr.extensions.PlayerExtension; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.client.player.Input; +import net.minecraft.core.BlockPos; +import net.minecraft.network.protocol.game.ServerboundCustomPayloadPacket; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.util.Mth; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockState; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.vivecraft.client.network.ClientNetworking; +import org.vivecraft.client_vr.gameplay.VRPlayer; +import org.vivecraft.client_vr.render.VRFirstPersonArmSwing; +import org.vivecraft.client_vr.utils.external.jinfinadeck; +import org.vivecraft.client_vr.utils.external.jkatvr; + +import com.mojang.authlib.GameProfile; + +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.MoverType; +import net.minecraft.world.entity.Pose; +import net.minecraft.world.phys.Vec3; + +@Mixin(LocalPlayer.class) +public abstract class LocalPlayerVRMixin extends AbstractClientPlayer implements PlayerExtension { + + @Unique + private Vec3 moveMulIn = Vec3.ZERO; + @Unique + private boolean initFromServer; + @Unique + private int movementTeleportTimer; + @Unique + public String lastMsg = null; + @Unique + private boolean teleported; + @Unique + private double additionX; + @Unique + private double additionZ; + @Final + @Shadow + protected Minecraft minecraft; + @Shadow + private boolean startedUsingItem; + @Shadow + @Final + public ClientPacketListener connection; + private final ClientDataHolderVR dataholder = ClientDataHolderVR.getInstance(); + @Shadow + private InteractionHand usingItemHand; + @Shadow + public Input input; + + public LocalPlayerVRMixin(ClientLevel clientLevel, GameProfile gameProfile) { + super(clientLevel, gameProfile); + } + + @Shadow + protected abstract void updateAutoJump(float f, float g); + + @Shadow + public abstract void swing(InteractionHand interactionHand); + + @Inject(at = @At("TAIL"), method = "startRiding") + public void startRidingTracker(Entity entity, boolean bl, CallbackInfoReturnable cir) { + if (VRState.vrInitialized) { + ClientDataHolderVR.getInstance().vehicleTracker.onStartRiding(entity, (LocalPlayer) (Object) this); + } + } + + @Inject(at = @At("TAIL"), method = "removeVehicle") + public void stopRidingTracker(CallbackInfo ci) { + if (VRState.vrInitialized) { + ClientDataHolderVR.getInstance().vehicleTracker.onStopRiding((LocalPlayer) (Object) this); + } + } + + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/AbstractClientPlayer;tick()V", shift = At.Shift.BEFORE), method = "tick") + public void overrideLookPre(CallbackInfo ci) { + if (VRState.vrRunning) { + ClientDataHolderVR.getInstance().vrPlayer.doPermanantLookOverride((LocalPlayer) (Object) this, ClientDataHolderVR.getInstance().vrPlayer.vrdata_world_pre); + } + } + + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/AbstractClientPlayer;tick()V", shift = At.Shift.AFTER), method = "tick") + public void overridePose(CallbackInfo ci) { + if (VRState.vrRunning) { + ClientNetworking.overridePose((LocalPlayer) (Object) this); + ClientDataHolderVR.getInstance().vrPlayer.doPermanantLookOverride((LocalPlayer) (Object) this, ClientDataHolderVR.getInstance().vrPlayer.vrdata_world_pre); + } + } + + @ModifyVariable(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;isPassenger()Z"), ordinal = 1, method = "sendPosition") + private boolean directTeleport(boolean updateRotation) { + if (this.teleported) { + updateRotation = true; + ByteBuf bytebuf = Unpooled.buffer(); + bytebuf.writeFloat((float) this.getX()); + bytebuf.writeFloat((float) this.getY()); + bytebuf.writeFloat((float) this.getZ()); + byte[] abyte = new byte[bytebuf.readableBytes()]; + bytebuf.readBytes(abyte); + ServerboundCustomPayloadPacket serverboundcustompayloadpacket = ClientNetworking.getVivecraftClientPacket(CommonNetworkHelper.PacketDiscriminators.TELEPORT, abyte); + this.connection.send(serverboundcustompayloadpacket); + } + return updateRotation; + } + + // this seems to work without that as well, not sure if that is actually needed + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientPacketListener;send(Lnet/minecraft/network/protocol/Packet;)V"), method = "sendPosition", slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;isPassenger()Z"))) + public void noMovePacketsOnTeleport(ClientPacketListener instance, Packet packet) { + if (!this.teleported) { + instance.send(packet); + } + } + + @Inject(at = @At("TAIL"), method = "chat") + public void chatMsg(String string, CallbackInfo ci) { + this.lastMsg = string; + } + + @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/player/LocalPlayer;lastOnGround:Z", shift = At.Shift.AFTER, ordinal = 1), method = "sendPosition") + public void walkUp(CallbackInfo ci) { + // clear teleport here, after all the packets would be sent + this.teleported = false; + if (VRState.vrRunning && ClientDataHolderVR.getInstance().vrSettings.walkUpBlocks) { + this.minecraft.options.autoJump = false; + } + } + + @Override + public void swingArm(InteractionHand interactionhand, VRFirstPersonArmSwing interact) { + ((ItemInHandRendererExtension) this.minecraft.getItemInHandRenderer()).setSwingType(interact); + this.swing(interactionhand); + } + + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/AbstractClientPlayer;aiStep()V"), method = "aiStep") + public void ai(CallbackInfo ci) { + if (VRState.vrRunning) { + this.dataholder.vrPlayer.tick((LocalPlayer) (Object) this, this.minecraft, this.random); + } + } + + @Inject(at = @At("HEAD"), method = "move(Lnet/minecraft/world/entity/MoverType;Lnet/minecraft/world/phys/Vec3;)V", cancellable = true) + public void overwriteMove(MoverType pType, Vec3 pPos, CallbackInfo info) { + if (!VRState.vrRunning) { + return; + } + + this.moveMulIn = this.stuckSpeedMultiplier; + + if (pPos.length() != 0.0D && !this.isPassenger()) { + boolean flag = VRPlayer.get().getFreeMove(); + boolean flag1 = flag || ClientDataHolderVR.getInstance().vrSettings.simulateFalling && !this.onClimbable() + && !this.isShiftKeyDown(); + + if (ClientDataHolderVR.getInstance().climbTracker.isActive((LocalPlayer) (Object) this) + && (flag || ClientDataHolderVR.getInstance().climbTracker.isGrabbingLadder())) { + flag1 = true; + } + + Vec3 vec3 = VRPlayer.get().roomOrigin; + + if ((ClientDataHolderVR.getInstance().climbTracker.isGrabbingLadder() || flag + || ClientDataHolderVR.getInstance().swimTracker.isActive((LocalPlayer) (Object) this)) + && (this.zza != 0.0F || this.isFallFlying() || Math.abs(this.getDeltaMovement().x) > 0.01D + || Math.abs(this.getDeltaMovement().z) > 0.01D)) { + double d0 = vec3.x - this.getX(); + double d1 = vec3.z - this.getZ(); + double d2 = this.getX(); + double d3 = this.getZ(); + super.move(pType, pPos); + + if (ClientDataHolderVR.getInstance().vrSettings.walkUpBlocks) { + this.maxUpStep = this.getBlockJumpFactor() == 1.0F ? 1.0F : 0.6F; + } else { + this.maxUpStep = 0.6F; + this.updateAutoJump((float) (this.getX() - d2), (float) (this.getZ() - d3)); + } + + double d4 = this.getY() + this.getRoomYOffsetFromPose(); + VRPlayer.get().setRoomOrigin(this.getX() + d0, d4, this.getZ() + d1, false); + } else if (flag1) { + super.move(pType, new Vec3(0.0D, pPos.y, 0.0D)); + VRPlayer.get().setRoomOrigin(VRPlayer.get().roomOrigin.x, this.getY() + this.getRoomYOffsetFromPose(), + VRPlayer.get().roomOrigin.z, false); + } else { + this.onGround = true; + } + } else { + super.move(pType, pPos); + } + info.cancel(); + } + + @Override + public double getRoomYOffsetFromPose() { + double d0 = 0.0D; + + if (this.getPose() == Pose.FALL_FLYING || this.getPose() == Pose.SPIN_ATTACK + || this.getPose() == Pose.SWIMMING && !ClientDataHolderVR.getInstance().crawlTracker.crawlsteresis) { + d0 = -1.2D; + } + + return d0; + } + + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;sin(F)F"), method = "updateAutoJump") + private float modifyAutoJumpSin(float original) { + return VRState.vrRunning ? ClientDataHolderVR.getInstance().vrPlayer.vrdata_world_pre.getBodyYaw() * ((float) Math.PI / 180) : original; + } + + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;cos(F)F"), method = "updateAutoJump") + private float modifyAutoJumpCos(float original) { + return VRState.vrRunning ? ClientDataHolderVR.getInstance().vrPlayer.vrdata_world_pre.getBodyYaw() * ((float) Math.PI / 180) : original; + } + + @Override + public ItemStack eat(Level level, ItemStack itemStack) { + if (VRState.vrRunning && itemStack.isEdible() && ((LocalPlayer) (Object) this) == Minecraft.getInstance().player && itemStack.getHoverName().getString().equals("EAT ME")) { + ClientDataHolderVR.getInstance().vrPlayer.wfMode = 0.5D; + ClientDataHolderVR.getInstance().vrPlayer.wfCount = 400; + } + return super.eat(level, itemStack); + } + + @Override + public void moveTo(double pX, double p_20109_, double pY, float p_20111_, float pZ) { + super.moveTo(pX, p_20109_, pY, p_20111_, pZ); + if (!VRState.vrRunning) { + return; + } + if (this.initFromServer) { + ClientDataHolderVR.getInstance().vrPlayer.snapRoomOriginToPlayerEntity((LocalPlayer) (Object) this, false, false); + } + } + + @Override + public void absMoveTo(double pX, double p_19892_, double pY, float p_19894_, float pZ) { + super.absMoveTo(pX, p_19892_, pY, p_19894_, pZ); + if (!VRState.vrRunning) { + return; + } + ClientDataHolderVR.getInstance().vrPlayer.snapRoomOriginToPlayerEntity((LocalPlayer) (Object) this, false, false); + if (!this.initFromServer) { + this.moveTo(pX, p_19892_, pY, p_19894_, pZ); + this.initFromServer = true; + } + } + + @Override + public void setPos(double pX, double p_20211_, double pY) { + this.initFromServer = true; + if (!VRState.vrRunning) { + super.setPos(pX, p_20211_, pY); + return; + } + double d0 = this.getX(); + double d1 = this.getY(); + double d2 = this.getZ(); + super.setPos(pX, p_20211_, pY); + double d3 = this.getX(); + double d4 = this.getY(); + double d5 = this.getZ(); + Entity entity = this.getVehicle(); + + if (this.isPassenger()) { + Vec3 vec3 = ClientDataHolderVR.getInstance().vehicleTracker.Premount_Pos_Room; + vec3 = vec3.yRot(ClientDataHolderVR.getInstance().vrPlayer.vrdata_world_pre.rotation_radians); + pX = pX - vec3.x; + p_20211_ = ClientDataHolderVR.getInstance().vehicleTracker.getVehicleFloor(entity, p_20211_); + pY = pY - vec3.z; + ClientDataHolderVR.getInstance().vrPlayer.setRoomOrigin(pX, p_20211_, pY, pX + p_20211_ + pY == 0.0D); + } else { + Vec3 vec31 = ClientDataHolderVR.getInstance().vrPlayer.roomOrigin; + VRPlayer.get().setRoomOrigin(vec31.x + (d3 - d0), vec31.y + (d4 - d1), vec31.z + (d5 - d2), + pX + p_20211_ + pY == 0.0D); + } + } + + public void doDrag() { + float friction = 0.91F; + + if (this.onGround) { + friction = this.level.getBlockState(this.getBlockPosBelowThatAffectsMyMovement()).getBlock().getFriction() * 0.91F; + } + double xFactor = friction; + double zFactor = friction; + // account for stock drag code we can't change in LivingEntity#travel + this.setDeltaMovement(this.getDeltaMovement().x / xFactor, this.getDeltaMovement().y, this.getDeltaMovement().z / zFactor); + + double addFactor = dataholder.vrSettings.inertiaFactor.getFactor(); + + double boundedAdditionX = getBoundedAddition(additionX); + double targetLimitX = (friction * boundedAdditionX) / (1f - friction); + double multiFactorX = targetLimitX / (friction * (targetLimitX + (boundedAdditionX * addFactor))); + xFactor *= multiFactorX; + + double boundedAdditionZ = getBoundedAddition(additionZ); + double targetLimitZ = (friction * boundedAdditionZ) / (1f - friction); + double multiFactorZ = targetLimitZ / (friction * (targetLimitZ + (boundedAdditionZ * addFactor))); + zFactor *= multiFactorZ; + + this.setDeltaMovement(this.getDeltaMovement().x * xFactor, this.getDeltaMovement().y, this.getDeltaMovement().z * zFactor); + } + + public double getBoundedAddition(double orig) { + return orig >= -1.0E-6D && orig <= 1.0E-6D ? 1.0E-6D : orig; + } + + @Override + public void moveRelative(float pAmount, Vec3 pRelative) { + if (!VRState.vrRunning) { + super.moveRelative(pAmount, pRelative); + return; + } + + double d0 = pRelative.y; + double d1 = pRelative.x; + double d2 = pRelative.z; + VRPlayer vrplayer = this.dataholder.vrPlayer; + + if (vrplayer.getFreeMove()) { + double d3 = d1 * d1 + d2 * d2; + double d4 = 0.0D; + double d5 = 0.0D; + double d6 = 0.0D; + double d7 = 1.0D; + + if (d3 >= (double) 1.0E-4F || ClientDataHolderVR.katvr) { + d3 = (double) Mth.sqrt((float) d3); + + if (d3 < 1.0D && !ClientDataHolderVR.katvr) { + d3 = 1.0D; + } + + d3 = (double) pAmount / d3; + d1 = d1 * d3; + d2 = d2 * d3; + Vec3 vec3 = new Vec3(d1, 0.0D, d2); + VRPlayer vrplayer1 = this.dataholder.vrPlayer; + boolean isFlyingOrSwimming = !this.isPassenger() && (this.getAbilities().flying || this.isSwimming()); + + if (ClientDataHolderVR.katvr) { + jkatvr.query(); + d3 = (double) (jkatvr.getSpeed() * jkatvr.walkDirection() * this.dataholder.vrSettings.movementSpeedMultiplier); + vec3 = new Vec3(0.0D, 0.0D, d3); + + if (isFlyingOrSwimming) { + vec3 = vec3.xRot(vrplayer1.vrdata_world_pre.hmd.getPitch() * ((float) Math.PI / 180F)); + } + + vec3 = vec3.yRot(-jkatvr.getYaw() * ((float) Math.PI / 180F) + this.dataholder.vrPlayer.vrdata_world_pre.rotation_radians); + } else if (ClientDataHolderVR.infinadeck) { + jinfinadeck.query(); + d3 = (double) (jinfinadeck.getSpeed() * jinfinadeck.walkDirection() * this.dataholder.vrSettings.movementSpeedMultiplier); + vec3 = new Vec3(0.0D, 0.0D, d3); + + if (isFlyingOrSwimming) { + vec3 = vec3.xRot(vrplayer1.vrdata_world_pre.hmd.getPitch() * ((float) Math.PI / 180F)); + } + + vec3 = vec3.yRot(-jinfinadeck.getYaw() * ((float) Math.PI / 180F) + this.dataholder.vrPlayer.vrdata_world_pre.rotation_radians); + } else if (this.dataholder.vrSettings.seated) { + int j = 0; + if (this.dataholder.vrSettings.seatedUseHMD) { + j = 1; + } + + if (isFlyingOrSwimming) { + vec3 = vec3.xRot(vrplayer1.vrdata_world_pre.getController(j).getPitch() * ((float) Math.PI / 180F)); + } + + vec3 = vec3.yRot(-vrplayer1.vrdata_world_pre.getController(j).getYaw() * ((float) Math.PI / 180F)); + } else { + + VRSettings.FreeMove freeMoveType = !this.isPassenger() && this.getAbilities().flying && this.dataholder.vrSettings.vrFreeMoveFlyMode != VRSettings.FreeMove.AUTO ? this.dataholder.vrSettings.vrFreeMoveFlyMode : this.dataholder.vrSettings.vrFreeMoveMode; + + if (isFlyingOrSwimming) { + switch (this.dataholder.vrSettings.vrFreeMoveMode) { + case CONTROLLER: + vec3 = vec3.xRot(vrplayer1.vrdata_world_pre.getController(1).getPitch() * ((float) Math.PI / 180F)); + break; + case HMD: + case RUN_IN_PLACE: + case ROOM: + vec3 = vec3.xRot(vrplayer1.vrdata_world_pre.hmd.getPitch() * ((float) Math.PI / 180F)); + } + } + if (this.dataholder.jumpTracker.isjumping()) { + vec3 = vec3.yRot(-vrplayer1.vrdata_world_pre.hmd.getYaw() * ((float) Math.PI / 180F)); + } else { + switch (this.dataholder.vrSettings.vrFreeMoveMode) { + case CONTROLLER: + vec3 = vec3.yRot(-vrplayer1.vrdata_world_pre.getController(1).getYaw() * ((float) Math.PI / 180F)); + break; + + case HMD: + vec3 = vec3.yRot(-vrplayer1.vrdata_world_pre.hmd.getYaw() * ((float) Math.PI / 180F)); + break; + + case RUN_IN_PLACE: + vec3 = vec3.yRot((float) (-this.dataholder.runTracker.getYaw() * (double) ((float) Math.PI / 180F))); + vec3 = vec3.scale(this.dataholder.runTracker.getSpeed()); + + case ROOM: + vec3 = vec3.yRot((180.0F + this.dataholder.vrSettings.worldRotation) * ((float) Math.PI / 180F)); + } + } + } + + d4 = vec3.x; + d6 = vec3.y; + d5 = vec3.z; + + if (!this.getAbilities().flying && !this.wasTouchingWater) { + d7 = this.dataholder.vrSettings.inertiaFactor.getFactor(); + } + + float f = 1.0F; + + if (this.getAbilities().flying) { + f = 5.0F; + } + + this.setDeltaMovement(this.getDeltaMovement().x + d4 * d7, this.getDeltaMovement().y + d6 * (double) f, this.getDeltaMovement().z + d5 * d7); + this.additionX = d4; + this.additionZ = d5; + } + + if (!this.getAbilities().flying && !this.wasTouchingWater) { + this.doDrag(); + } + } + } + + @Override + public void die(DamageSource pCause) { + super.die(pCause); + if (!VRState.vrRunning) { + return; + } + ClientDataHolderVR.getInstance().vr.triggerHapticPulse(0, 2000); + ClientDataHolderVR.getInstance().vr.triggerHapticPulse(1, 2000); + } + + @Override + public boolean getInitFromServer() { + return this.initFromServer; + } + + @Override + public void setMovementTeleportTimer(int value) { + this.movementTeleportTimer = value; + } + + @Override + public int getMovementTeleportTimer() { + return movementTeleportTimer; + } + + @Override + public float getMuhSpeedFactor() { + return this.moveMulIn.lengthSqr() > 0.0D ? (float) ((double) this.getBlockSpeedFactor() * (this.moveMulIn.x + this.moveMulIn.z) / 2.0D) : this.getBlockSpeedFactor(); + } + + @Override + public float getMuhJumpFactor() { + return this.moveMulIn.lengthSqr() > 0.0D ? (float) ((double) this.getBlockJumpFactor() * this.moveMulIn.y) : this.getBlockJumpFactor(); + } + + @Override + public void stepSound(BlockPos blockforNoise, Vec3 soundPos) { + BlockState blockstate = this.level.getBlockState(blockforNoise); + Block block = blockstate.getBlock(); + SoundType soundtype = block.getSoundType(blockstate); + BlockState blockstate1 = this.level.getBlockState(blockforNoise.above()); + + if (blockstate1.getBlock() == Blocks.SNOW) { + soundtype = Blocks.SNOW.getSoundType(blockstate1); + } + + float f = soundtype.getVolume(); + float f1 = soundtype.getPitch(); + SoundEvent soundevent = soundtype.getStepSound(); + + if (!this.isSilent() && !block.defaultBlockState().getMaterial().isLiquid()) { + this.level.playSound((LocalPlayer) null, soundPos.x, soundPos.y, soundPos.z, soundevent, this.getSoundSource(), f, f1); + } + } + + @Override + public String getLastMsg() { + return lastMsg; + } + + @Override + public void setLastMsg(String string) { + this.lastMsg = string; + } + + @Override + public boolean isClimbeyJumpEquipped() { + return this.getItemBySlot(EquipmentSlot.FEET) != null && ClientDataHolderVR.getInstance().jumpTracker.isBoots(this.getItemBySlot(EquipmentSlot.FEET)); + } + + @Override + public boolean isClimbeyClimbEquipped() { + if (this.getMainHandItem() != null && ClientDataHolderVR.getInstance().climbTracker.isClaws(this.getMainHandItem())) { + return true; + } else { + return this.getOffhandItem() != null && ClientDataHolderVR.getInstance().climbTracker.isClaws(this.getOffhandItem()); + } + } + + @Override + public void releaseUsingItem() { + ClientNetworking.sendActiveHand((byte) this.getUsedItemHand().ordinal()); + super.releaseUsingItem(); + } + @Override + public void setItemInUseClient(ItemStack item, InteractionHand hand) { + this.useItem = item; + + if (item != ItemStack.EMPTY) { + this.startedUsingItem = true; + this.usingItemHand = hand; + } else { + this.startedUsingItem = false; + this.usingItemHand = hand; + } + } + + @Override + public void setTeleported(boolean teleported) { + this.teleported = teleported; + } + + @Override + public void setItemInUseCountClient(int count) { + this.useItemRemaining = count; + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/GameRendererVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/GameRendererVRMixin.java new file mode 100644 index 000000000..714c88326 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/GameRendererVRMixin.java @@ -0,0 +1,2534 @@ +package org.vivecraft.mixin.client_vr.renderer; + + +import com.mojang.blaze3d.pipeline.RenderTarget; +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.*; +import com.mojang.blaze3d.vertex.VertexFormat.Mode; +import net.minecraft.client.multiplayer.ClientLevel; +import com.mojang.math.Matrix3f; +import com.mojang.math.Matrix4f; +import com.mojang.math.Vector3f; +import net.minecraft.Util; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.screens.*; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.resources.model.ModelBakery; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.resources.ResourceManagerReloadListener; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.Mth; +import net.minecraft.util.profiling.ProfilerFiller; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; +import org.apache.commons.lang3.tuple.Triple; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL43C; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.At.Shift; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; +import org.vivecraft.client.VivecraftVRMod; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.mod_compat_vr.ShadersHelper; +import org.vivecraft.client_vr.MethodHolder; +import org.vivecraft.client.Xevents; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_xr.render_pass.RenderPassType; +import org.vivecraft.client_vr.extensions.GameRendererExtension; +import org.vivecraft.client_vr.extensions.ItemInHandRendererExtension; +import org.vivecraft.client_vr.extensions.LevelRendererExtension; +import org.vivecraft.client_vr.extensions.PlayerExtension; +import org.vivecraft.client.extensions.RenderTargetExtension; +import org.vivecraft.client.network.ClientNetworking; +import org.vivecraft.client_vr.VRData; +import org.vivecraft.client_vr.gameplay.VRPlayer; +import org.vivecraft.client_vr.gameplay.screenhandlers.GuiHandler; +import org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler; +import org.vivecraft.client_vr.gameplay.screenhandlers.RadialHandler; +import org.vivecraft.client_vr.gameplay.trackers.BowTracker; +import org.vivecraft.client_vr.gameplay.trackers.TelescopeTracker; +import org.vivecraft.mixin.client.blaze3d.RenderSystemAccessor; +import org.vivecraft.client_vr.provider.ControllerType; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client_vr.render.XRCamera; +import org.vivecraft.client_vr.render.VRWidgetHelper; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.client.utils.Utils; + +import java.nio.file.Path; +import java.util.Calendar; + +@Mixin(GameRenderer.class) +public abstract class GameRendererVRMixin + implements ResourceManagerReloadListener, AutoCloseable, GameRendererExtension { + + private static final ClientDataHolderVR DATA_HOLDER = ClientDataHolderVR.getInstance(); + @Unique + public float minClipDistance = 0.02F; + @Unique + public Vec3 crossVec; + @Unique + public Matrix4f thirdPassProjectionMatrix = new Matrix4f(); + @Unique + public boolean inwater; + @Unique + public boolean wasinwater; + @Unique + public boolean inportal; + @Unique + public boolean onfire; + @Unique + public float inBlock = 0.0F; + @Unique + public double rveX; + @Unique + public double rveY; + @Unique + public double rveZ; + @Unique + public double rvelastX; + @Unique + public double rvelastY; + @Unique + public double rvelastZ; + @Unique + public double rveprevX; + @Unique + public double rveprevY; + @Unique + public double rveprevZ; + @Unique + public float rveyaw; + @Unique + public float rvepitch; + @Unique + private float rvelastyaw; + @Unique + private float rvelastpitch; + @Unique + private float rveHeight; + @Unique + private boolean cached; + @Unique + private int polyblendsrca; + @Unique + private int polyblenddsta; + @Unique + private int polyblendsrcrgb; + @Unique + private int polyblenddstrgb; + // private net.optifine.shaders.Program prog; + @Unique + private boolean polyblend; + @Unique + private boolean polytex; + @Unique + private boolean polylight; + @Unique + private boolean polycull; + @Unique + private Vec3i tpUnlimitedColor = new Vec3i(-83, -40, -26); + @Unique + private Vec3i tpLimitedColor = new Vec3i(-51, -87, -51); + @Unique + private Vec3i tpInvalidColor = new Vec3i(83, 83, 83); + + @Unique // TODO added by optifine... + private float clipDistance = 128.0F; + + @Unique + private PoseStack stack; + + @Shadow + @Final + private Minecraft minecraft; + + @Shadow + private float renderDistance; + + @Shadow + @Final + private LightTexture lightTexture; + @Shadow + private float zoom; + @Shadow + private float zoomX; + @Shadow + private float zoomY; + @Shadow + private float fov; + + @Shadow + private float oldFov; + @Shadow + @Final + private RenderBuffers renderBuffers; + @Shadow + @Final + public ItemInHandRenderer itemInHandRenderer; + @Shadow + private int tick; + @Shadow + private boolean renderHand; + + @Shadow + public abstract Matrix4f getProjectionMatrix(double fov); + + @Shadow + protected abstract double getFov(Camera mainCamera2, float partialTicks, boolean b); + + @Shadow + public abstract void resetProjectionMatrix(Matrix4f projectionMatrix); + + @Shadow + protected abstract void renderItemActivationAnimation(int i, int j, float par1); + + @Shadow + public abstract void pick(float f); + + @Shadow + private boolean effectActive; + + @Shadow + private long lastActiveTime; + + @Shadow + public abstract OverlayTexture overlayTexture(); + + @Shadow + @Final + private Camera mainCamera; + + @Override + public double getRveY() { + return rveY; + } + + @Override + public float inBlock() { + return inBlock; + } + + @Redirect(method = "", at = @At(value = "NEW", target = "net/minecraft/client/Camera")) + Camera replaceCamera() { + return new XRCamera(); + } + + @Redirect(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;level:Lnet/minecraft/client/multiplayer/ClientLevel;"), method = "pick") + public ClientLevel appendCheck(Minecraft instance) { + if (!VRState.vrRunning) { + return instance.level; + } + return ClientDataHolderVR.getInstance().vrPlayer.vrdata_world_render == null ? null : instance.level; + } + + @ModifyVariable(at = @At("STORE"), method = "pick(F)V", ordinal = 0) + public Vec3 rayTrace(Vec3 original) { + if (!VRState.vrRunning) { + return original; + } + this.minecraft.hitResult = GameRendererVRMixin.DATA_HOLDER.vrPlayer.rayTraceBlocksVR(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render, 0, this.minecraft.gameMode.getPickRange(), false); + this.crossVec = GameRendererVRMixin.DATA_HOLDER.vrPlayer.AimedPointAtDistance(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render, 0, this.minecraft.gameMode.getPickRange()); + return GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(0).getPosition(); + } + + @ModifyVariable(at = @At("STORE"), method = "pick(F)V", ordinal = 1) + public Vec3 vrVec31(Vec3 original) { + if (!VRState.vrRunning) { + return original; + } + return GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(0).getDirection(); + } + + //TODO Vivecraft add riding check in case your hand is somewhere inappropriate + + @Inject(at = @At("HEAD"), method = "tickFov", cancellable = true) + public void noFOVchangeInVR(CallbackInfo ci){ + if (!RenderPassType.isVanilla()) { + this.oldFov = this.fov = 1.0f; + ci.cancel(); + } + } + + @Inject(at = @At("HEAD"), method = "getFov(Lnet/minecraft/client/Camera;FZ)D", cancellable = true) + public void fov(Camera camera, float f, boolean bl, CallbackInfoReturnable info) { + if (this.minecraft.level == null || isInMenuRoom()) { // Vivecraft: using this on the main menu + info.setReturnValue(this.minecraft.options.fov); + } + } + + @Inject(at = @At("HEAD"), method = "getProjectionMatrix(D)Lcom/mojang/math/Matrix4f;", cancellable = true) + public void projection(double d, CallbackInfoReturnable info) { + if (!VRState.vrRunning) { + return; + } + PoseStack posestack = new PoseStack(); + setupClipPlanes(); + if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.LEFT) { + posestack.mulPoseMatrix(GameRendererVRMixin.DATA_HOLDER.vrRenderer.eyeproj[0]); + } else if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.RIGHT) { + posestack.mulPoseMatrix(GameRendererVRMixin.DATA_HOLDER.vrRenderer.eyeproj[1]); + } else if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.THIRD) { + if (GameRendererVRMixin.DATA_HOLDER.vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY) { + posestack.mulPoseMatrix( + Matrix4f.perspective((double) GameRendererVRMixin.DATA_HOLDER.vrSettings.mixedRealityFov, + GameRendererVRMixin.DATA_HOLDER.vrSettings.mixedRealityAspectRatio, this.minClipDistance, + this.clipDistance)); + } else { + posestack.mulPoseMatrix( + Matrix4f.perspective((double) GameRendererVRMixin.DATA_HOLDER.vrSettings.mixedRealityFov, + (float) this.minecraft.getWindow().getScreenWidth() + / (float) this.minecraft.getWindow().getScreenHeight(), + this.minClipDistance, this.clipDistance)); + } + this.thirdPassProjectionMatrix = new Matrix4f(posestack.last().pose()); + } else if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.CAMERA) { + posestack.mulPoseMatrix(Matrix4f.perspective((double) GameRendererVRMixin.DATA_HOLDER.vrSettings.handCameraFov, + (float) GameRendererVRMixin.DATA_HOLDER.vrRenderer.cameraFramebuffer.viewWidth + / (float) GameRendererVRMixin.DATA_HOLDER.vrRenderer.cameraFramebuffer.viewHeight, + this.minClipDistance, this.clipDistance)); + } else if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.SCOPEL + || GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.SCOPER) { + posestack.mulPoseMatrix(Matrix4f.perspective(70f / 8f, 1.0F, 0.05F, this.clipDistance)); + + } else { + if (this.zoom != 1.0F) { + posestack.translate((double) this.zoomX, (double) (-this.zoomY), 0.0D); + posestack.scale(this.zoom, this.zoom, 1.0F); + } + posestack.mulPoseMatrix(Matrix4f.perspective((float) d, (float) this.minecraft.getWindow().getScreenWidth() + / (float) this.minecraft.getWindow().getScreenHeight(), 0.05F, this.clipDistance)); + } + info.setReturnValue(posestack.last().pose()); + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;isWindowActive()Z"), method = "render") + public boolean focus(Minecraft instance) { + return VRState.vrRunning || instance.isWindowActive(); + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;pauseGame(Z)V"), method = "render") + public void pause(Minecraft instance, boolean bl) { + if (!VRState.vrRunning || ClientDataHolderVR.getInstance().currentPass == RenderPass.LEFT) { + instance.pauseGame(bl); + } + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/Util;getMillis()J"), method = "render") + public long active() { + if (!VRState.vrRunning || ClientDataHolderVR.getInstance().currentPass == RenderPass.LEFT) { + return Util.getMillis(); + } else { + return this.lastActiveTime; + } + } + + @Inject(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;viewport(IIII)V", shift = Shift.AFTER), method = "Lnet/minecraft/client/renderer/GameRenderer;render(FJZ)V") + public void matrix(float partialTicks, long nanoTime, boolean renderWorldIn, CallbackInfo info) { + this.resetProjectionMatrix(this.getProjectionMatrix(minecraft.options.fov)); + RenderSystem.getModelViewStack().setIdentity(); + RenderSystem.applyModelViewMatrix(); + } + + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;renderLevel(FJLcom/mojang/blaze3d/vertex/PoseStack;)V"), method = "render") + public PoseStack newStack(PoseStack poseStack) { + this.stack = poseStack; + return poseStack; + } + + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;renderLevel(FJLcom/mojang/blaze3d/vertex/PoseStack;)V", shift = Shift.AFTER), method = "Lnet/minecraft/client/renderer/GameRenderer;render(FJZ)V") + public void renderoverlay(float f, long l, boolean bl, CallbackInfo ci) { + if (VRState.vrRunning && GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.THIRD + && GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.CAMERA) { + this.renderFaceOverlay(f, this.stack); + } + } + + @Redirect(at = @At(value = "FIELD", target = "Lnet/minecraft/client/renderer/GameRenderer;effectActive:Z"), method = "render") + public boolean effect(GameRenderer instance) { + return this.effectActive && ClientDataHolderVR.getInstance().currentPass != RenderPass.THIRD; + } + + @Inject(at = @At("HEAD"), method = "takeAutoScreenshot", cancellable = true) + public void noScreenshotInMenu(Path path, CallbackInfo ci) { + if (VRState.vrRunning && isInMenuRoom()) { + ci.cancel(); + } + } + + @Unique + private boolean shouldDrawScreen = false; + @Unique + private boolean shouldDrawGui = false; + + @Override + public void setShouldDrawScreen(boolean shouldDrawScreen) { + this.shouldDrawScreen = shouldDrawScreen; + } + + @Override + public void setShouldDrawGui(boolean shouldDrawGui) { + this.shouldDrawGui = shouldDrawGui; + } + + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getWindow()Lcom/mojang/blaze3d/platform/Window;", shift = Shift.BEFORE, ordinal = 6), method = "Lnet/minecraft/client/renderer/GameRenderer;render(FJZ)V", cancellable = true) + public void mainMenu(float partialTicks, long nanoTime, boolean renderWorldIn, CallbackInfo info) { + if (RenderPassType.isVanilla()) { + return; + } + + if (!renderWorldIn && shouldDrawScreen) { + shouldDrawScreen = false; + return; + } + if (!renderWorldIn || this.minecraft.level == null) { + this.minecraft.getProfiler().push("MainMenu"); + GL11.glDisable(GL11.GL_STENCIL_TEST); + + PoseStack pMatrixStack = new PoseStack(); + applyVRModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, pMatrixStack); + this.renderGuiLayer(partialTicks, true, pMatrixStack); + + if (KeyboardHandler.Showing) { + if (GameRendererVRMixin.DATA_HOLDER.vrSettings.physicalKeyboard) { + this.renderPhysicalKeyboard(partialTicks, pMatrixStack); + } else { + this.render2D(partialTicks, KeyboardHandler.Framebuffer, KeyboardHandler.Pos_room, + KeyboardHandler.Rotation_room, DATA_HOLDER.vrSettings.menuAlwaysFollowFace && isInMenuRoom(), pMatrixStack); + } + } + + if ((GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.THIRD + || GameRendererVRMixin.DATA_HOLDER.vrSettings.mixedRealityRenderHands) + && GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.CAMERA) { + this.renderVRHands(partialTicks, true, true, true, true, pMatrixStack); + } + } + this.minecraft.getProfiler().pop(); + info.cancel(); + } + + @ModifyVariable(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getWindow()Lcom/mojang/blaze3d/platform/Window;", shift = Shift.AFTER, ordinal = 6), method = "render(FJZ)V", ordinal = 0, argsOnly = true) + private boolean renderGui(boolean doRender) { + if (RenderPassType.isVanilla()) { + return doRender; + } + return shouldDrawGui; + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;renderItemActivationAnimation(IIF)V"), method = "render(FJZ)V") + private void noItemActivationAnimationOnGUI(GameRenderer instance, int i, int j, float f) { + if (RenderPassType.isVanilla()) { + renderItemActivationAnimation(i, j, f); + } + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Gui;render(Lcom/mojang/blaze3d/vertex/PoseStack;F)V"), method = "render(FJZ)V") + private void noGUIwithViewOnly(Gui instance, PoseStack poseStack, float f) { + if (RenderPassType.isVanilla() || !ClientDataHolderVR.viewonly) { + instance.render(poseStack, f); + } + } + + @Inject(at = @At("HEAD"), method = "renderConfusionOverlay", cancellable = true) + private void noConfusionOverlayOnGUI(float f, CallbackInfo ci) { + if (DATA_HOLDER.currentPass == RenderPass.GUI) { + ci.cancel(); + } + } + + @Redirect(method = "renderItemActivationAnimation", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;translate(DDD)V")) + private void noTranslateItem(PoseStack poseStack, double x, double y, double z) { + if (RenderPassType.isVanilla()) { + poseStack.translate(x, y, z); + } + } + + @Redirect(method = "renderItemActivationAnimation", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;scale(FFF)V")) + private void noScaleItem(PoseStack poseStack, float x, float y, float z) { + if (RenderPassType.isVanilla()) { + poseStack.scale(x, y, z); + } + } + + @Inject(method = "renderItemActivationAnimation", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;scale(FFF)V"), locals = LocalCapture.CAPTURE_FAILHARD) + private void transformItem(int i, int j, float f, CallbackInfo ci, int k, float g, float h, float l, float m, float n, float o, float p, PoseStack posestack) { + if (!RenderPassType.isVanilla()) { + float sinN = Mth.sin(n) * 0.5F; + posestack.translate(0, 0, sinN - 1.0); + if (ClientDataHolderVR.getInstance().currentPass == RenderPass.THIRD) { + sinN *= ClientDataHolderVR.getInstance().vrSettings.mixedRealityFov / 70.0; + } + applyVRModelView(ClientDataHolderVR.getInstance().currentPass, posestack); + applystereo(ClientDataHolderVR.getInstance().currentPass, posestack); + posestack.scale(sinN, sinN, sinN); + posestack.mulPose(Vector3f.YP.rotationDegrees(-ClientDataHolderVR.getInstance().vrPlayer.getVRDataWorld().getEye(ClientDataHolderVR.getInstance().currentPass).getYaw())); + posestack.mulPose(Vector3f.XP.rotationDegrees(-ClientDataHolderVR.getInstance().vrPlayer.getVRDataWorld().getEye(ClientDataHolderVR.getInstance().currentPass).getPitch())); + } + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;pick(F)V"), method = "renderLevel(FJLcom/mojang/blaze3d/vertex/PoseStack;)V") + public void renderpick(GameRenderer g, float pPartialTicks) { + if (RenderPassType.isVanilla()) { + g.pick(pPartialTicks); + return; + } + + if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.LEFT) { + this.pick(pPartialTicks); + + if (this.minecraft.hitResult != null && this.minecraft.hitResult.getType() != HitResult.Type.MISS) { + this.crossVec = this.minecraft.hitResult.getLocation(); + } + + if (this.minecraft.screen == null) { + GameRendererVRMixin.DATA_HOLDER.teleportTracker.updateTeleportDestinations((GameRenderer) (Object) this, this.minecraft, + this.minecraft.player); + } + } + + this.cacheRVEPos((LivingEntity) this.minecraft.getCameraEntity()); + this.setupRVE(); + this.setupOverlayStatus(pPartialTicks); + } + + @Inject(at = @At("HEAD"), method = "bobHurt", cancellable = true) + public void removeBobHurt(PoseStack poseStack, float f, CallbackInfo ci) { + if (!RenderPassType.isVanilla()) { + ci.cancel(); + } + } + + @Inject(method = "bobView", at = @At("HEAD"), cancellable = true) + void cancelBobView(PoseStack matrixStack, float f, CallbackInfo ci) { + if (!RenderPassType.isVanilla()) { + ci.cancel(); + } + } + + @ModifyVariable(at = @At(value = "STORE"), method = "renderLevel") + public int reduceNauseaSpeed(int oldVal) { + if (!RenderPassType.isVanilla()) { + return oldVal / 5; + } else { + return oldVal; + } + } + + @ModifyVariable(at = @At(value = "STORE", ordinal = 1), ordinal = 2, method = "renderLevel") + public float reduceNauseaAffect(float oldVal) { + if (!RenderPassType.isVanilla()) { + // scales down the effect from (1,0.65) to (1,0.9) + return 1f - (1f - oldVal) * 0.25f; + } else { + return oldVal; + } + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/profiling/ProfilerFiller;popPush(Ljava/lang/String;)V", ordinal = 1), method = "renderLevel") + public void noHandProfiler(ProfilerFiller instance, String s) { + GL11.glDisable(GL11.GL_STENCIL_TEST); + this.minecraft.getProfiler().popPush("ShadersEnd"); //TODO needed? + } + + @Redirect(at = @At(value = "FIELD", target = "Lnet/minecraft/client/renderer/GameRenderer;renderHand:Z"), method = "renderLevel") + public boolean noHandsVR(GameRenderer instance) { + return RenderPassType.isVanilla() && renderHand; + } + + @Inject(at = @At(value = "TAIL", shift = Shift.BEFORE), method = "renderLevel(FJLcom/mojang/blaze3d/vertex/PoseStack;)V") + public void restoreVE(float f, long j, PoseStack p, CallbackInfo i) { + if (RenderPassType.isVanilla()) { + return; + } + this.restoreRVEPos((LivingEntity) this.minecraft.getCameraEntity()); + } + + private void setupOverlayStatus(float partialTicks) { + this.inBlock = 0.0F; + this.inwater = false; + this.onfire = false; + + if (!this.minecraft.player.isSpectator() && !this.isInMenuRoom() && this.minecraft.player.isAlive()) { + Vec3 vec3 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getEye(GameRendererVRMixin.DATA_HOLDER.currentPass).getPosition(); + Triple triple = ((ItemInHandRendererExtension) this.itemInHandRenderer).getNearOpaqueBlock(vec3, (double) this.minClipDistance); + + if (triple != null && !Xevents.renderBlockOverlay(this.minecraft.player, new PoseStack(), triple.getMiddle(), triple.getRight())) { + this.inBlock = triple.getLeft(); + } else { + this.inBlock = 0.0F; + } + + this.inwater = this.minecraft.player.isEyeInFluid(FluidTags.WATER) && !Xevents.renderWaterOverlay(this.minecraft.player, new PoseStack()); + this.onfire = GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.THIRD + && GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.CAMERA && this.minecraft.player.isOnFire() && !Xevents.renderFireOverlay(this.minecraft.player, new PoseStack()); + } + } + + @Override + public void setupRVE() { + if (this.cached) { + VRData.VRDevicePose vrdata$vrdevicepose = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render + .getEye(GameRendererVRMixin.DATA_HOLDER.currentPass); + Vec3 vec3 = vrdata$vrdevicepose.getPosition(); + LivingEntity livingentity = (LivingEntity) this.minecraft.getCameraEntity(); + livingentity.setPosRaw(vec3.x, vec3.y, vec3.z); + livingentity.xOld = vec3.x; + livingentity.yOld = vec3.y; + livingentity.zOld = vec3.z; + livingentity.xo = vec3.x; + livingentity.yo = vec3.y; + livingentity.zo = vec3.z; + livingentity.setXRot(-vrdata$vrdevicepose.getPitch()); + livingentity.xRotO = livingentity.getXRot(); + livingentity.setYRot(vrdata$vrdevicepose.getYaw()); + livingentity.yHeadRot = livingentity.getYRot(); + livingentity.yHeadRotO = livingentity.getYRot(); + livingentity.eyeHeight = 0.0001F; + } + } + + @Override + public void cacheRVEPos(LivingEntity e) { + if (this.minecraft.getCameraEntity() != null) { + if (!this.cached) { + this.rveX = e.getX(); + this.rveY = e.getY(); + this.rveZ = e.getZ(); + this.rvelastX = e.xOld; + this.rvelastY = e.yOld; + this.rvelastZ = e.zOld; + this.rveprevX = e.xo; + this.rveprevY = e.yo; + this.rveprevZ = e.zo; + this.rveyaw = e.yHeadRot; + this.rvepitch = e.getXRot(); + this.rvelastyaw = e.yHeadRotO; + this.rvelastpitch = e.xRotO; + this.rveHeight = e.getEyeHeight(); + this.cached = true; + } + } + } + + void renderMainMenuHand(int c, float partialTicks, boolean depthAlways, PoseStack poseStack) { + this.resetProjectionMatrix(this.getProjectionMatrix(this.getFov(mainCamera, partialTicks, false))); + poseStack.pushPose(); + poseStack.setIdentity(); + RenderSystem.disableTexture(); + RenderSystem.enableDepthTest(); + RenderSystem.defaultBlendFunc(); + applyVRModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, poseStack); + SetupRenderingAtController(c, poseStack); + + if (this.minecraft.getOverlay() == null) { + this.minecraft.getTextureManager().bindForSetup(new ResourceLocation("vivecraft:textures/white.png")); + RenderSystem.setShaderTexture(0, new ResourceLocation("vivecraft:textures/white.png")); + } + + Tesselator tesselator = Tesselator.getInstance(); + + if (depthAlways && c == 0) { + RenderSystem.depthFunc(519); + } else { + RenderSystem.depthFunc(515); + } + + Vec3i vec3i = new Vec3i(64, 64, 64); + byte b0 = -1; + Vec3 vec3 = new Vec3(0.0D, 0.0D, 0.0D); + Vec3 vec31 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(c).getDirection(); + Vec3 vec32 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(c) + .getCustomVector(new Vec3(0.0D, 1.0D, 0.0D)); + vec32 = new Vec3(0.0D, 1.0D, 0.0D); + vec31 = new Vec3(0.0D, 0.0D, -1.0D); + Vec3 vec33 = new Vec3(vec3.x - vec31.x * 0.18D, vec3.y - vec31.y * 0.18D, vec3.z - vec31.z * 0.18D); + + if (this.minecraft.level != null) { + float f = (float) this.minecraft.level.getMaxLocalRawBrightness( + new BlockPos(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.hmd.getPosition())); + + int i = ShadersHelper.ShaderLight(); + + if (f < (float) i) { + f = (float) i; + } + + float f1 = f / (float) this.minecraft.level.getMaxLightLevel(); + vec3i = new Vec3i(Mth.floor(vec3i.getX() * f1), Mth.floor(vec3i.getY() * f1), + Mth.floor(vec3i.getZ() * f1)); + } + RenderSystem.setShader(GameRenderer::getPositionColorShader); + tesselator.getBuilder().begin(Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_NORMAL); + this.renderBox(tesselator, vec3, vec33, -0.02F, 0.02F, -0.0125F, 0.0125F, vec32, vec3i, b0, poseStack); + tesselator.getBuilder().end(); + BufferUploader.end(tesselator.getBuilder()); + poseStack.popPose(); + RenderSystem.depthFunc(515); + } + + private void renderVRHands(float partialTicks, boolean renderright, boolean renderleft, boolean menuhandright, + boolean menuhandleft, PoseStack poseStack) { + this.minecraft.getProfiler().push("hands"); + // backup projection matrix, not doing that breaks sodium water on 1.19.3 + RenderSystem.backupProjectionMatrix(); + + if (renderright) { + this.minecraft.getItemRenderer(); + ClientDataHolderVR.ismainhand = true; + + if (menuhandright) { + this.renderMainMenuHand(0, partialTicks, false, poseStack); + } else { + this.resetProjectionMatrix(this.getProjectionMatrix(this.getFov(this.mainCamera, partialTicks, true))); + PoseStack posestack = new PoseStack(); + posestack.last().pose().setIdentity(); + this.applyVRModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, posestack); + this.renderVRHand_Main(posestack, partialTicks); + } + + this.minecraft.getItemRenderer(); + ClientDataHolderVR.ismainhand = false; + } + + if (renderleft) { + if (menuhandleft) { + this.renderMainMenuHand(1, partialTicks, false, poseStack); + } else { + this.resetProjectionMatrix(this.getProjectionMatrix(this.getFov(this.mainCamera, partialTicks, true))); + PoseStack posestack1 = new PoseStack(); + posestack1.last().pose().setIdentity(); + this.applyVRModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, posestack1); + this.renderVRHand_Offhand(partialTicks, true, posestack1); + } + } + + RenderSystem.restoreProjectionMatrix(); + this.minecraft.getProfiler().pop(); + } + + @Override + public boolean isInWater() { + return inwater; + } + + @Override + public boolean isInMenuRoom() { + return this.minecraft.level == null || + this.minecraft.screen instanceof WinScreen || + this.minecraft.screen instanceof ReceivingLevelScreen || + this.minecraft.screen instanceof ProgressScreen || + this.minecraft.screen instanceof GenericDirtMessageScreen || + ClientDataHolderVR.getInstance().integratedServerLaunchInProgress || + this.minecraft.getOverlay() != null; + } + + @Override + public boolean willBeInMenuRoom(Screen newScreen) { + return this.minecraft.level == null || + newScreen instanceof WinScreen || + newScreen instanceof ReceivingLevelScreen || + newScreen instanceof ProgressScreen || + newScreen instanceof GenericDirtMessageScreen || + ClientDataHolderVR.getInstance().integratedServerLaunchInProgress || + this.minecraft.getOverlay() != null; + } + + @Override + public Vec3 getControllerRenderPos(int c) { + ClientDataHolderVR dataholder = GameRendererVRMixin.DATA_HOLDER; + if (!dataholder.vrSettings.seated) { + return dataholder.vrPlayer.vrdata_world_render.getController(c).getPosition(); + } else { + Vec3 vec3; + + if (this.minecraft.getCameraEntity() != null && this.minecraft.level != null) { + Vec3 vec32 = dataholder.vrPlayer.vrdata_world_render.hmd.getDirection(); + vec32 = vec32.yRot((float) Math.toRadians(c == 0 ? -35.0D : 35.0D)); + vec32 = new Vec3(vec32.x, 0.0D, vec32.z); + vec32 = vec32.normalize(); + RenderPass renderpass = RenderPass.CENTER; + vec3 = dataholder.vrPlayer.vrdata_world_render.getEye(renderpass).getPosition().add( + vec32.x * 0.3D * (double) dataholder.vrPlayer.vrdata_world_render.worldScale, + -0.4D * (double) dataholder.vrPlayer.vrdata_world_render.worldScale, + vec32.z * 0.3D * (double) dataholder.vrPlayer.vrdata_world_render.worldScale); + + if (TelescopeTracker.isTelescope(minecraft.player.getUseItem())) { + if (c == 0 && minecraft.player.getUsedItemHand() == InteractionHand.MAIN_HAND) + vec3 = dataholder.vrPlayer.vrdata_world_render.eye0.getPosition() + .add(dataholder.vrPlayer.vrdata_world_render.hmd.getDirection() + .scale(0.2 * dataholder.vrPlayer.vrdata_world_render.worldScale)); + if (c == 1 && minecraft.player.getUsedItemHand() == InteractionHand.OFF_HAND) + vec3 = dataholder.vrPlayer.vrdata_world_render.eye1.getPosition() + .add(dataholder.vrPlayer.vrdata_world_render.hmd.getDirection() + .scale(0.2 * dataholder.vrPlayer.vrdata_world_render.worldScale)); + } + + } else { + Vec3 vec31 = dataholder.vrPlayer.vrdata_world_render.hmd.getDirection(); + vec31 = vec31.yRot((float) Math.toRadians(c == 0 ? -35.0D : 35.0D)); + vec31 = new Vec3(vec31.x, 0.0D, vec31.z); + vec31 = vec31.normalize(); + vec3 = dataholder.vrPlayer.vrdata_world_render.hmd.getPosition().add(vec31.x * 0.3D, -0.4D, + vec31.z * 0.3D); + } + + return vec3; + } + } + + @Override + public Vec3 getCrossVec() { + return crossVec; + } + + @Override + public void setupClipPlanes() { + this.renderDistance = (float) (this.minecraft.options.getEffectiveRenderDistance() * 16); + +// if (Config.isFogOn()) { TODO +// this.renderDistance *= 0.95F; +// } + + this.clipDistance = this.renderDistance + 1024.0F; + + } + + @Override + public float getMinClipDistance() { + return this.minClipDistance; + } + + @Override + public float getClipDistance() { + return this.clipDistance; + } + + @Override + public void applyVRModelView(RenderPass currentPass, PoseStack poseStack) { + Matrix4f modelView = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getEye(currentPass) + .getMatrix().transposed().toMCMatrix(); + poseStack.last().pose().multiply(modelView); + poseStack.last().normal().mul(new Matrix3f(modelView)); + } + + @Override + public void renderDebugAxes(int r, int g, int b, float radius) { + this.setupPolyRendering(true); + RenderSystem.setShaderTexture(0, new ResourceLocation("vivecraft:textures/white.png")); + this.renderCircle(new Vec3(0.0D, 0.0D, 0.0D), radius, 32, r, g, b, 255, 0); + this.renderCircle(new Vec3(0.0D, 0.01D, 0.0D), radius * 0.75F, 32, r, g, b, 255, 0); + this.renderCircle(new Vec3(0.0D, 0.02D, 0.0D), radius * 0.25F, 32, r, g, b, 255, 0); + this.renderCircle(new Vec3(0.0D, 0.0D, 0.15D), radius * 0.5F, 32, r, g, b, 255, 2); + this.setupPolyRendering(false); + } + + public void renderCircle(Vec3 pos, float radius, int edges, int r, int g, int b, int a, int side) { + Tesselator tesselator = Tesselator.getInstance(); + tesselator.getBuilder().begin(Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION_COLOR); + tesselator.getBuilder().vertex(pos.x, pos.y, pos.z).color(r, g, b, a).endVertex(); + + for (int i = 0; i < edges + 1; i++) { + float f = (float) i / (float) edges * (float) Math.PI * 2.0F; + + if (side != 0 && side != 1) { + if (side != 2 && side != 3) { + if (side == 4 || side == 5) { + float f5 = (float) pos.x; + float f7 = (float) pos.y + (float) Math.cos((double) f) * radius; + float f9 = (float) pos.z + (float) Math.sin((double) f) * radius; + tesselator.getBuilder().vertex((double) f5, (double) f7, (double) f9).color(r, g, b, a) + .endVertex(); + } + } else { + float f4 = (float) pos.x + (float) Math.cos((double) f) * radius; + float f6 = (float) pos.y + (float) Math.sin((double) f) * radius; + float f8 = (float) pos.z; + tesselator.getBuilder().vertex((double) f4, (double) f6, (double) f8).color(r, g, b, a).endVertex(); + } + } else { + float f1 = (float) pos.x + (float) Math.cos((double) f) * radius; + float f2 = (float) pos.y; + float f3 = (float) pos.z + (float) Math.sin((double) f) * radius; + tesselator.getBuilder().vertex((double) f1, (double) f2, (double) f3).color(r, g, b, a).endVertex(); + } + } + + tesselator.end(); + } + + private void setupPolyRendering(boolean enable) { +// boolean flag = Config.isShaders(); TODO + boolean flag = false; + + if (enable) { + this.polyblendsrca = GlStateManager.BLEND.srcAlpha; + this.polyblenddsta = GlStateManager.BLEND.dstAlpha; + this.polyblendsrcrgb = GlStateManager.BLEND.srcRgb; + this.polyblenddstrgb = GlStateManager.BLEND.dstRgb; + this.polyblend = GL43C.glIsEnabled(GL11.GL_BLEND); + this.polytex = true; + this.polylight = false; + this.polycull = true; + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + RenderSystem.disableTexture(); + // GlStateManager._disableLighting(); + RenderSystem.disableCull(); + + if (flag) { +// this.prog = Shaders.activeProgram; TODO +// Shaders.useProgram(Shaders.ProgramTexturedLit); + } + } else { + RenderSystem.blendFuncSeparate(this.polyblendsrcrgb, this.polyblenddstrgb, this.polyblendsrca, + this.polyblenddsta); + + if (!this.polyblend) { + RenderSystem.disableBlend(); + } + + if (this.polytex) { + RenderSystem.enableTexture(); + } + + if (this.polylight) { + // GlStateManager._enableLighting(); + } + + if (this.polycull) { + RenderSystem.enableCull(); + } + +// if (flag && this.polytex) { +// Shaders.useProgram(this.prog); TODO +// } + } + } + + @Override + public void drawScreen(float f, Screen screen, PoseStack poseStack) { + PoseStack posestack = RenderSystem.getModelViewStack(); + posestack.pushPose(); + posestack.setIdentity(); + posestack.translate(0.0D, 0.0D, -2000.0D); + RenderSystem.applyModelViewMatrix(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, + GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, + GlStateManager.DestFactor.ONE); + screen.render(poseStack, 0, 0, f); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, + GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, + GlStateManager.DestFactor.ONE); + posestack.popPose(); + RenderSystem.applyModelViewMatrix(); + + this.minecraft.getMainRenderTarget().bindRead(); + ((RenderTargetExtension) this.minecraft.getMainRenderTarget()).genMipMaps(); + this.minecraft.getMainRenderTarget().unbindRead(); + } + + @Override + public boolean wasInWater() { + return wasinwater; + } + + @Override + public void setWasInWater(boolean b) { + this.wasinwater = b; + } + + @Override + public boolean isInPortal() { + return this.inportal; + } + + @Override + public Matrix4f getThirdPassProjectionMatrix() { + return thirdPassProjectionMatrix; + } + + private void renderVRHand_Main(PoseStack matrix, float partialTicks) { + matrix.pushPose(); + this.SetupRenderingAtController(0, matrix); + ItemStack itemstack = this.minecraft.player.getMainHandItem(); + ItemStack itemstack1 = null; // this.minecraft.physicalGuiManager.getHeldItemOverride(); + + if (itemstack1 != null) { + itemstack = itemstack1; + } + + if (GameRendererVRMixin.DATA_HOLDER.climbTracker.isClimbeyClimb() && itemstack.getItem() != Items.SHEARS) { + itemstack = itemstack1 == null ? this.minecraft.player.getOffhandItem() : itemstack1; + } + + if (BowTracker.isHoldingBow(this.minecraft.player, InteractionHand.MAIN_HAND)) { + int i = 0; + + if (GameRendererVRMixin.DATA_HOLDER.vrSettings.reverseShootingEye) { + i = 1; + } + + ItemStack itemstack2 = this.minecraft.player.getProjectile(this.minecraft.player.getMainHandItem()); + + if (itemstack2 != ItemStack.EMPTY && !GameRendererVRMixin.DATA_HOLDER.bowTracker.isNotched()) { + itemstack = itemstack2; + } else { + itemstack = ItemStack.EMPTY; + } + } else if (BowTracker.isHoldingBow(this.minecraft.player, InteractionHand.OFF_HAND) + && GameRendererVRMixin.DATA_HOLDER.bowTracker.isNotched()) { + int j = 0; + + if (GameRendererVRMixin.DATA_HOLDER.vrSettings.reverseShootingEye) { + j = 1; + } + + itemstack = ItemStack.EMPTY; + } + + boolean flag = false; + +// if (Config.isShaders()) { TODO +// Shaders.beginHand(matrix, flag); +// } else { + matrix.pushPose(); +// } + + this.lightTexture.turnOnLightLayer(); + MultiBufferSource.BufferSource multibuffersource$buffersource = this.renderBuffers.bufferSource(); + (this.itemInHandRenderer).renderArmWithItem(this.minecraft.player, partialTicks, + 0.0F, InteractionHand.MAIN_HAND, this.minecraft.player.getAttackAnim(partialTicks), itemstack, 0.0F, + matrix, multibuffersource$buffersource, + this.minecraft.getEntityRenderDispatcher().getPackedLightCoords(this.minecraft.player, partialTicks)); + multibuffersource$buffersource.endBatch(); + this.lightTexture.turnOffLightLayer(); + +// if (Config.isShaders()) { TODO +// Shaders.endHand(matrix); +// } else { + matrix.popPose(); +// } + + matrix.popPose(); + } + + private void renderVRHand_Offhand(float partialTicks, boolean renderTeleport, PoseStack matrix) { + // boolean flag = Config.isShaders();TODO + boolean flag = false; + boolean flag1 = false; + +// if (flag) { +// flag1 = Shaders.isShadowPass; +// } + + matrix.pushPose(); + this.SetupRenderingAtController(1, matrix); + ItemStack itemstack = this.minecraft.player.getOffhandItem(); + ItemStack itemstack1 = null;// this.minecraft.physicalGuiManager.getOffhandOverride(); + + if (itemstack1 != null) { + itemstack = itemstack1; + } + + if (GameRendererVRMixin.DATA_HOLDER.climbTracker.isClimbeyClimb() + && (itemstack == null || itemstack.getItem() != Items.SHEARS)) { + itemstack = this.minecraft.player.getMainHandItem(); + } + + if (BowTracker.isHoldingBow(this.minecraft.player, InteractionHand.MAIN_HAND)) { + int i = 1; + + if (GameRendererVRMixin.DATA_HOLDER.vrSettings.reverseShootingEye) { + i = 0; + } + + itemstack = this.minecraft.player.getMainHandItem(); + } + + boolean flag2 = false; + +// if (Config.isShaders()) { TODO +// Shaders.beginHand(matrix, flag2); +// } else { + matrix.pushPose(); +// } + + this.lightTexture.turnOnLightLayer(); + MultiBufferSource.BufferSource multibuffersource$buffersource = this.renderBuffers.bufferSource(); + this.itemInHandRenderer.renderArmWithItem(this.minecraft.player, partialTicks, + 0.0F, InteractionHand.OFF_HAND, this.minecraft.player.getAttackAnim(partialTicks), itemstack, 0.0F, + matrix, multibuffersource$buffersource, + this.minecraft.getEntityRenderDispatcher().getPackedLightCoords(this.minecraft.player, partialTicks)); + multibuffersource$buffersource.endBatch(); + this.lightTexture.turnOffLightLayer(); + +// if (Config.isShaders()) { TODO +// Shaders.endHand(matrix); +// } else { + matrix.popPose(); +// } + + matrix.popPose(); + + if (renderTeleport) { + matrix.pushPose(); + matrix.setIdentity(); + this.applyVRModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, matrix); +// net.optifine.shaders.Program program = Shaders.activeProgram; TODO + +// if (Config.isShaders()) { +// Shaders.useProgram(Shaders.ProgramTexturedLit); +// } + + RenderSystem.enableBlend(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, + GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, + GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + RenderSystem.disableTexture(); + + if (ClientNetworking.isLimitedSurvivalTeleport() && !GameRendererVRMixin.DATA_HOLDER.vrPlayer.getFreeMove() + && this.minecraft.gameMode.hasMissTime() + && GameRendererVRMixin.DATA_HOLDER.teleportTracker.vrMovementStyle.arcAiming + && !GameRendererVRMixin.DATA_HOLDER.bowTracker.isActive(this.minecraft.player)) { + matrix.pushPose(); + this.SetupRenderingAtController(1, matrix); + Vec3 vec3 = new Vec3(0.0D, 0.005D, 0.03D); + float f1 = 0.03F; + float f; + + if (GameRendererVRMixin.DATA_HOLDER.teleportTracker.isAiming()) { + f = 2.0F * (float) ((double) GameRendererVRMixin.DATA_HOLDER.teleportTracker.getTeleportEnergy() + - 4.0D * GameRendererVRMixin.DATA_HOLDER.teleportTracker.movementTeleportDistance) / 100.0F * f1; + } else { + f = 2.0F * GameRendererVRMixin.DATA_HOLDER.teleportTracker.getTeleportEnergy() / 100.0F * f1; + } + + if (f < 0.0F) { + f = 0.0F; + } + RenderSystem.setShader(GameRenderer::getPositionColorShader); + RenderSystem.setShaderTexture(0, new ResourceLocation("vivecraft:textures/white.png")); + this.renderFlatQuad(vec3.add(0.0D, 0.05001D, 0.0D), f, f, 0.0F, this.tpLimitedColor.getX(), + this.tpLimitedColor.getY(), this.tpLimitedColor.getZ(), 128, matrix); + this.renderFlatQuad(vec3.add(0.0D, 0.05D, 0.0D), f1, f1, 0.0F, this.tpLimitedColor.getX(), + this.tpLimitedColor.getY(), this.tpLimitedColor.getZ(), 50, matrix); + matrix.popPose(); + } + + if (GameRendererVRMixin.DATA_HOLDER.teleportTracker.isAiming()) { + RenderSystem.enableDepthTest(); + + if (GameRendererVRMixin.DATA_HOLDER.teleportTracker.vrMovementStyle.arcAiming) { + this.renderTeleportArc(GameRendererVRMixin.DATA_HOLDER.vrPlayer, matrix); + } + + } + + RenderSystem.enableTexture(); + RenderSystem.defaultBlendFunc(); + +// if (Config.isShaders()) { +// Shaders.useProgram(program); +// } + + matrix.popPose(); + } + } + + void render2D(float par1, RenderTarget framebuffer, Vec3 pos, org.vivecraft.common.utils.math.Matrix4f rot, + boolean depthAlways, PoseStack poseStack) { + if (!GameRendererVRMixin.DATA_HOLDER.bowTracker.isDrawing) { + boolean flag = this.isInMenuRoom(); + this.resetProjectionMatrix(this.getProjectionMatrix(this.getFov(this.mainCamera, par1, true))); + poseStack.pushPose(); + poseStack.setIdentity(); + this.applyVRModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, poseStack); + Vec3 vec3 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render + .getEye(GameRendererVRMixin.DATA_HOLDER.currentPass).getPosition(); + Vec3 vec31 = new Vec3(0.0D, 0.0D, 0.0D); + float f = GuiHandler.guiScale; + VRPlayer vrplayer = GameRendererVRMixin.DATA_HOLDER.vrPlayer; + Vec3 guipos = VRPlayer.room_to_world_pos(pos, GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render); + org.vivecraft.common.utils.math.Matrix4f matrix4f = org.vivecraft.common.utils.math.Matrix4f + .rotationY(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.rotation_radians); + org.vivecraft.common.utils.math.Matrix4f guirot = org.vivecraft.common.utils.math.Matrix4f.multiply(matrix4f, rot); + + poseStack.translate((float) (guipos.x - vec3.x), (float) (guipos.y - vec3.y), (float) (guipos.z - vec3.z)); + poseStack.mulPoseMatrix(guirot.toMCMatrix()); + poseStack.translate((float) vec31.x, (float) vec31.y, (float) vec31.z); + float f1 = f * GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.worldScale; + poseStack.scale(f1, f1, f1); + + framebuffer.bindRead(); + RenderSystem.disableCull(); + RenderSystem.enableTexture(); + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderTexture(0, framebuffer.getColorTextureId()); + + float[] color = new float[]{1, 1, 1, 1}; + if (!flag) { + if (this.minecraft.screen == null) { + color[3] = GameRendererVRMixin.DATA_HOLDER.vrSettings.hudOpacity; + } + + if (this.minecraft.player != null && this.minecraft.player.isShiftKeyDown()) { + color[3] *= 0.75F; + } + + RenderSystem.enableBlend(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, + GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE_MINUS_DST_ALPHA, + GlStateManager.DestFactor.ONE); + } else { + RenderSystem.disableBlend(); + } + + if (depthAlways) { + RenderSystem.depthFunc(519); + } else { + RenderSystem.depthFunc(515); + } + + RenderSystem.depthMask(true); + RenderSystem.enableDepthTest(); + + + if (this.minecraft.level != null) { + if (((ItemInHandRendererExtension) this.itemInHandRenderer).isInsideOpaqueBlock(vec3)) { + vec3 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.hmd.getPosition(); + } + + int i = ShadersHelper.ShaderLight(); + int j = Utils.getCombinedLightWithMin(this.minecraft.level, new BlockPos(vec3), i); + this.drawSizedQuadWithLightmap((float) this.minecraft.getWindow().getGuiScaledWidth(), + (float) this.minecraft.getWindow().getGuiScaledHeight(), 1.5F, j, color, + poseStack.last().pose()); + } else { + this.drawSizedQuad((float) this.minecraft.getWindow().getGuiScaledWidth(), + (float) this.minecraft.getWindow().getGuiScaledHeight(), 1.5F, color, poseStack.last().pose()); + } + + RenderSystem.defaultBlendFunc(); + RenderSystem.depthFunc(515); + RenderSystem.enableCull(); + + poseStack.popPose(); + } + } + + void renderPhysicalKeyboard(float partialTicks, PoseStack poseStack) { + if (!GameRendererVRMixin.DATA_HOLDER.bowTracker.isDrawing) { + this.resetProjectionMatrix(this.getProjectionMatrix(this.getFov(this.mainCamera, partialTicks, true))); + poseStack.pushPose(); + poseStack.setIdentity(); + // RenderSystem.enableRescaleNormal(); + // Lighting.setupFor3DItems(); + + this.minecraft.getProfiler().push("applyPhysicalKeyboardModelView"); + Vec3 vec3 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render + .getEye(GameRendererVRMixin.DATA_HOLDER.currentPass).getPosition(); + VRPlayer vrplayer = GameRendererVRMixin.DATA_HOLDER.vrPlayer; + Vec3 guipos = VRPlayer.room_to_world_pos(KeyboardHandler.Pos_room, + GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render); + org.vivecraft.common.utils.math.Matrix4f matrix4f = org.vivecraft.common.utils.math.Matrix4f + .rotationY(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.rotation_radians); + org.vivecraft.common.utils.math.Matrix4f guirot = org.vivecraft.common.utils.math.Matrix4f.multiply(matrix4f, + KeyboardHandler.Rotation_room); + poseStack.mulPoseMatrix(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render + .getEye(GameRendererVRMixin.DATA_HOLDER.currentPass).getMatrix().transposed().toMCMatrix()); + poseStack.translate((float) (guipos.x - vec3.x), (float) (guipos.y - vec3.y), (float) (guipos.z - vec3.z)); + // GlStateManager._multMatrix(guirot.transposed().toFloatBuffer()); + poseStack.mulPoseMatrix(guirot.toMCMatrix()); + float f = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.worldScale; + poseStack.scale(f, f, f); + this.minecraft.getProfiler().pop(); + + KeyboardHandler.physicalKeyboard.render(poseStack); + // Lighting.turnOff(); + // RenderSystem.disableRescaleNormal(); + poseStack.popPose(); + RenderSystem.applyModelViewMatrix(); + } + } + + private void renderGuiLayer(float par1, boolean depthAlways, PoseStack pMatrix) { + if (!GameRendererVRMixin.DATA_HOLDER.bowTracker.isDrawing) { + if (this.minecraft.screen != null || !this.minecraft.options.hideGui) { + if (!RadialHandler.isShowing()) { + minecraft.getProfiler().push("GuiLayer"); + // cache fog distance + float fogStart = RenderSystem.getShaderFogStart(); + + // remove nausea effect from projection matrix, for vanilla, nd posestack for iris + this.resetProjectionMatrix(this.getProjectionMatrix(this.getFov(this.mainCamera, par1, true))); + pMatrix.pushPose(); + pMatrix.setIdentity(); + this.applyVRModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, pMatrix); + + boolean flag = this.isInMenuRoom(); + + // render the screen always on top in the menu room to prevent z fighting + depthAlways |= flag; + + PoseStack poseStack = RenderSystem.getModelViewStack(); + poseStack.pushPose(); + poseStack.setIdentity(); + RenderSystem.applyModelViewMatrix(); + + if (flag) { + pMatrix.pushPose(); + Vec3 eye = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render + .getEye(GameRendererVRMixin.DATA_HOLDER.currentPass).getPosition(); + pMatrix.translate((GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.origin.x - eye.x), + (GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.origin.y - eye.y), + (GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.origin.z - eye.z)); + + // remove world rotation or the room doesn't align with the screen + pMatrix.mulPose(Vector3f.YN.rotation(-GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.rotation_radians)); + + //System.out.println(eye + " eye"); + //System.out.println(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.origin + " world"); + + if (GameRendererVRMixin.DATA_HOLDER.menuWorldRenderer.isReady()) { + try { + this.renderTechjarsAwesomeMainMenuRoom(pMatrix); + } catch (Exception exception) { + System.out.println("Error rendering main menu world, unloading to prevent more errors"); + exception.printStackTrace(); + GameRendererVRMixin.DATA_HOLDER.menuWorldRenderer.destroy(); + } + } else { + this.renderJrbuddasAwesomeMainMenuRoomNew(pMatrix); + } + pMatrix.popPose(); + } + + Vec3 vec31 = GuiHandler.applyGUIModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, pMatrix); + GuiHandler.guiFramebuffer.bindRead(); + RenderSystem.disableCull(); + RenderSystem.enableTexture(); + RenderSystem.setShaderTexture(0, GuiHandler.guiFramebuffer.getColorTextureId()); + + float[] color = new float[]{1.0F, 1.0F, 1.0F, 1.0F}; + if (!flag) { + if (this.minecraft.screen == null) { + color[3] = GameRendererVRMixin.DATA_HOLDER.vrSettings.hudOpacity; + } else { + // disable fog for menus + RenderSystem.setShaderFogStart(Float.MAX_VALUE); + } + + if (this.minecraft.player != null && this.minecraft.player.isShiftKeyDown()) { + color[3] *= 0.75F; + } + + RenderSystem.enableBlend(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, + GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, + GlStateManager.SourceFactor.ONE_MINUS_DST_ALPHA, GlStateManager.DestFactor.ONE); + if (GameRendererVRMixin.DATA_HOLDER.vrSettings.shaderGUIRender == VRSettings.ShaderGUIRender.BEFORE_TRANSLUCENT_SOLID && ShadersHelper.isShaderActive()) { + RenderSystem.disableBlend(); + } + } else { + // enable blend for overlay transition in menuworld to not be jarring + RenderSystem.enableBlend(); + } + + if (depthAlways) { + RenderSystem.depthFunc(519); + } else { + RenderSystem.depthFunc(515); + } + + RenderSystem.depthMask(true); + RenderSystem.enableDepthTest(); + + // RenderSystem.disableLighting(); + + if (this.minecraft.level != null) { + if (((ItemInHandRendererExtension) this.itemInHandRenderer).isInsideOpaqueBlock(vec31)) { + vec31 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.hmd.getPosition(); + } + + int i = ShadersHelper.ShaderLight(); + int j = Utils.getCombinedLightWithMin(this.minecraft.level, new BlockPos(vec31), i); + this.drawSizedQuadWithLightmap((float) this.minecraft.getWindow().getGuiScaledWidth(), + (float) this.minecraft.getWindow().getGuiScaledHeight(), 1.5F, j, color, + pMatrix.last().pose()); + } else { + this.drawSizedQuad((float) this.minecraft.getWindow().getGuiScaledWidth(), + (float) this.minecraft.getWindow().getGuiScaledHeight(), 1.5F, color, + pMatrix.last().pose()); + } + + // RenderSystem.blendColor(1.0F, 1.0F, 1.0F, 1.0F); + // reset fog + RenderSystem.setShaderFogStart(fogStart); + RenderSystem.depthFunc(515); + RenderSystem.enableDepthTest(); + // RenderSystem.defaultAlphaFunc(); + RenderSystem.defaultBlendFunc(); + RenderSystem.enableCull(); + pMatrix.popPose(); + + poseStack.popPose(); + RenderSystem.applyModelViewMatrix(); + minecraft.getProfiler().pop(); + } + } + } + } + + public void SetupRenderingAtController(int controller, PoseStack matrix) { + Vec3 vec3 = this.getControllerRenderPos(controller); + vec3 = vec3.subtract(GameRendererVRMixin.DATA_HOLDER.vrPlayer.getVRDataWorld() + .getEye(GameRendererVRMixin.DATA_HOLDER.currentPass).getPosition()); + matrix.translate((double) ((float) vec3.x), (double) ((float) vec3.y), (double) ((float) vec3.z)); + float sc = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.worldScale; + if (minecraft.level != null && TelescopeTracker.isTelescope(minecraft.player.getUseItem())) { + matrix.mulPoseMatrix(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.hmd.getMatrix().inverted() + .transposed().toMCMatrix()); + MethodHolder.rotateDegXp(matrix, 90); + matrix.translate(controller == 0 ? 0.075 * sc : -0.075 * sc, -0.025 * sc, 0.0325 * sc); + } else { + matrix.mulPoseMatrix(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(controller) + .getMatrix().inverted().transposed().toMCMatrix()); + } + + matrix.scale(sc, sc, sc); + + } + + public void renderFlatQuad(Vec3 pos, float width, float height, float yaw, int r, int g, int b, int a, + PoseStack poseStack) { + Tesselator tesselator = Tesselator.getInstance(); + tesselator.getBuilder().begin(Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_NORMAL); + Vec3 vec3 = (new Vec3((double) (-width / 2.0F), 0.0D, (double) (height / 2.0F))) + .yRot((float) Math.toRadians((double) (-yaw))); + Vec3 vec31 = (new Vec3((double) (-width / 2.0F), 0.0D, (double) (-height / 2.0F))) + .yRot((float) Math.toRadians((double) (-yaw))); + Vec3 vec32 = (new Vec3((double) (width / 2.0F), 0.0D, (double) (-height / 2.0F))) + .yRot((float) Math.toRadians((double) (-yaw))); + Vec3 vec33 = (new Vec3((double) (width / 2.0F), 0.0D, (double) (height / 2.0F))) + .yRot((float) Math.toRadians((double) (-yaw))); + Matrix4f mat = poseStack.last().pose(); + tesselator.getBuilder().vertex(mat, (float) (pos.x + vec3.x), (float) pos.y, (float) (pos.z + vec3.z)) + .color(r, g, b, a).normal(0.0F, 1.0F, 0.0F).endVertex(); + tesselator.getBuilder().vertex(mat, (float) (pos.x + vec31.x), (float) pos.y, (float) (pos.z + vec31.z)) + .color(r, g, b, a).normal(0.0F, 1.0F, 0.0F).endVertex(); + tesselator.getBuilder().vertex(mat, (float) (pos.x + vec32.x), (float) pos.y, (float) (pos.z + vec32.z)) + .color(r, g, b, a).normal(0.0F, 1.0F, 0.0F).endVertex(); + tesselator.getBuilder().vertex(mat, (float) (pos.x + vec33.x), (float) pos.y, (float) (pos.z + vec33.z)) + .color(r, g, b, a).normal(0.0F, 1.0F, 0.0F).endVertex(); + tesselator.end(); + + } + + private void renderBox(Tesselator tes, Vec3 start, Vec3 end, float minX, float maxX, float minY, float maxY, + Vec3 up, Vec3i color, byte alpha, PoseStack poseStack) { + Vec3 vec3 = start.subtract(end).normalize(); + Vec3 vec31 = vec3.cross(up); + up = vec31.cross(vec3); + Vec3 vec32 = new Vec3(vec31.x * (double) minX, vec31.y * (double) minX, vec31.z * (double) minX); + vec31 = vec31.scale((double) maxX); + Vec3 vec33 = new Vec3(up.x * (double) minY, up.y * (double) minY, up.z * (double) minY); + up = up.scale((double) maxY); + org.vivecraft.common.utils.lwjgl.Vector3f vector3f = Utils.convertToVector3f(vec3); + org.vivecraft.common.utils.lwjgl.Vector3f vector3f1 = Utils.convertToVector3f(up.normalize()); + org.vivecraft.common.utils.lwjgl.Vector3f vector3f2 = Utils.convertToVector3f(vec31.normalize()); + Vec3 vec34 = start.add(vec31.x + vec33.x, vec31.y + vec33.y, vec31.z + vec33.z); + Vec3 vec35 = start.add(vec31.x + up.x, vec31.y + up.y, vec31.z + up.z); + Vec3 vec36 = start.add(vec32.x + vec33.x, vec32.y + vec33.y, vec32.z + vec33.z); + Vec3 vec37 = start.add(vec32.x + up.x, vec32.y + up.y, vec32.z + up.z); + Vec3 vec38 = end.add(vec31.x + vec33.x, vec31.y + vec33.y, vec31.z + vec33.z); + Vec3 vec39 = end.add(vec31.x + up.x, vec31.y + up.y, vec31.z + up.z); + Vec3 vec310 = end.add(vec32.x + vec33.x, vec32.y + vec33.y, vec32.z + vec33.z); + Vec3 vec311 = end.add(vec32.x + up.x, vec32.y + up.y, vec32.z + up.z); + BufferBuilder bufferbuilder = tes.getBuilder(); + Matrix4f mat = poseStack.last().pose(); + bufferbuilder.vertex(mat, (float) vec34.x, (float) vec34.y, (float) vec34.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f.x, vector3f.y, vector3f.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec36.x, (float) vec36.y, (float) vec36.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f.x, vector3f.y, vector3f.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec37.x, (float) vec37.y, (float) vec37.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f.x, vector3f.y, vector3f.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec35.x, (float) vec35.y, (float) vec35.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f.x, vector3f.y, vector3f.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec310.x, (float) vec310.y, (float) vec310.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f.x, -vector3f.y, -vector3f.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec38.x, (float) vec38.y, (float) vec38.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f.x, -vector3f.y, -vector3f.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec39.x, (float) vec39.y, (float) vec39.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f.x, -vector3f.y, -vector3f.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec311.x, (float) vec311.y, (float) vec311.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f.x, -vector3f.y, -vector3f.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec38.x, (float) vec38.y, (float) vec38.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f2.x, vector3f2.y, vector3f2.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec34.x, (float) vec34.y, (float) vec34.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f2.x, vector3f2.y, vector3f2.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec35.x, (float) vec35.y, (float) vec35.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f2.x, vector3f2.y, vector3f2.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec39.x, (float) vec39.y, (float) vec39.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f2.x, vector3f2.y, vector3f2.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec36.x, (float) vec36.y, (float) vec36.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f2.x, -vector3f2.y, -vector3f2.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec310.x, (float) vec310.y, (float) vec310.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f2.x, -vector3f2.y, -vector3f2.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec311.x, (float) vec311.y, (float) vec311.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f2.x, -vector3f2.y, -vector3f2.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec37.x, (float) vec37.y, (float) vec37.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f2.x, -vector3f2.y, -vector3f2.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec37.x, (float) vec37.y, (float) vec37.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f1.x, vector3f1.y, vector3f1.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec311.x, (float) vec311.y, (float) vec311.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f1.x, vector3f1.y, vector3f1.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec39.x, (float) vec39.y, (float) vec39.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f1.x, vector3f1.y, vector3f1.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec35.x, (float) vec35.y, (float) vec35.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(vector3f1.x, vector3f1.y, vector3f1.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec310.x, (float) vec310.y, (float) vec310.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f1.x, -vector3f1.y, -vector3f1.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec36.x, (float) vec36.y, (float) vec36.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f1.x, -vector3f1.y, -vector3f1.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec34.x, (float) vec34.y, (float) vec34.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f1.x, -vector3f1.y, -vector3f1.z) + .endVertex(); + bufferbuilder.vertex(mat, (float) vec38.x, (float) vec38.y, (float) vec38.z) + .color(color.getX(), color.getY(), color.getZ(), alpha).normal(-vector3f1.x, -vector3f1.y, -vector3f1.z) + .endVertex(); + } + + private void renderJrbuddasAwesomeMainMenuRoomNew(PoseStack pMatrixStack) { + int i = 4; + float f = 2.5F; + float f1 = 1.3F; + float[] afloat = GameRendererVRMixin.DATA_HOLDER.vr.getPlayAreaSize(); + if (afloat == null) + afloat = new float[]{2, 2}; + + BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); + RenderSystem.setShader(GameRenderer::getPositionTexColorShader); + RenderSystem.depthFunc(519); + RenderSystem.clear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT, Minecraft.ON_OSX); + RenderSystem.depthMask(false); + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + RenderSystem.enableTexture(); + RenderSystem.setShaderTexture(0, Screen.BACKGROUND_LOCATION); + RenderSystem.setShaderColor(1, 1, 1, 1); + pMatrixStack.pushPose(); + float f2 = afloat[0] + f1; + float f3 = afloat[1] + f1; + pMatrixStack.translate(-f2 / 2.0F, 0.0F, -f3 / 2.0F); + + Matrix4f matrix4f = pMatrixStack.last().pose(); + bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR_NORMAL); + + float r, g, b, a; + r = g = b = 0.8f; + a = 1.0f; + + bufferbuilder.vertex(matrix4f, 0, 0, 0).uv(0, 0).color(r, g, b, a).normal(0, 1, 0).endVertex(); + bufferbuilder.vertex(matrix4f, 0, 0, f3).uv(0, i * f3).color(r, g, b, a).normal(0, 1, 0).endVertex(); + bufferbuilder.vertex(matrix4f, f2, 0, f3).uv(i * f2, i * f3).color(r, g, b, a).normal(0, 1, 0).endVertex(); + bufferbuilder.vertex(matrix4f, f2, 0, 0).uv(i * f2, 0).color(r, g, b, a).normal(0, 1, 0).endVertex(); + + bufferbuilder.vertex(matrix4f, 0, f, f3).uv(0, 0).color(r, g, b, a).normal(0, -1, 0).endVertex(); + bufferbuilder.vertex(matrix4f, 0, f, 0).uv(0, i * f3).color(r, g, b, a).normal(0, -1, 0).endVertex(); + bufferbuilder.vertex(matrix4f, f2, f, 0).uv(i * f2, i * f3).color(r, g, b, a).normal(0, -1, 0).endVertex(); + bufferbuilder.vertex(matrix4f, f2, f, f3).uv(i * f2, 0).color(r, g, b, a).normal(0, -1, 0).endVertex(); + + bufferbuilder.vertex(matrix4f, 0, 0, 0).uv(0, 0).color(r, g, b, a).normal(1, 0, 0).endVertex(); + bufferbuilder.vertex(matrix4f, 0, f, 0).uv(0, i * f).color(r, g, b, a).normal(1, 0, 0).endVertex(); + bufferbuilder.vertex(matrix4f, 0, f, f3).uv(i * f3, i * f).color(r, g, b, a).normal(1, 0, 0).endVertex(); + bufferbuilder.vertex(matrix4f, 0, 0, f3).uv(i * f3, 0).color(r, g, b, a).normal(1, 0, 0).endVertex(); + + bufferbuilder.vertex(matrix4f, f2, 0, 0).uv(0, 0).color(r, g, b, a).normal(-1, 0, 0).endVertex(); + bufferbuilder.vertex(matrix4f, f2, 0, f3).uv(i * f3, 0).color(r, g, b, a).normal(-1, 0, 0).endVertex(); + bufferbuilder.vertex(matrix4f, f2, f, f3).uv(i * f3, i * f).color(r, g, b, a).normal(-1, 0, 0).endVertex(); + bufferbuilder.vertex(matrix4f, f2, f, 0).uv(0, i * f).color(r, g, b, a).normal(-1, 0, 0).endVertex(); + + bufferbuilder.vertex(matrix4f, 0, 0, 0).uv(0, 0).color(r, g, b, a).normal(0, 0, 1).endVertex(); + bufferbuilder.vertex(matrix4f, f2, 0, 0).uv(i * f2, 0).color(r, g, b, a).normal(0, 0, 1).endVertex(); + bufferbuilder.vertex(matrix4f, f2, f, 0).uv(i * f2, i * f).color(r, g, b, a).normal(0, 0, 1).endVertex(); + bufferbuilder.vertex(matrix4f, 0, f, 0).uv(0, i * f).color(r, g, b, a).normal(0, 0, 1).endVertex(); + + bufferbuilder.vertex(matrix4f, 0, 0, f3).uv(0, 0).color(r, g, b, a).normal(0, 0, -1).endVertex(); + bufferbuilder.vertex(matrix4f, 0, f, f3).uv(0, i * f).color(r, g, b, a).normal(0, 0, -1).endVertex(); + bufferbuilder.vertex(matrix4f, f2, f, f3).uv(i * f2, i * f).color(r, g, b, a).normal(0, 0, -1).endVertex(); + bufferbuilder.vertex(matrix4f, f2, 0, f3).uv(i * f2, 0).color(r, g, b, a).normal(0, 0, -1).endVertex(); + + bufferbuilder.end(); + BufferUploader.end(bufferbuilder); + pMatrixStack.popPose(); + + } + + private void renderTechjarsAwesomeMainMenuRoom(PoseStack poseStack) { + RenderSystem.setShaderColor(1f,1f,1f,1f); + + RenderSystem.enableDepthTest(); + RenderSystem.enableTexture(); + RenderSystem.enableBlend(); + RenderSystem.enableCull(); + RenderSystem.defaultBlendFunc(); + + poseStack.pushPose(); + + int tzOffset = Calendar.getInstance().get(Calendar.ZONE_OFFSET); + DATA_HOLDER.menuWorldRenderer.time = DATA_HOLDER.menuWorldRenderer.fastTime + ? (long)(DATA_HOLDER.menuWorldRenderer.ticks * 10L + 10 * minecraft.getFrameTime()) + : (long)((System.currentTimeMillis() + tzOffset - 21600000) / 86400000D * 24000D); + + DATA_HOLDER.menuWorldRenderer.fogRenderer.setupFogColor(); + RenderSystem.clear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT, Minecraft.ON_OSX); + + DATA_HOLDER.menuWorldRenderer.updateLightmap(); + DATA_HOLDER.menuWorldRenderer.render(poseStack); + + float[] area = DATA_HOLDER.vr.getPlayAreaSize(); + if (area != null) { + poseStack.pushPose(); + float width = area[0];//(float)Math.ceil(area.x); + float length = area[1];//(float)Math.ceil(area.y); + + RenderSystem.setShader(GameRenderer::getPositionTexColorNormalShader); + RenderSystem.setShaderTexture(0, Screen.BACKGROUND_LOCATION); + float sun = DATA_HOLDER.menuWorldRenderer.getSkyDarken(); + RenderSystem.setShaderColor(sun, sun, sun, 0.3f); + + + RenderSystem.defaultBlendFunc(); + RenderSystem.enableBlend(); + Matrix4f matrix4f = poseStack.last().pose(); + BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); + bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR_NORMAL); + poseStack.translate(-width / 2.0F, 0.0F, -length / 2.0F); + bufferbuilder + .vertex(matrix4f, 0, 0.005f, 0) + .uv(0, 0) + .color(1f,1f,1f,1f) + .normal(0, 1, 0).endVertex(); + bufferbuilder + .vertex(matrix4f, 0, 0.005f, length) + .uv(0, 4 * length) + .color(1f,1f,1f,1f) + .normal(0, 1, 0).endVertex(); + bufferbuilder + .vertex(matrix4f, width, 0.005f, length) + .uv(4 * width, 4 * length) + .color(1f,1f,1f,1f) + .normal(0, 1, 0).endVertex(); + bufferbuilder + .vertex(matrix4f, width, 0.005f, 0) + .uv(4 * width, 0) + .color(1f,1f,1f,1f) + .normal(0, 1, 0).endVertex(); + + bufferbuilder.end(); + BufferUploader.end(bufferbuilder); + + RenderSystem.setShaderColor(1.0f,1.0f,1.0f,1.0f); + poseStack.popPose(); + } + + poseStack.popPose(); + RenderSystem.defaultBlendFunc(); + } + + public void renderVRFabulous(float partialTicks, LevelRenderer worldrendererin, boolean menuhandright, + boolean menuhandleft, PoseStack pMatrix) { + if (ClientDataHolderVR.getInstance().currentPass == RenderPass.SCOPEL || ClientDataHolderVR.getInstance().currentPass == RenderPass.SCOPER) + return; + this.minecraft.getProfiler().popPush("VR"); + this.renderCrosshairAtDepth(!ClientDataHolderVR.getInstance().vrSettings.useCrosshairOcclusion, pMatrix); + this.minecraft.getMainRenderTarget().unbindWrite(); + ((LevelRendererExtension) worldrendererin).getAlphaSortVROccludedFramebuffer().clear(Minecraft.ON_OSX); + ((LevelRendererExtension) worldrendererin).getAlphaSortVROccludedFramebuffer().copyDepthFrom(this.minecraft.getMainRenderTarget()); + ((LevelRendererExtension) worldrendererin).getAlphaSortVROccludedFramebuffer().bindWrite(true); + + if (this.shouldOccludeGui()) { + this.renderGuiLayer(partialTicks, false, pMatrix); + this.renderVrShadow(partialTicks, false, pMatrix); + + if (KeyboardHandler.Showing) { + if (DATA_HOLDER.vrSettings.physicalKeyboard) { + this.renderPhysicalKeyboard(partialTicks, pMatrix); + } else { + this.render2D(partialTicks, KeyboardHandler.Framebuffer, KeyboardHandler.Pos_room, + KeyboardHandler.Rotation_room, false, pMatrix); + } + } + + if (RadialHandler.isShowing()) { + this.render2D(partialTicks, RadialHandler.Framebuffer, RadialHandler.Pos_room, + RadialHandler.Rotation_room, false, pMatrix); + } + } + + ((LevelRendererExtension) worldrendererin).getAlphaSortVRUnoccludedFramebuffer().clear(Minecraft.ON_OSX); + ((LevelRendererExtension) worldrendererin).getAlphaSortVRUnoccludedFramebuffer().bindWrite(true); + + if (!this.shouldOccludeGui()) { + this.renderGuiLayer(partialTicks, false, pMatrix); + this.renderVrShadow(partialTicks, false, pMatrix); + + if (KeyboardHandler.Showing) { + if (DATA_HOLDER.vrSettings.physicalKeyboard) { + this.renderPhysicalKeyboard(partialTicks, pMatrix); + } else { + this.render2D(partialTicks, KeyboardHandler.Framebuffer, KeyboardHandler.Pos_room, + KeyboardHandler.Rotation_room, false, pMatrix); + } + } + + if (RadialHandler.isShowing()) { + this.render2D(partialTicks, RadialHandler.Framebuffer, RadialHandler.Pos_room, + RadialHandler.Rotation_room, false, pMatrix); + } + } + + this.renderVRSelfEffects(partialTicks); + VRWidgetHelper.renderVRThirdPersonCamWidget(); + VRWidgetHelper.renderVRHandheldCameraWidget(); + boolean flag = this.shouldRenderHands(); + this.renderVRHands(partialTicks, flag && menuhandright, flag && menuhandleft, true, true, pMatrix); + ((LevelRendererExtension) worldrendererin).getAlphaSortVRHandsFramebuffer().clear(Minecraft.ON_OSX); + ((LevelRendererExtension) worldrendererin).getAlphaSortVRHandsFramebuffer().copyDepthFrom(this.minecraft.getMainRenderTarget()); + ((LevelRendererExtension) worldrendererin).getAlphaSortVRHandsFramebuffer().bindWrite(true); + this.renderVRHands(partialTicks, flag && !menuhandright, flag && !menuhandleft, false, false, pMatrix); + RenderSystem.enableTexture(); + RenderSystem.defaultBlendFunc(); + // RenderSystem.defaultAlphaFunc(); + RenderSystem.setShaderColor(1, 1, 1, 1); + // Lighting.turnBackOn(); + // Lighting.turnOff(); + this.minecraft.getMainRenderTarget().bindWrite(true); + } + + @Override + public void renderVrFast(float partialTicks, boolean secondpass, boolean menuright, boolean menuleft, + PoseStack pMatrix) { + if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.SCOPEL + || GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.SCOPER) + return; + this.minecraft.getProfiler().popPush("VR"); + this.lightTexture.turnOffLightLayer(); + + if (secondpass) { + this.renderVrShadow(partialTicks, !this.shouldOccludeGui(), pMatrix); + } + + if (!secondpass) { + this.renderCrosshairAtDepth(!GameRendererVRMixin.DATA_HOLDER.vrSettings.useCrosshairOcclusion, pMatrix); + } + + if (!secondpass) { + VRWidgetHelper.renderVRThirdPersonCamWidget(); + } + + if (!secondpass) { + VRWidgetHelper.renderVRHandheldCameraWidget(); + } + + if (secondpass && (Minecraft.getInstance().screen != null || !KeyboardHandler.Showing)) { + this.renderGuiLayer(partialTicks, !this.shouldOccludeGui(), pMatrix); + } + + if (secondpass && KeyboardHandler.Showing) { + if (GameRendererVRMixin.DATA_HOLDER.vrSettings.physicalKeyboard) { + this.renderPhysicalKeyboard(partialTicks, pMatrix); + } else { + this.render2D(partialTicks, KeyboardHandler.Framebuffer, KeyboardHandler.Pos_room, + KeyboardHandler.Rotation_room, !this.shouldOccludeGui(), pMatrix); + } + } + + if (secondpass && RadialHandler.isShowing()) { + this.render2D(partialTicks, RadialHandler.Framebuffer, RadialHandler.Pos_room, RadialHandler.Rotation_room, + !this.shouldOccludeGui(), pMatrix); + } + // render hands in second pass when gui is open + boolean renderHandsSecond = RadialHandler.isShowing() || KeyboardHandler.Showing || Minecraft.getInstance().screen != null; + if (secondpass == renderHandsSecond) { + // should render hands in second pass if menus are open, else in the first pass + // only render the hands only once + this.renderVRHands(partialTicks, this.shouldRenderHands(), this.shouldRenderHands(), menuright, menuleft, + pMatrix); + } + this.renderVRSelfEffects(partialTicks); + } + + public void drawSizedQuad(float displayWidth, float displayHeight, float size, float[] color) { + float f = displayHeight / displayWidth; + BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); + bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR_NORMAL); + bufferbuilder.vertex((double) (-(size / 2.0F)), (double) (-(size * f) / 2.0F), 0.0D).uv(0.0F, 0.0F) + .color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.vertex((double) (size / 2.0F), (double) (-(size * f) / 2.0F), 0.0D).uv(1.0F, 0.0F) + .color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.vertex((double) (size / 2.0F), (double) (size * f / 2.0F), 0.0D).uv(1.0F, 1.0F) + .color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.vertex((double) (-(size / 2.0F)), (double) (size * f / 2.0F), 0.0D).uv(0.0F, 1.0F) + .color(color[0], color[1], color[2], color[3]).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.end(); + BufferUploader.end(bufferbuilder); + } + + public void drawSizedQuad(float displayWidth, float displayHeight, float size, float[] color, Matrix4f pMatrix) { + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderColor(color[0], color[1], color[2], color[3]); + float f = displayHeight / displayWidth; + BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); + bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + bufferbuilder.vertex(pMatrix, (-(size / 2.0F)), (-(size * f) / 2.0F), 0).uv(0.0F, 0.0F).endVertex(); + bufferbuilder.vertex(pMatrix, (size / 2.0F), (-(size * f) / 2.0F), 0).uv(1.0F, 0.0F).endVertex(); + bufferbuilder.vertex(pMatrix, (size / 2.0F), (size * f / 2.0F), 0).uv(1.0F, 1.0F).endVertex(); + bufferbuilder.vertex(pMatrix, (-(size / 2.0F)), (size * f / 2.0F), 0).uv(0.0F, 1.0F).endVertex(); + bufferbuilder.end(); + BufferUploader.end(bufferbuilder); + RenderSystem.setShaderColor(1f, 1f, 1f, 1f); + } + + public void drawSizedQuadSolid(float displayWidth, float displayHeight, float size, float[] color, Matrix4f pMatrix) { + RenderSystem.setShader(GameRenderer::getRendertypeEntitySolidShader); + this.lightTexture.turnOnLightLayer(); + this.overlayTexture().setupOverlayColor(); + float f = displayHeight / displayWidth; + BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); + bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.NEW_ENTITY); + int light = LightTexture.pack(15, 15); + + // store old lights + Vector3f light0Old = RenderSystemAccessor.getShaderLightDirections()[0]; + Vector3f light1Old = RenderSystemAccessor.getShaderLightDirections()[1]; + + // set lights to front + RenderSystem.setShaderLights(new Vector3f(0, 0, 1), new Vector3f(0, 0, 1)); + RenderSystem.setupShaderLights(RenderSystem.getShader()); + + bufferbuilder.vertex(pMatrix, (-(size / 2.0F)), (-(size * f) / 2.0F), 0).color(color[0], color[1], color[2], color[3]) + .uv(0.0F, 0.0F).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(light).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.vertex(pMatrix, (size / 2.0F), (-(size * f) / 2.0F), 0).color(color[0], color[1], color[2], color[3]) + .uv(1.0F, 0.0F).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(light).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.vertex(pMatrix, (size / 2.0F), (size * f / 2.0F), 0).color(color[0], color[1], color[2], color[3]) + .uv(1.0F, 1.0F).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(light).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.vertex(pMatrix, (-(size / 2.0F)), (size * f / 2.0F), 0).color(color[0], color[1], color[2], color[3]) + .uv(0.0F, 1.0F).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(light).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.end(); + BufferUploader.end(bufferbuilder); + this.lightTexture.turnOffLightLayer(); + + // reset lights + if (light0Old != null && light1Old != null) { + RenderSystem.setShaderLights(light0Old, light1Old); + RenderSystem.setupShaderLights(RenderSystem.getShader()); + } + } + + + public void drawSizedQuad(float displayWidth, float displayHeight, float size) { + this.drawSizedQuad(displayWidth, displayHeight, size, new float[]{1, 1, 1, 1}); + } + + public void drawSizedQuadWithLightmap(float displayWidth, float displayHeight, float size, int lighti, + float[] color, Matrix4f pMatrix) { + RenderSystem.setShader(GameRenderer::getRendertypeEntityCutoutNoCullShader); + float f = displayHeight / displayWidth; + this.lightTexture.turnOnLightLayer(); + this.overlayTexture().setupOverlayColor(); + BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); + bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.NEW_ENTITY); + + // store old lights + Vector3f light0Old = RenderSystemAccessor.getShaderLightDirections()[0]; + Vector3f light1Old = RenderSystemAccessor.getShaderLightDirections()[1]; + + // set lights to front + RenderSystem.setShaderLights(new Vector3f(0, 0, 1), new Vector3f(0, 0, 1)); + RenderSystem.setupShaderLights(RenderSystem.getShader()); + + bufferbuilder.vertex(pMatrix, (-(size / 2.0F)), (-(size * f) / 2.0F), 0).color(color[0], color[1], color[2], color[3]) + .uv(0.0F, 0.0F).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(lighti).normal(0, 0, 1).endVertex(); + bufferbuilder.vertex(pMatrix, (size / 2.0F), (-(size * f) / 2.0F), 0).color(color[0], color[1], color[2], color[3]) + .uv(1.0F, 0.0F).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(lighti).normal(0, 0, 1).endVertex(); + bufferbuilder.vertex(pMatrix, (size / 2.0F), (size * f / 2.0F), 0).color(color[0], color[1], color[2], color[3]) + .uv(1.0F, 1.0F).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(lighti).normal(0, 0, 1).endVertex(); + bufferbuilder.vertex(pMatrix, (-(size / 2.0F)), (size * f / 2.0F), 0).color(color[0], color[1], color[2], color[3]) + .uv(0.0F, 1.0F).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(lighti).normal(0, 0, 1).endVertex(); + bufferbuilder.end(); + BufferUploader.end(bufferbuilder); + + this.lightTexture.turnOffLightLayer(); + + // reset lights + if (light0Old != null && light1Old != null) { + RenderSystem.setShaderLights(light0Old, light1Old); + RenderSystem.setupShaderLights(RenderSystem.getShader()); + } + } + + public void drawSizedQuadWithLightmap(float displayWidth, float displayHeight, float size, int lighti, + Matrix4f pMatrix) { + this.drawSizedQuadWithLightmap(displayWidth, displayHeight, size, lighti, new float[]{1, 1, 1, 1}, pMatrix); + } + + private void renderTeleportArc(VRPlayer vrPlayer, PoseStack poseStack) { + if (GameRendererVRMixin.DATA_HOLDER.teleportTracker.vrMovementStyle.showBeam + && GameRendererVRMixin.DATA_HOLDER.teleportTracker.isAiming() + && GameRendererVRMixin.DATA_HOLDER.teleportTracker.movementTeleportArcSteps > 1) { + this.minecraft.getProfiler().push("teleportArc"); + // boolean flag = Config.isShaders(); + boolean flag = false; + RenderSystem.enableCull(); + RenderSystem.setShader(GameRenderer::getPositionColorShader); + RenderSystem.setShaderTexture(0, new ResourceLocation("vivecraft:textures/white.png")); + Tesselator tesselator = Tesselator.getInstance(); + tesselator.getBuilder().begin(Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_NORMAL); + double d0 = GameRendererVRMixin.DATA_HOLDER.teleportTracker.lastTeleportArcDisplayOffset; + Vec3 vec3 = GameRendererVRMixin.DATA_HOLDER.teleportTracker.getDestination(); + boolean flag1 = vec3.x != 0.0D || vec3.y != 0.0D || vec3.z != 0.0D; + byte b0 = -1; + Vec3i vec3i; + + if (!flag1) { + vec3i = new Vec3i(83, 75, 83); + b0 = -128; + } else { + if (ClientNetworking.isLimitedSurvivalTeleport() && !this.minecraft.player.getAbilities().mayfly) { + vec3i = this.tpLimitedColor; + } else { + vec3i = this.tpUnlimitedColor; + } + + d0 = GameRendererVRMixin.DATA_HOLDER.vrRenderer.getCurrentTimeSecs() + * (double) GameRendererVRMixin.DATA_HOLDER.teleportTracker.vrMovementStyle.textureScrollSpeed * 0.6D; + GameRendererVRMixin.DATA_HOLDER.teleportTracker.lastTeleportArcDisplayOffset = d0; + } + + float f = GameRendererVRMixin.DATA_HOLDER.teleportTracker.vrMovementStyle.beamHalfWidth * 0.15F; + int i = GameRendererVRMixin.DATA_HOLDER.teleportTracker.movementTeleportArcSteps - 1; + + if (GameRendererVRMixin.DATA_HOLDER.teleportTracker.vrMovementStyle.beamGrow) { + i = (int) ((double) i * GameRendererVRMixin.DATA_HOLDER.teleportTracker.movementTeleportProgress); + } + + double d1 = 1.0D / (double) i; + Vec3 vec31 = new Vec3(0.0D, 1.0D, 0.0D); + + for (int j = 0; j < i; ++j) { + double d2 = (double) j / (double) i + d0 * d1; + int k = Mth.floor(d2); + d2 = d2 - (double) ((float) k); + Vec3 vec32 = GameRendererVRMixin.DATA_HOLDER.teleportTracker + .getInterpolatedArcPosition((float) (d2 - d1 * (double) 0.4F)) + .subtract(this.minecraft.getCameraEntity().position()); + Vec3 vec33 = GameRendererVRMixin.DATA_HOLDER.teleportTracker.getInterpolatedArcPosition((float) d2) + .subtract(this.minecraft.getCameraEntity().position()); + float f2 = (float) d2 * 2.0F; + this.renderBox(tesselator, vec32, vec33, -f, f, (-1.0F + f2) * f, (1.0F + f2) * f, vec31, vec3i, b0, + poseStack); + } + + tesselator.end(); + RenderSystem.disableCull(); + + if (flag1 && GameRendererVRMixin.DATA_HOLDER.teleportTracker.movementTeleportProgress >= 1.0D) { + Vec3 vec34 = (new Vec3(vec3.x, vec3.y, vec3.z)).subtract(this.minecraft.getCameraEntity().position()); + int l = 1; + float f1 = 0.01F; + double d4 = 0.0D; + double d5 = 0.0D; + double d3 = 0.0D; + + if (l == 0) { + d5 -= (double) f1; + } + + if (l == 1) { + d5 += (double) f1; + } + + if (l == 2) { + d3 -= (double) f1; + } + + if (l == 3) { + d3 += (double) f1; + } + + if (l == 4) { + d4 -= (double) f1; + } + + if (l == 5) { + d4 += (double) f1; + } + + this.renderFlatQuad(vec34.add(d4, d5, d3), 0.6F, 0.6F, 0.0F, (int) ((double) vec3i.getX() * 1.03D), + (int) ((double) vec3i.getY() * 1.03D), (int) ((double) vec3i.getZ() * 1.03D), 64, poseStack); + + if (l == 0) { + d5 -= (double) f1; + } + + if (l == 1) { + d5 += (double) f1; + } + + if (l == 2) { + d3 -= (double) f1; + } + + if (l == 3) { + d3 += (double) f1; + } + + if (l == 4) { + d4 -= (double) f1; + } + + if (l == 5) { + d4 += (double) f1; + } + + this.renderFlatQuad(vec34.add(d4, d5, d3), 0.4F, 0.4F, 0.0F, (int) ((double) vec3i.getX() * 1.04D), + (int) ((double) vec3i.getY() * 1.04D), (int) ((double) vec3i.getZ() * 1.04D), 64, poseStack); + + if (l == 0) { + d5 -= (double) f1; + } + + if (l == 1) { + d5 += (double) f1; + } + + if (l == 2) { + d3 -= (double) f1; + } + + if (l == 3) { + d3 += (double) f1; + } + + if (l == 4) { + d4 -= (double) f1; + } + + if (l == 5) { + d4 += (double) f1; + } + + this.renderFlatQuad(vec34.add(d4, d5, d3), 0.2F, 0.2F, 0.0F, (int) ((double) vec3i.getX() * 1.05D), + (int) ((double) vec3i.getY() * 1.05D), (int) ((double) vec3i.getZ() * 1.05D), 64, poseStack); + } + + this.minecraft.getProfiler().pop(); + RenderSystem.enableCull(); + } + } + + @Override + public void drawEyeStencil(boolean flag1) { + + if (GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.SCOPEL + && GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.SCOPER) { + if ((GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.LEFT + || GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.RIGHT) + && GameRendererVRMixin.DATA_HOLDER.vrSettings.vrUseStencil) { +// net.optifine.shaders.Program program = Shaders.activeProgram; +// +// if (shaders && Shaders.dfb != null) { +// Shaders.dfb.bindFramebuffer(); +// Shaders.useProgram(Shaders.ProgramNone); +// +// for (int i = 0; i < Shaders.usedDepthBuffers; ++i) { +// GlStateManager._bindTexture(Shaders.dfb.depthTextures.get(i)); +// this.minecraft.vrRenderer.doStencil(false); +// } +// +// Shaders.useProgram(program); +// } else { + GameRendererVRMixin.DATA_HOLDER.vrRenderer.doStencil(false); +// } + } else { + GL11.glDisable(GL11.GL_STENCIL_TEST); + } + } else { + // No stencil for telescope + // GameRendererVRMixin.DATA_HOLDER.vrRenderer.doStencil(true); + } + } + + private void renderFaceOverlay(float par1, PoseStack pMatrix) { +// boolean flag = Config.isShaders(); + boolean flag = false; + +// if (flag) { TODO +// Shaders.beginFPOverlay(); +// } + + if (this.inBlock > 0.0F) { + this.renderFaceInBlock(); + this.renderGuiLayer(par1, true, pMatrix); + + if (KeyboardHandler.Showing) { + if (GameRendererVRMixin.DATA_HOLDER.vrSettings.physicalKeyboard) { + this.renderPhysicalKeyboard(par1, pMatrix); + } else { + this.render2D(par1, KeyboardHandler.Framebuffer, KeyboardHandler.Pos_room, + KeyboardHandler.Rotation_room, true, pMatrix); + } + } + + if (RadialHandler.isShowing()) { + this.render2D(par1, RadialHandler.Framebuffer, RadialHandler.Pos_room, RadialHandler.Rotation_room, + true, pMatrix); + } + + if (this.inBlock >= 1.0F) { + this.renderVRHands(par1, true, true, true, true, pMatrix); + } + } + +// if (flag) { TODO +// Shaders.endFPOverlay(); +// } + } + + private void renderFaceInBlock() { + Tesselator tesselator = Tesselator.getInstance(); + BufferBuilder bufferbuilder = tesselator.getBuilder(); + RenderSystem.setShader(GameRenderer::getPositionShader); + RenderSystem.setShaderColor(0.0F, 0.0F, 0.0F, ((GameRendererExtension) this.minecraft.gameRenderer).inBlock()); + + // orthographic matrix, (-1, -1) to (1, 1), near = 0.0, far 2.0 + Matrix4f mat = new Matrix4f(); + mat.m00 = 1.0F; + mat.m11 = 1.0F; + mat.m22 = -1.0F; + mat.m33 = 1.0F; + mat.m23 = -1.0F; + + RenderSystem.depthFunc(GL11.GL_ALWAYS); + RenderSystem.depthMask(true); + RenderSystem.disableTexture(); + RenderSystem.enableBlend(); + RenderSystem.disableCull(); + bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION); + bufferbuilder.vertex(mat, -1.5F, -1.5F, 0.0F).endVertex(); + bufferbuilder.vertex(mat, 1.5F, -1.5F, 0.0F).endVertex(); + bufferbuilder.vertex(mat, 1.5F, 1.5F, 0.0F).endVertex(); + bufferbuilder.vertex(mat, -1.5F, 1.5F, 0.0F).endVertex(); + tesselator.end(); + RenderSystem.depthFunc(GL11.GL_LEQUAL); + RenderSystem.enableTexture(); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + } + + public boolean shouldRenderCrosshair() { + if (ClientDataHolderVR.viewonly) { + return false; + } else if (this.minecraft.level == null) { + return false; + } else if (this.minecraft.screen != null) { + return false; + } else { + boolean flag = GameRendererVRMixin.DATA_HOLDER.vrSettings.renderInGameCrosshairMode == VRSettings.RenderPointerElement.ALWAYS + || (GameRendererVRMixin.DATA_HOLDER.vrSettings.renderInGameCrosshairMode == VRSettings.RenderPointerElement.WITH_HUD + && !this.minecraft.options.hideGui); + + if (!flag) { + return false; + } else if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.THIRD) { + return false; + } else if (GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.SCOPEL + && GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.SCOPER) { + if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.CAMERA) { + return false; + } else if (KeyboardHandler.Showing) { + return false; + } else if (RadialHandler.isUsingController(ControllerType.RIGHT)) { + return false; + } else if (GameRendererVRMixin.DATA_HOLDER.bowTracker.isNotched()) { + return false; + } else if (!GameRendererVRMixin.DATA_HOLDER.vr.getInputAction(VivecraftVRMod.INSTANCE.keyVRInteract) + .isEnabledRaw(ControllerType.RIGHT) + && !VivecraftVRMod.INSTANCE.keyVRInteract.isDown(ControllerType.RIGHT)) { + if (!GameRendererVRMixin.DATA_HOLDER.vr.getInputAction(VivecraftVRMod.INSTANCE.keyClimbeyGrab) + .isEnabledRaw(ControllerType.RIGHT) + && !VivecraftVRMod.INSTANCE.keyClimbeyGrab.isDown(ControllerType.RIGHT)) { + if (GameRendererVRMixin.DATA_HOLDER.teleportTracker.isAiming()) { + return false; + } else if (GameRendererVRMixin.DATA_HOLDER.climbTracker.isGrabbingLadder(0)) { + return false; + } else { + return !(GameRendererVRMixin.DATA_HOLDER.vrPlayer.worldScale > 15.0F); + } + } else { + return false; + } + } else { + return false; + } + } else { + return false; + } + } + } + + private void renderCrosshairAtDepth(boolean depthAlways, PoseStack poseStack) { + if (this.shouldRenderCrosshair()) { + this.minecraft.getProfiler().push("crosshair"); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + Vec3 vec3 = this.crossVec; + Vec3 vec31 = vec3.subtract(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(0).getPosition()); + float f = (float) vec31.length(); + float f1 = (float) ((double) (0.125F * GameRendererVRMixin.DATA_HOLDER.vrSettings.crosshairScale) + * Math.sqrt((double) GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.worldScale)); + vec3 = vec3.add(vec31.normalize().scale(-0.01D)); + poseStack.pushPose(); + poseStack.setIdentity(); + applyVRModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, poseStack); + + Vec3 vec32 = vec3.subtract(this.minecraft.getCameraEntity().position()); + poseStack.translate(vec32.x, vec32.y, vec32.z); + + if (this.minecraft.hitResult != null && this.minecraft.hitResult.getType() == HitResult.Type.BLOCK) { + BlockHitResult blockhitresult = (BlockHitResult) this.minecraft.hitResult; + + if (blockhitresult.getDirection() == Direction.DOWN) { + MethodHolder.rotateDeg(poseStack, + GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(0).getYaw(), 0.0F, 1.0F, + 0.0F); + MethodHolder.rotateDeg(poseStack, -90.0F, 1.0F, 0.0F, 0.0F); + } else if (blockhitresult.getDirection() == Direction.EAST) { + MethodHolder.rotateDeg(poseStack, 90.0F, 0.0F, 1.0F, 0.0F); + } else if (blockhitresult.getDirection() != Direction.NORTH + && blockhitresult.getDirection() != Direction.SOUTH) { + if (blockhitresult.getDirection() == Direction.UP) { + MethodHolder.rotateDeg(poseStack, + -GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(0).getYaw(), 0.0F, + 1.0F, 0.0F); + MethodHolder.rotateDeg(poseStack, -90.0F, 1.0F, 0.0F, 0.0F); + } else if (blockhitresult.getDirection() == Direction.WEST) { + MethodHolder.rotateDeg(poseStack, 90.0F, 0.0F, 1.0F, 0.0F); + } + } + } else { + MethodHolder.rotateDeg(poseStack, + -GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(0).getYaw(), 0.0F, 1.0F, + 0.0F); + MethodHolder.rotateDeg(poseStack, + -GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getController(0).getPitch(), 1.0F, 0.0F, + 0.0F); + } + + if (GameRendererVRMixin.DATA_HOLDER.vrSettings.crosshairScalesWithDistance) { + float f5 = 0.3F + 0.2F * f; + f1 *= f5; + } + + this.lightTexture.turnOnLightLayer(); + poseStack.scale(f1, f1, f1); + RenderSystem.depthMask(true); + RenderSystem.enableDepthTest(); + // RenderSystem.disableLighting(); + RenderSystem.disableCull(); + + if (depthAlways) { + RenderSystem.depthFunc(519); + } else { + RenderSystem.depthFunc(515); + } + + // boolean flag = Config.isShaders(); + boolean flag = false; + RenderSystem.enableBlend(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.ONE_MINUS_DST_COLOR, + GlStateManager.DestFactor.ZERO, GlStateManager.SourceFactor.ONE, + GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + int i = LevelRenderer.getLightColor(this.minecraft.level, new BlockPos(vec3)); + float f2 = 1.0F; + + if (this.minecraft.hitResult == null || this.minecraft.hitResult.getType() == HitResult.Type.MISS) { + f2 = 0.5F; + } + + RenderSystem.setShaderTexture(0, Screen.GUI_ICONS_LOCATION); + float f3 = 0.00390625F; + float f4 = 0.00390625F; + + BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); + + RenderSystem.setShader(GameRenderer::getRendertypeEntityCutoutNoCullShader); + bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.NEW_ENTITY); + + bufferbuilder.vertex(poseStack.last().pose(), -1.0F, 1.0F, 0.0F).color(f2, f2, f2, 1.0F) + .uv(0.0F, 15.0F * f4).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(i).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.vertex(poseStack.last().pose(), 1.0F, 1.0F, 0.0F).color(f2, f2, f2, 1.0F) + .uv(15.0F * f3, 15.0F * f4).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(i).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.vertex(poseStack.last().pose(), 1.0F, -1.0F, 0.0F).color(f2, f2, f2, 1.0F) + .uv(15.0F * f3, 0.0F).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(i).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.vertex(poseStack.last().pose(), -1.0F, -1.0F, 0.0F).color(f2, f2, f2, 1.0F) + .uv(0.0F, 0.0F).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(i).normal(0.0F, 0.0F, 1.0F).endVertex(); + + bufferbuilder.end(); + BufferUploader.end(bufferbuilder); + + RenderSystem.defaultBlendFunc(); + RenderSystem.disableBlend(); + RenderSystem.enableCull(); + RenderSystem.depthFunc(515); + poseStack.popPose(); + this.minecraft.getProfiler().pop(); + } + } + + public boolean shouldOccludeGui() { + Vec3 vec3 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getEye(GameRendererVRMixin.DATA_HOLDER.currentPass) + .getPosition(); + + if (GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.THIRD + && GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.CAMERA) { + return !this.isInMenuRoom() && this.minecraft.screen == null && !KeyboardHandler.Showing + && !RadialHandler.isShowing() && GameRendererVRMixin.DATA_HOLDER.vrSettings.hudOcclusion + && !((ItemInHandRendererExtension) this.itemInHandRenderer).isInsideOpaqueBlock(vec3); + } else { + return true; + } + } + + private void renderVrShadow(float par1, boolean depthAlways, PoseStack poseStack) { + if (GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.THIRD + && GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.CAMERA) { + if (this.minecraft.player.isAlive()) { + if (!(((PlayerExtension) this.minecraft.player).getRoomYOffsetFromPose() < 0.0D)) { + if (this.minecraft.player.getVehicle() == null) { + this.minecraft.getProfiler().push("vr shadow"); + AABB aabb = this.minecraft.player.getBoundingBox(); + + if (GameRendererVRMixin.DATA_HOLDER.vrSettings.vrShowBlueCircleBuddy && aabb != null) { + + poseStack.pushPose(); + poseStack.setIdentity(); + RenderSystem.disableCull(); + this.applyVRModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, poseStack); + Vec3 vec3 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render + .getEye(GameRendererVRMixin.DATA_HOLDER.currentPass).getPosition(); + LocalPlayer localplayer = this.minecraft.player; + Vec3 vec31 = new Vec3(this.rvelastX + (this.rveX - this.rvelastX) * (double) par1, + this.rvelastY + (this.rveY - this.rvelastY) * (double) par1, + this.rvelastZ + (this.rveZ - this.rvelastZ) * (double) par1); + Vec3 vec32 = vec31.subtract(vec3).add(0.0D, 0.005D, 0.0D); + this.setupPolyRendering(true); + RenderSystem.enableDepthTest(); + + if (depthAlways) { + RenderSystem.depthFunc(519); + } else { + RenderSystem.depthFunc(515); + } + + RenderSystem.setShader(GameRenderer::getPositionColorShader); + RenderSystem.setShaderTexture(0, new ResourceLocation("vivecraft:textures/white.png")); + this.renderFlatQuad(vec32, (float) (aabb.maxX - aabb.minX), (float) (aabb.maxZ - aabb.minZ), + 0.0F, 0, 0, 0, 64, poseStack); + RenderSystem.depthFunc(515); + this.setupPolyRendering(false); + poseStack.popPose(); + RenderSystem.enableCull(); + } + this.minecraft.getProfiler().pop(); + } + } + } + } + } + + public boolean shouldRenderHands() { + if (GameRendererVRMixin.DATA_HOLDER.viewonly) { + return false; + } else if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.THIRD) { + return GameRendererVRMixin.DATA_HOLDER.vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY; + } else { + return GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.CAMERA; + } + } + + private void renderVRSelfEffects(float par1) { + if (this.onfire && GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.THIRD + && GameRendererVRMixin.DATA_HOLDER.currentPass != RenderPass.CAMERA) { + this.renderFireInFirstPerson(); + } + this.renderItemActivationAnimation(0, 0, par1); + } + + private void renderFireInFirstPerson() { + PoseStack posestack = new PoseStack(); + this.applyVRModelView(GameRendererVRMixin.DATA_HOLDER.currentPass, posestack); + this.applystereo(GameRendererVRMixin.DATA_HOLDER.currentPass, posestack); + BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); + RenderSystem.depthFunc(519); + + if (GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.THIRD + || GameRendererVRMixin.DATA_HOLDER.currentPass == RenderPass.CAMERA) { + RenderSystem.depthFunc(515); + } + + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + TextureAtlasSprite textureatlassprite = ModelBakery.FIRE_1.sprite(); + RenderSystem.enableDepthTest(); + +// if (SmartAnimations.isActive()) { TODO +// SmartAnimations.spriteRendered(textureatlassprite); +// } + + RenderSystem.setShader(GameRenderer::getPositionTexColorShader); + RenderSystem.setShaderTexture(0, textureatlassprite.atlas().location()); + float f = textureatlassprite.getU0(); + float f1 = textureatlassprite.getU1(); + float f2 = (f + f1) / 2.0F; + float f3 = textureatlassprite.getV0(); + float f4 = textureatlassprite.getV1(); + float f5 = (f3 + f4) / 2.0F; + float f6 = textureatlassprite.uvShrinkRatio(); + float f7 = Mth.lerp(f6, f, f2); + float f8 = Mth.lerp(f6, f1, f2); + float f9 = Mth.lerp(f6, f3, f5); + float f10 = Mth.lerp(f6, f4, f5); + float f11 = 1.0F; + float f12 = 0.3F; + float f13 = (float) (GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getHeadPivot().y + - ((GameRendererExtension) this.minecraft.gameRenderer).getRveY()); + + for (int i = 0; i < 4; ++i) { + posestack.pushPose(); + posestack.mulPose(Vector3f.YP.rotationDegrees( + (float) i * 90.0F - GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getBodyYaw())); + posestack.translate(0.0D, (double) (-f13), 0.0D); + Matrix4f matrix4f = posestack.last().pose(); + bufferbuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); + bufferbuilder.vertex(matrix4f, -f12, 0.0F, -f12).uv(f8, f10).color(1.0F, 1.0F, 1.0F, 0.9F).endVertex(); + bufferbuilder.vertex(matrix4f, f12, 0.0F, -f12).uv(f7, f10).color(1.0F, 1.0F, 1.0F, 0.9F).endVertex(); + bufferbuilder.vertex(matrix4f, f12, f13, -f12).uv(f7, f9).color(1.0F, 1.0F, 1.0F, 0.9F).endVertex(); + bufferbuilder.vertex(matrix4f, -f12, f13, -f12).uv(f8, f9).color(1.0F, 1.0F, 1.0F, 0.9F).endVertex(); + bufferbuilder.end(); + BufferUploader.end(bufferbuilder); + + posestack.popPose(); + } + + RenderSystem.depthFunc(515); + RenderSystem.disableBlend(); + } + + public void applystereo(RenderPass currentPass, PoseStack matrix) { + if (currentPass == RenderPass.LEFT || currentPass == RenderPass.RIGHT) { + Vec3 vec3 = GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getEye(currentPass).getPosition() + .subtract(GameRendererVRMixin.DATA_HOLDER.vrPlayer.vrdata_world_render.getEye(RenderPass.CENTER) + .getPosition()); + matrix.translate((double) ((float) (-vec3.x)), (double) ((float) (-vec3.y)), (double) ((float) (-vec3.z))); + } + } + + @Override + public void restoreRVEPos(LivingEntity e) { + if (e != null) { + e.setPosRaw(this.rveX, this.rveY, this.rveZ); + e.xOld = this.rvelastX; + e.yOld = this.rvelastY; + e.zOld = this.rvelastZ; + e.xo = this.rveprevX; + e.yo = this.rveprevY; + e.zo = this.rveprevZ; + e.setYRot(this.rveyaw); + e.setXRot(this.rvepitch); + e.yRotO = this.rvelastyaw; + e.xRotO = this.rvelastpitch; + e.yHeadRot = this.rveyaw; + e.yHeadRotO = this.rvelastyaw; + e.eyeHeight = this.rveHeight; + this.cached = false; + } + } + + @Override + public void DrawScopeFB(PoseStack matrixStackIn, int i) { + if (ClientDataHolderVR.getInstance().currentPass != RenderPass.SCOPEL && ClientDataHolderVR.getInstance().currentPass != RenderPass.SCOPER) { + //this.lightTexture.turnOffLightLayer(); + matrixStackIn.pushPose(); + RenderSystem.enableDepthTest(); + RenderSystem.enableTexture(); + + if (i == 0) { + ClientDataHolderVR.getInstance().vrRenderer.telescopeFramebufferR.bindRead(); + RenderSystem.setShaderTexture(0, ClientDataHolderVR.getInstance().vrRenderer.telescopeFramebufferR.getColorTextureId()); + } else { + ClientDataHolderVR.getInstance().vrRenderer.telescopeFramebufferL.bindRead(); + RenderSystem.setShaderTexture(0, ClientDataHolderVR.getInstance().vrRenderer.telescopeFramebufferL.getColorTextureId()); + } + + float scale = 0.0785F; + //actual framebuffer + float f = TelescopeTracker.viewPercent(i); + // this.drawSizedQuad(720.0F, 720.0F, scale, new float[]{f, f, f, 1}, matrixStackIn.last().pose()); + this.drawSizedQuadSolid(720.0F, 720.0F, scale, new float[]{f, f, f, 1}, matrixStackIn.last().pose()); + + RenderSystem.setShaderTexture(0, new ResourceLocation("textures/misc/spyglass_scope.png")); + RenderSystem.enableBlend(); + matrixStackIn.translate(0.0D, 0.0D, 0.00001D); + int light = LevelRenderer.getLightColor(this.minecraft.level, new BlockPos(ClientDataHolderVR.getInstance().vrPlayer.vrdata_world_render.getController(i).getPosition())); + this.drawSizedQuadWithLightmap(720.0F, 720.0F, scale, light, matrixStackIn.last().pose()); + + matrixStackIn.popPose(); + this.lightTexture.turnOnLightLayer(); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/ItemInHandRendererVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/ItemInHandRendererVRMixin.java similarity index 92% rename from common/src/main/java/org/vivecraft/mixin/client/renderer/ItemInHandRendererVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/renderer/ItemInHandRendererVRMixin.java index 73b3b7142..db0ac04f2 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/ItemInHandRendererVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/ItemInHandRendererVRMixin.java @@ -1,12 +1,12 @@ -package org.vivecraft.mixin.client.renderer; +package org.vivecraft.mixin.client_vr.renderer; import java.util.Optional; import java.util.stream.Stream; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.extensions.EntityRenderDispatcherExtension; -import org.vivecraft.extensions.GameRendererExtension; -import org.vivecraft.extensions.ItemInHandRendererExtension; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.extensions.EntityRenderDispatcherVRExtension; +import org.vivecraft.client_vr.extensions.GameRendererExtension; +import org.vivecraft.client_vr.extensions.ItemInHandRendererExtension; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Vector3f; @@ -38,26 +38,24 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.gameplay.trackers.BowTracker; -import org.vivecraft.gameplay.trackers.TelescopeTracker; -import org.vivecraft.render.RenderPass; -import org.vivecraft.render.VRArmRenderer; -import org.vivecraft.render.VRFirstPersonArmSwing; -import org.vivecraft.render.VivecraftItemRendering; +import org.vivecraft.client_vr.gameplay.trackers.BowTracker; +import org.vivecraft.client_vr.gameplay.trackers.TelescopeTracker; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client_vr.render.VRArmRenderer; +import org.vivecraft.client_vr.render.VRFirstPersonArmSwing; +import org.vivecraft.client_vr.render.VivecraftItemRendering; +import org.vivecraft.client_vr.VRState; @Mixin(value = ItemInHandRenderer.class, priority = 999) public abstract class ItemInHandRendererVRMixin implements ItemInHandRendererExtension { - @Unique - private float xdist = 0F; - @Unique private VRFirstPersonArmSwing swingType = VRFirstPersonArmSwing.Attack; @Final @Shadow private Minecraft minecraft; - ClientDataHolder dh = ClientDataHolder.getInstance(); + ClientDataHolderVR dh = ClientDataHolderVR.getInstance(); @Final @Shadow private EntityRenderDispatcher entityRenderDispatcher; @@ -91,12 +89,18 @@ public Triple getNearOpaqueBlock(Vec3 in, double di @Inject(at = @At("HEAD"), method = "renderPlayerArm", cancellable = true) public void overrideArm(PoseStack poseStack, MultiBufferSource multiBufferSource, int i, float f, float g, HumanoidArm humanoidArm, CallbackInfo ci) { + if (!VRState.vrRunning) { + return; + } vrPlayerArm(poseStack, multiBufferSource, i, f, g, humanoidArm); ci.cancel(); } @Inject(at = @At("HEAD"), method = "renderArmWithItem", cancellable = true) public void overrideArmItem(AbstractClientPlayer abstractClientPlayer, float f, float g, InteractionHand interactionHand, float h, ItemStack itemStack, float i, PoseStack poseStack, MultiBufferSource multiBufferSource, int j, CallbackInfo ci) { + if (!VRState.vrRunning) { + return; + } this.vrRenderArmWithItem(abstractClientPlayer, f, g, interactionHand, h, itemStack, i, poseStack, multiBufferSource, j); ci.cancel(); } @@ -224,7 +228,7 @@ public void vrPlayerArm(PoseStack poseStack, MultiBufferSource multiBufferSource float h = flag ? 1.0F : -1.0F; AbstractClientPlayer abstractclientplayer = this.minecraft.player; RenderSystem.setShaderTexture(0, abstractclientplayer.getSkinTextureLocation()); - VRArmRenderer vrarmrenderer = ((EntityRenderDispatcherExtension)entityRenderDispatcher).getArmSkinMap().get(abstractclientplayer.getModelName()); + VRArmRenderer vrarmrenderer = ((EntityRenderDispatcherVRExtension)entityRenderDispatcher).getArmSkinMap().get(abstractclientplayer.getModelName()); poseStack.pushPose(); if (abstractclientplayer.swingingArm == InteractionHand.MAIN_HAND && flag) { @@ -261,12 +265,6 @@ public void vrPlayerArm(PoseStack poseStack, MultiBufferSource multiBufferSource poseStack.popPose(); } - - @Override - public void setXdist(float v) { - this.xdist = v; - } - @Override public void setSwingType(VRFirstPersonArmSwing interact) { this.swingType = interact; diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/ItemPropertiesVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/ItemPropertiesVRMixin.java new file mode 100644 index 000000000..4090b4593 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/ItemPropertiesVRMixin.java @@ -0,0 +1,35 @@ +package org.vivecraft.mixin.client_vr.renderer; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.item.ItemProperties; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Group; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.vivecraft.client_vr.VRState; + +@Mixin(ItemProperties.class) +public class ItemPropertiesVRMixin { + + @Group(name = "disableGoatHornAnimation", min = 1, max = 1) + @Inject(at = @At("HEAD"), method = "method_43611" // fabric + , remap = false, cancellable = true, expect = 0) + private static void noHornUseAnimFabric(ItemStack itemStack, ClientLevel clientLevel, LivingEntity livingEntity, int i, CallbackInfoReturnable cir){ + if (VRState.vrRunning && livingEntity == Minecraft.getInstance().player) { + cir.setReturnValue(0.0F); + } + } + + @Group(name = "disableGoatHornAnimation", min = 1, max = 1) + @Inject(at = @At("HEAD"), method = "m_234977_" // forge + , remap = false, cancellable = true, expect = 0) + private static void noHornUseAnimForge(ItemStack itemStack, ClientLevel clientLevel, LivingEntity livingEntity, int i, CallbackInfoReturnable cir){ + if (VRState.vrRunning && livingEntity == Minecraft.getInstance().player) { + cir.setReturnValue(0.0F); + } + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/LevelRendererVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/LevelRendererVRMixin.java new file mode 100644 index 000000000..309ce42d0 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/LevelRendererVRMixin.java @@ -0,0 +1,430 @@ +package org.vivecraft.mixin.client_vr.renderer; + +import net.minecraft.server.packs.resources.ResourceManager; +import com.mojang.math.Matrix4f; +import net.minecraft.world.entity.player.Player; +import org.spongepowered.asm.mixin.injection.*; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.mod_compat_vr.ShadersHelper; +import org.vivecraft.client_xr.render_pass.RenderPassManager; +import org.vivecraft.client_xr.render_pass.RenderPassType; +import org.vivecraft.client_vr.extensions.GameRendererExtension; +import org.vivecraft.client_vr.extensions.LevelRendererExtension; +import com.mojang.blaze3d.pipeline.RenderTarget; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.*; +import net.minecraft.core.BlockPos; +import net.minecraft.server.packs.resources.ResourceManagerReloadListener; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.lighting.LevelLightEngine; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.At.Shift; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client_vr.settings.VRSettings; +import org.vivecraft.mod_compat_vr.optifine.OptifineHelper; + +import javax.annotation.Nullable; + +// priority 999 to inject before iris, for the vrFast rendering +@Mixin(value = LevelRenderer.class, priority = 999) +public abstract class LevelRendererVRMixin implements ResourceManagerReloadListener, AutoCloseable, LevelRendererExtension { + + @Unique + @Nullable + public RenderTarget alphaSortVROccludedFramebuffer; + @Unique + @Nullable + public RenderTarget alphaSortVRUnoccludedFramebuffer; + @Unique + @Nullable + public RenderTarget alphaSortVRHandsFramebuffer; + @Unique + public float selR; + @Unique + public float selG; + @Unique + public float selB; + + @Unique + private Entity capturedEntity; + + @Final + @Shadow + private Minecraft minecraft; + @Shadow + private ClientLevel level; + @Shadow + private PostChain transparencyChain; + @Shadow + private RenderTarget translucentTarget; + @Shadow + private RenderTarget itemEntityTarget; + @Shadow + private RenderTarget particlesTarget; + @Shadow + private RenderTarget weatherTarget; + @Shadow + private RenderTarget cloudsTarget; + @Shadow + private PostChain entityEffect; + @Shadow + private RenderTarget entityTarget; + @Shadow + private boolean needsFullRenderChunkUpdate; + @Final + @Shadow + private RenderBuffers renderBuffers; + @Unique + private Entity renderedEntity; + + @Shadow + protected abstract void renderHitOutline(PoseStack poseStack, VertexConsumer buffer, Entity entity, double d, double e, double g, BlockPos blockpos, BlockState blockstate); + + @Shadow + private static void renderShape(PoseStack poseStack, VertexConsumer vertexConsumer, VoxelShape voxelShape, double d, double e, double f, float g, float h, float i, float j) { + } + + @Override + public Entity getRenderedEntity() { + return this.renderedEntity; + } + + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;floor(D)I", ordinal = 0), method = "renderSnowAndRain") + public double rainX(double x) { + if (!RenderPassType.isVanilla() && (ClientDataHolderVR.getInstance().currentPass == RenderPass.LEFT || ClientDataHolderVR.getInstance().currentPass == RenderPass.RIGHT)) { + return ClientDataHolderVR.getInstance().vrPlayer.vrdata_world_render.getEye(RenderPass.CENTER).getPosition().x; + } + return x; + } + + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;floor(D)I", ordinal = 1), method = "renderSnowAndRain") + public double rainY(double y) { + if (!RenderPassType.isVanilla() && (ClientDataHolderVR.getInstance().currentPass == RenderPass.LEFT || ClientDataHolderVR.getInstance().currentPass == RenderPass.RIGHT)) { + return ClientDataHolderVR.getInstance().vrPlayer.vrdata_world_render.getEye(RenderPass.CENTER).getPosition().y; + } + return y; + } + + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;floor(D)I", ordinal = 2), method = "renderSnowAndRain") + public double rainZ(double z) { + if (!RenderPassType.isVanilla() && (ClientDataHolderVR.getInstance().currentPass == RenderPass.LEFT || ClientDataHolderVR.getInstance().currentPass == RenderPass.RIGHT)) { + return ClientDataHolderVR.getInstance().vrPlayer.vrdata_world_render.getEye(RenderPass.CENTER).getPosition().z; + } + return z; + } + + @Inject(at = @At("TAIL"), method = "onResourceManagerReload") + public void reinitVR(ResourceManager resourceManager, CallbackInfo ci) { + if (VRState.vrInitialized) { + ClientDataHolderVR.getInstance().vrRenderer.reinitFrameBuffers("Resource Reload"); + } + } + + /* + * Start `renderLevel` lighting poll + */ + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientLevel;pollLightUpdates()V"), method = "renderLevel") + public void onePollLightUpdates(ClientLevel instance) { + if (RenderPassType.isVanilla() || ClientDataHolderVR.getInstance().currentPass == RenderPass.LEFT) { + instance.pollLightUpdates(); + } + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/lighting/LevelLightEngine;runUpdates(IZZ)I"), method = "renderLevel") + public int oneLightingUpdates(LevelLightEngine instance, int i, boolean bl, boolean bl2) { + if (RenderPassType.isVanilla() || ClientDataHolderVR.getInstance().currentPass == RenderPass.LEFT) { + instance.runUpdates(i, bl, bl2); + } + if (!RenderPassType.isVanilla()) { + this.setShaderGroup(); + } + return 0; + } + + /* + * End `renderLevel` lighting poll + */ + + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;getRenderDistance()F", shift = Shift.BEFORE), + method = "renderLevel") + public void stencil(PoseStack poseStack, float f, long l, boolean bl, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f matrix4f, CallbackInfo info) { + if (!RenderPassType.isVanilla()) { + this.minecraft.getProfiler().popPush("stencil"); + ((GameRendererExtension) gameRenderer).drawEyeStencil(false); + } + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;isSleeping()Z"), method = "renderLevel") + public boolean noPlayerWhenSleeping(LivingEntity instance) { + if (!RenderPassType.isVanilla()) { + return false; + } else { + return instance.isSleeping(); + } + } + + // TODO: could this mess with mods? + @ModifyVariable(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;renderEntity(Lnet/minecraft/world/entity/Entity;DDDFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;)V", ordinal = 0), method = "renderLevel") + public Entity captureEntityRestoreLoc(Entity entity, PoseStack poseStack, float f, long l, boolean bl, Camera camera, GameRenderer gameRenderer) { + this.capturedEntity = entity; + if (!RenderPassType.isVanilla() && capturedEntity == camera.getEntity()) { + ((GameRendererExtension) gameRenderer).restoreRVEPos((LivingEntity) capturedEntity); + } + this.renderedEntity = capturedEntity; + return entity; + } + + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;renderEntity(Lnet/minecraft/world/entity/Entity;DDDFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;)V", shift = Shift.AFTER), method = "renderLevel") + public void restoreLoc2(PoseStack poseStack, float f, long l, boolean bl, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f matrix4f, CallbackInfo ci) { + if (!RenderPassType.isVanilla() && capturedEntity == camera.getEntity()) { + ((GameRendererExtension) gameRenderer).cacheRVEPos((LivingEntity) capturedEntity); + ((GameRendererExtension) gameRenderer).setupRVE(); + } + this.renderedEntity = null; + } + + @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;hitResult:Lnet/minecraft/world/phys/HitResult;", ordinal = 1), method = "renderLevel") + public void interactOutline(PoseStack poseStack, float f, long l, boolean bl, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f matrix4f, CallbackInfo ci) { + if (!RenderPassType.isVanilla()) { + this.level.getProfiler().popPush("interact outline"); + selR = selG = selB = 1f; + Vec3 vec3 = camera.getPosition(); + double d = vec3.x(); + double e = vec3.y(); + double g = vec3.z(); + if (OptifineHelper.isOptifineLoaded() && OptifineHelper.isShaderActive()) { + OptifineHelper.beginOutlineShader(); + } + for (int c = 0; c < 2; c++) { + if (ClientDataHolderVR.getInstance().interactTracker.isInteractActive(c) && (ClientDataHolderVR.getInstance().interactTracker.inBlockHit[c] != null || ClientDataHolderVR.getInstance().interactTracker.bukkit[c])) { + BlockPos blockpos = ClientDataHolderVR.getInstance().interactTracker.inBlockHit[c] != null ? ClientDataHolderVR.getInstance().interactTracker.inBlockHit[c].getBlockPos() : new BlockPos(ClientDataHolderVR.getInstance().vrPlayer.vrdata_world_render.getController(c).getPosition()); + BlockState blockstate = this.level.getBlockState(blockpos); + this.renderHitOutline(poseStack, this.renderBuffers.bufferSource().getBuffer(RenderType.lines()), camera.getEntity(), d, e, g, blockpos, blockstate); + } + } + if (OptifineHelper.isOptifineLoaded() && OptifineHelper.isShaderActive()) { + this.renderBuffers.bufferSource().endBatch(RenderType.lines()); + OptifineHelper.endOutlineShader(); + } + // reset outline color + selR = selG = selB = 0f; + } + } + + @ModifyVariable(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;hitResult:Lnet/minecraft/world/phys/HitResult;", ordinal = 1), method = "renderLevel", ordinal = 0, argsOnly = true) + public boolean noBlockoutlineOnInteract(boolean renderBlockOutline) { + // don't draw the block outline when the interaction outline is active + return renderBlockOutline && (RenderPassType.isVanilla() || !(ClientDataHolderVR.getInstance().interactTracker.isInteractActive(0) && (ClientDataHolderVR.getInstance().interactTracker.inBlockHit[0] != null || ClientDataHolderVR.getInstance().interactTracker.bukkit[0]))); + } + + @Unique + private boolean menuHandleft; + @Unique + private boolean menuhandright; + @Unique + private boolean guiRendered = false; + + @Inject(at = @At("HEAD"), method = "renderLevel") + public void resetGuiRendered(PoseStack poseStack, float f, long l, boolean bl, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f matrix4f, CallbackInfo ci) { + guiRendered = false; + } + + @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/renderer/LevelRenderer;transparencyChain:Lnet/minecraft/client/renderer/PostChain;", ordinal = 0, shift = Shift.BEFORE), method = "renderLevel") + public void renderVrStuffPart1(PoseStack poseStack, float f, long l, boolean bl, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f matrix4f, CallbackInfo ci) { + if (RenderPassType.isVanilla()) { + return; + } + menuHandleft = ((GameRendererExtension) gameRenderer).isInMenuRoom() || this.minecraft.screen != null || KeyboardHandler.Showing; + menuhandright = menuHandleft || ClientDataHolderVR.getInstance().interactTracker.hotbar >= 0 && ClientDataHolderVR.getInstance().vrSettings.vrTouchHotbar; + + if (transparencyChain != null) { + ((GameRendererExtension) gameRenderer).renderVRFabulous(f, (LevelRenderer) (Object) this, menuhandright, menuHandleft, poseStack); + } else { + ((GameRendererExtension) gameRenderer).renderVrFast(f, false, menuhandright, menuHandleft, poseStack); + if (ShadersHelper.isShaderActive() && ClientDataHolderVR.getInstance().vrSettings.shaderGUIRender == VRSettings.ShaderGUIRender.BEFORE_TRANSLUCENT_SOLID) { + // shaders active, and render gui before translucents + ((GameRendererExtension) gameRenderer).renderVrFast(f, true, menuhandright, menuHandleft, poseStack); + guiRendered = true; + } + } + } + + @Inject(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;pushPose()V", shift = Shift.BEFORE, ordinal = 4), + method = "renderLevel") + public void renderVrStuffPart2(PoseStack poseStack, float f, long l, boolean bl, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f matrix4f, CallbackInfo ci) { + if (RenderPassType.isVanilla()) { + return; + } + + if (transparencyChain == null && (!ShadersHelper.isShaderActive() || ClientDataHolderVR.getInstance().vrSettings.shaderGUIRender == VRSettings.ShaderGUIRender.AFTER_TRANSLUCENT)) { + // no shaders, or shaders, and gui after translucents + ((GameRendererExtension) gameRenderer).renderVrFast(f, true, menuhandright, menuHandleft, poseStack); + guiRendered = true; + } + } + + // if the gui didn't render yet, and something canceled the level renderer, render it now. + // or if shaders are on, and option AFTER_SHADER is selected + @Inject(at = @At("RETURN"), method = "renderLevel") + public void renderVrStuffFinal(PoseStack poseStack, float f, long l, boolean bl, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f matrix4f, CallbackInfo info) { + if (RenderPassType.isVanilla()) { + return; + } + + if (!guiRendered && transparencyChain == null) { + ((GameRendererExtension) gameRenderer).renderVrFast(f, true, menuhandright, menuHandleft, poseStack); + guiRendered = true; + } + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;renderShape(Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;Lnet/minecraft/world/phys/shapes/VoxelShape;DDDFFFF)V"), method = "renderHitOutline") + public void colorHitBox(PoseStack poseStack, VertexConsumer vertexConsumer, VoxelShape voxelShape, double d, double e, double f, float g, float h, float i, float j) { + renderShape(poseStack, vertexConsumer, voxelShape, d, e, f, this.selR, this.selG, this.selB, j); + } + + @Inject(at = @At("HEAD"), method = "levelEvent") + public void shakeOnSound(Player player, int i, BlockPos blockPos, int j, CallbackInfo ci) { + boolean playerNearAndVR = VRState.vrRunning && this.minecraft.player != null && this.minecraft.player.isAlive() && this.minecraft.player.blockPosition().distSqr(blockPos) < 25.0D; + if (playerNearAndVR) { + switch (i) { + // pre 1.19.4, they are now separate + case 1011, // IRON_DOOR_CLOSE + 1012, // WOODEN_DOOR_CLOSE + 1013, // WOODEN_TRAPDOOR_CLOSE + 1014, // FENCE_GATE_CLOSE + 1036 // IRON_TRAPDOOR_CLOSE + -> ClientDataHolderVR.getInstance().vr.triggerHapticPulse(0, 250); + case 1019, // ZOMBIE_ATTACK_WOODEN_DOOR + 1020, // ZOMBIE_ATTACK_IRON_DOOR + 1021 // ZOMBIE_BREAK_WOODEN_DOOR + -> { + ClientDataHolderVR.getInstance().vr.triggerHapticPulse(0, 750); + ClientDataHolderVR.getInstance().vr.triggerHapticPulse(1, 750); + } + case 1030 -> // ANVIL_USE + ClientDataHolderVR.getInstance().vr.triggerHapticPulse(0, 500); + case 1031 -> { // ANVIL_LAND + ClientDataHolderVR.getInstance().vr.triggerHapticPulse(0, 1250); + ClientDataHolderVR.getInstance().vr.triggerHapticPulse(1, 1250); + } + } + } + } + + @Inject(at = @At("HEAD"), method = {"initOutline", "initTransparency"}) + public void restorePostChain(CallbackInfo ci){ + if (VRState.vrInitialized) { + restoreVanillaPostChains(); + ClientDataHolderVR.getInstance().vrRenderer.reinitFrameBuffers("Outline/Transparency shaders Reloaded"); + } + } + + @Inject(at = @At("TAIL"), method = "initOutline") + public void captureOutlineChain(CallbackInfo ci){ + RenderPassManager.INSTANCE.vanillaOutlineChain = entityEffect; + } + + @Inject(at = @At("TAIL"), method = "initTransparency") + public void captureTransparencyChain(CallbackInfo ci){ + RenderPassManager.INSTANCE.vanillaTransparencyChain = transparencyChain; + } + @Inject(at = @At("TAIL"), method = "deinitTransparency") + public void removeTransparencyChain(CallbackInfo ci){ + RenderPassManager.INSTANCE.vanillaTransparencyChain = null; + } + + @Inject(at = @At("TAIL"), method = "close") + public void removePostChains(CallbackInfo ci){ + RenderPassManager.INSTANCE.vanillaOutlineChain = null; + RenderPassManager.INSTANCE.vanillaTransparencyChain = null; + } + + @Override + public void restoreVanillaPostChains(){ + transparencyChain = RenderPassManager.INSTANCE.vanillaTransparencyChain; + + if (transparencyChain != null) { + this.translucentTarget = transparencyChain.getTempTarget("translucent"); + this.itemEntityTarget = transparencyChain.getTempTarget("itemEntity"); + this.particlesTarget = transparencyChain.getTempTarget("particles"); + this.weatherTarget = transparencyChain.getTempTarget("weather"); + this.cloudsTarget = transparencyChain.getTempTarget("clouds"); + } else { + this.translucentTarget = null; + this.itemEntityTarget = null; + this.particlesTarget = null; + this.weatherTarget = null; + this.cloudsTarget = null; + } + + entityEffect = RenderPassManager.INSTANCE.vanillaOutlineChain; + if (entityEffect != null) { + this.entityTarget = entityEffect.getTempTarget("final"); + } else { + this.entityTarget = null; + } + } + + public void setShaderGroup() { + PostChain transparencyChain = RenderPassManager.wrp.transparencyChain; + + if (transparencyChain != null) { + this.transparencyChain = transparencyChain; + this.translucentTarget = transparencyChain.getTempTarget("translucent"); + this.itemEntityTarget = transparencyChain.getTempTarget("itemEntity"); + this.particlesTarget = transparencyChain.getTempTarget("particles"); + this.weatherTarget = transparencyChain.getTempTarget("weather"); + this.cloudsTarget = transparencyChain.getTempTarget("clouds"); + this.alphaSortVRHandsFramebuffer = transparencyChain.getTempTarget("vrhands"); + this.alphaSortVROccludedFramebuffer = transparencyChain.getTempTarget("vroccluded"); + this.alphaSortVRUnoccludedFramebuffer = transparencyChain.getTempTarget("vrunoccluded"); + } else { + this.transparencyChain = null; + this.translucentTarget = null; + this.itemEntityTarget = null; + this.particlesTarget = null; + this.weatherTarget = null; + this.cloudsTarget = null; + this.alphaSortVRHandsFramebuffer = null; + this.alphaSortVROccludedFramebuffer = null; + this.alphaSortVRUnoccludedFramebuffer = null; + } + + PostChain outlineChain = RenderPassManager.wrp.outlineChain; + + if (outlineChain != null) { + this.entityEffect = outlineChain; + this.entityTarget = outlineChain.getTempTarget("final"); + } else { + this.entityEffect = null; + this.entityTarget = null; + } + } + + @Override + public RenderTarget getAlphaSortVROccludedFramebuffer() { + return alphaSortVROccludedFramebuffer; + } + + @Override + public RenderTarget getAlphaSortVRUnoccludedFramebuffer() { + return alphaSortVRUnoccludedFramebuffer; + } + + @Override + public RenderTarget getAlphaSortVRHandsFramebuffer() { + return alphaSortVRHandsFramebuffer; + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/NoSodiumLevelRendererVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/NoSodiumLevelRendererVRMixin.java similarity index 69% rename from common/src/main/java/org/vivecraft/mixin/client/renderer/NoSodiumLevelRendererVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/renderer/NoSodiumLevelRendererVRMixin.java index 4b34be03c..1f51cec3c 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/NoSodiumLevelRendererVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/NoSodiumLevelRendererVRMixin.java @@ -1,6 +1,8 @@ -package org.vivecraft.mixin.client.renderer; +package org.vivecraft.mixin.client_vr.renderer; -import org.vivecraft.mixin.blaze3d.systems.RenderSystemAccessor; +import org.spongepowered.asm.mixin.Final; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.mixin.client.blaze3d.RenderSystemAccessor; import net.minecraft.client.Camera; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.culling.Frustum; @@ -12,15 +14,25 @@ import org.spongepowered.asm.mixin.injection.ModifyConstant; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import java.util.concurrent.atomic.AtomicBoolean; + @Mixin(LevelRenderer.class) public class NoSodiumLevelRendererVRMixin { @Shadow private boolean needsFullRenderChunkUpdate; + @Shadow + @Final + private AtomicBoolean needsFrustumUpdate; + @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/renderer/LevelRenderer;needsFullRenderChunkUpdate:Z", ordinal = 1, shift = At.Shift.AFTER), method = "setupRender(Lnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/culling/Frustum;ZZ)V") public void alwaysUpdateCull(Camera camera, Frustum frustum, boolean bl, boolean bl2, CallbackInfo info) { - this.needsFullRenderChunkUpdate = true; + if (VRState.vrRunning) { + this.needsFullRenderChunkUpdate = true; + // if VR is on, always update the frustum, to fix flickering chunks between eyes + needsFrustumUpdate.set(true); + } } @ModifyConstant(method = "renderChunkLayer", constant = @Constant(intValue = 12)) diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/PostChainVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/PostChainVRMixin.java similarity index 88% rename from common/src/main/java/org/vivecraft/mixin/client/renderer/PostChainVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/renderer/PostChainVRMixin.java index 77a2f023d..37080aeb7 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/PostChainVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/PostChainVRMixin.java @@ -1,4 +1,4 @@ -package org.vivecraft.mixin.client.renderer; +package org.vivecraft.mixin.client_vr.renderer; import com.mojang.blaze3d.pipeline.RenderTarget; import net.minecraft.client.Minecraft; @@ -8,7 +8,7 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.vivecraft.extensions.RenderTargetExtension; +import org.vivecraft.client.extensions.RenderTargetExtension; @Mixin(PostChain.class) public class PostChainVRMixin { diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/blockentity/TheEndGatewayRendererVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/blockentity/TheEndGatewayRendererVRMixin.java new file mode 100644 index 000000000..4dbb7db18 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/blockentity/TheEndGatewayRendererVRMixin.java @@ -0,0 +1,46 @@ +package org.vivecraft.mixin.client_vr.renderer.blockentity; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import net.minecraft.client.renderer.RenderStateShard; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.blockentity.TheEndGatewayRenderer; +import net.minecraft.client.renderer.blockentity.TheEndPortalRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.vivecraft.client_vr.render.VRShaders; +import org.vivecraft.client_xr.render_pass.RenderPassType; + +@Mixin(TheEndGatewayRenderer.class) +public class TheEndGatewayRendererVRMixin { + @Unique + private static final RenderType END_GATEWAY_VR = + RenderType + .create( + "end_portal", + DefaultVertexFormat.POSITION, + VertexFormat.Mode.QUADS, + 256, + false, + false, + RenderType.CompositeState.builder() + .setShaderState(new RenderStateShard.ShaderStateShard(VRShaders::getRendertypeEndGatewayShaderVR)) + .setTextureState( + RenderStateShard + .MultiTextureStateShard + .builder() + .add(TheEndPortalRenderer.END_SKY_LOCATION, false, false) + .add(TheEndPortalRenderer.END_PORTAL_LOCATION, false, false) + .build()) + .createCompositeState(false)); + + @Inject(at = @At("HEAD"), method = "renderType", cancellable = true) + private void differentShaderInVR(CallbackInfoReturnable cir){ + if (!RenderPassType.isVanilla()){ + cir.setReturnValue(END_GATEWAY_VR);; + } + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/blockentity/TheEndPortalRendererVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/blockentity/TheEndPortalRendererVRMixin.java new file mode 100644 index 000000000..59bcb595e --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/blockentity/TheEndPortalRendererVRMixin.java @@ -0,0 +1,46 @@ +package org.vivecraft.mixin.client_vr.renderer.blockentity; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import net.minecraft.client.renderer.RenderStateShard; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.blockentity.TheEndPortalRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.vivecraft.client_vr.render.VRShaders; +import org.vivecraft.client_xr.render_pass.RenderPassType; + +@Mixin(TheEndPortalRenderer.class) +public class TheEndPortalRendererVRMixin { + + @Unique + private static final RenderType END_PORTAL_VR = + RenderType + .create( + "end_portal", + DefaultVertexFormat.POSITION, + VertexFormat.Mode.QUADS, + 256, + false, + false, + RenderType.CompositeState.builder() + .setShaderState(new RenderStateShard.ShaderStateShard(VRShaders::getRendertypeEndPortalShaderVR)) + .setTextureState( + RenderStateShard + .MultiTextureStateShard + .builder() + .add(TheEndPortalRenderer.END_SKY_LOCATION, false, false) + .add(TheEndPortalRenderer.END_PORTAL_LOCATION, false, false) + .build()) + .createCompositeState(false)); + + @Inject(at = @At("HEAD"), method = "renderType", cancellable = true) + private void differentShaderInVR(CallbackInfoReturnable cir){ + if (!RenderPassType.isVanilla()){ + cir.setReturnValue(END_PORTAL_VR);; + } + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/EntityRenderDispatcherVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/entity/EntityRenderDispatcherVRMixin.java similarity index 71% rename from common/src/main/java/org/vivecraft/mixin/client/renderer/entity/EntityRenderDispatcherVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/renderer/entity/EntityRenderDispatcherVRMixin.java index 6549c1000..b6ba74de4 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/EntityRenderDispatcherVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/entity/EntityRenderDispatcherVRMixin.java @@ -1,8 +1,8 @@ -package org.vivecraft.mixin.client.renderer.entity; +package org.vivecraft.mixin.client_vr.renderer.entity; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.extensions.EntityRenderDispatcherExtension; -import org.vivecraft.extensions.LevelRendererExtension; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.extensions.EntityRenderDispatcherVRExtension; +import org.vivecraft.client_vr.extensions.LevelRendererExtension; import com.mojang.math.Quaternion; import com.mojang.math.Vector3f; import net.minecraft.client.Camera; @@ -21,14 +21,15 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; -import org.vivecraft.render.RenderPass; -import org.vivecraft.render.VRArmRenderer; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client_vr.render.VRArmRenderer; +import org.vivecraft.client_xr.render_pass.RenderPassType; import java.util.HashMap; import java.util.Map; @Mixin(EntityRenderDispatcher.class) -public abstract class EntityRenderDispatcherVRMixin implements ResourceManagerReloadListener, EntityRenderDispatcherExtension { +public abstract class EntityRenderDispatcherVRMixin implements ResourceManagerReloadListener, EntityRenderDispatcherVRExtension { @Unique private VRArmRenderer armRenderer; @@ -41,20 +42,18 @@ public abstract class EntityRenderDispatcherVRMixin implements ResourceManagerRe @Inject(at = @At("HEAD"), method = "cameraOrientation", cancellable = true) public void cameraOrientation(CallbackInfoReturnable cir) { - if (ClientDataHolder.getInstance().currentPass == RenderPass.GUI) { - cir.setReturnValue(this.camera.rotation()); - return; + if (RenderPassType.isVanilla() || RenderPassType.isGuiOnly()) { + cir.setReturnValue(cameraOrientation); } else { Entity entity = ((LevelRendererExtension)Minecraft.getInstance().levelRenderer).getRenderedEntity(); if (entity == null) { cir.setReturnValue(this.camera.rotation()); - return; } else { - Vec3 vec3 = ClientDataHolder.getInstance().vrPlayer.getVRDataWorld().getEye(RenderPass.CENTER).getPosition(); - if (ClientDataHolder.getInstance().currentPass == RenderPass.THIRD || ClientDataHolder.getInstance().currentPass == RenderPass.CAMERA) { - vec3 = ClientDataHolder.getInstance().vrPlayer.getVRDataWorld().getEye(ClientDataHolder.getInstance().currentPass).getPosition(); + Vec3 vec3 = ClientDataHolderVR.getInstance().vrPlayer.getVRDataWorld().getEye(RenderPass.CENTER).getPosition(); + if (ClientDataHolderVR.getInstance().currentPass == RenderPass.THIRD || ClientDataHolderVR.getInstance().currentPass == RenderPass.CAMERA) { + vec3 = ClientDataHolderVR.getInstance().vrPlayer.getVRDataWorld().getEye(ClientDataHolderVR.getInstance().currentPass).getPosition(); } Vec3 vec31 = entity.position().add(0.0D, (double)(entity.getBbHeight() / 2.0F), 0.0D).subtract(vec3).normalize(); Quaternion q = new Quaternion(0.0F, 0.0F, 0.0F, 1.0F); @@ -76,16 +75,16 @@ public void reload(ResourceManager resourceManager, CallbackInfo ci, EntityRende @Override public Quaternion getCameraOrientationOffset(float offset) { - if (ClientDataHolder.getInstance().currentPass == RenderPass.GUI) { - return this.camera.rotation(); + if (RenderPassType.isVanilla() || RenderPassType.isGuiOnly()) { + return cameraOrientation; } else { Entity entity = ((LevelRendererExtension)Minecraft.getInstance().levelRenderer).getRenderedEntity(); if (entity == null) { return this.camera.rotation(); } else { - Vec3 vec3 = ClientDataHolder.getInstance().vrPlayer.getVRDataWorld().getEye(RenderPass.CENTER).getPosition(); - if (ClientDataHolder.getInstance().currentPass == RenderPass.THIRD || ClientDataHolder.getInstance().currentPass == RenderPass.CAMERA) { - vec3 = ClientDataHolder.getInstance().vrPlayer.getVRDataWorld().getEye(ClientDataHolder.getInstance().currentPass).getPosition(); + Vec3 vec3 = ClientDataHolderVR.getInstance().vrPlayer.getVRDataWorld().getEye(RenderPass.CENTER).getPosition(); + if (ClientDataHolderVR.getInstance().currentPass == RenderPass.THIRD || ClientDataHolderVR.getInstance().currentPass == RenderPass.CAMERA) { + vec3 = ClientDataHolderVR.getInstance().vrPlayer.getVRDataWorld().getEye(ClientDataHolderVR.getInstance().currentPass).getPosition(); } Vec3 vec31 = entity.position().add(0.0D, (double) (entity.getBbHeight() + offset), 0.0D).subtract(vec3).normalize(); Quaternion q = new Quaternion(0.0F, 0.0F, 0.0F, 1.0F); diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/EntityRendererVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/entity/EntityRendererVRMixin.java similarity index 76% rename from common/src/main/java/org/vivecraft/mixin/client/renderer/entity/EntityRendererVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/renderer/entity/EntityRendererVRMixin.java index 7c42611a1..2868183fe 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/EntityRendererVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/entity/EntityRendererVRMixin.java @@ -1,6 +1,6 @@ -package org.vivecraft.mixin.client.renderer.entity; +package org.vivecraft.mixin.client_vr.renderer.entity; -import org.vivecraft.extensions.EntityRenderDispatcherExtension; +import org.vivecraft.client_vr.extensions.EntityRenderDispatcherVRExtension; import com.mojang.math.Quaternion; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.client.renderer.entity.EntityRenderer; @@ -19,6 +19,6 @@ public class EntityRendererVRMixin { @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/EntityRenderDispatcher;cameraOrientation()Lcom/mojang/math/Quaternion;"), method = "renderNameTag") public Quaternion cameraOffset(EntityRenderDispatcher instance) { - return ((EntityRenderDispatcherExtension)this.entityRenderDispatcher).getCameraOrientationOffset(0.5f); + return ((EntityRenderDispatcherVRExtension)this.entityRenderDispatcher).getCameraOrientationOffset(0.5f); } } diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/entity/FishingHookRendererVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/entity/FishingHookRendererVRMixin.java new file mode 100644 index 000000000..158451b46 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/entity/FishingHookRendererVRMixin.java @@ -0,0 +1,69 @@ +package org.vivecraft.mixin.client_vr.renderer.entity; + +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.world.entity.projectile.FishingHook; +import org.spongepowered.asm.mixin.injection.*; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.entity.FishingHookRenderer; +import net.minecraft.world.item.FishingRodItem; +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Mixin; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.extensions.GameRendererExtension; +import org.vivecraft.client_xr.render_pass.RenderPassType; + +@Mixin(FishingHookRenderer.class) +public abstract class FishingHookRendererVRMixin extends EntityRenderer { + + // dummy constructor + protected FishingHookRendererVRMixin(EntityRendererProvider.Context context) { + super(context); + } + + private Vec3 CachedHandPos; + + @ModifyVariable(at = @At(value = "LOAD"), + method = "render(Lnet/minecraft/world/entity/projectile/FishingHook;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", index = 25) + private double fishingLineStartX(double value, FishingHook fishingHook) { + if (!RenderPassType.isVanilla() && (this.entityRenderDispatcher.options == null || this.entityRenderDispatcher.options.getCameraType().isFirstPerson()) && fishingHook.getPlayerOwner() == Minecraft.getInstance().player) { + int j = 1; + if (fishingHook.getPlayerOwner().getMainHandItem().getItem() instanceof FishingRodItem) { + j = 0; + } + Vec3 vec31 = ((GameRendererExtension) Minecraft.getInstance().gameRenderer).getControllerRenderPos(j); + Vec3 vec32 = ClientDataHolderVR.getInstance().vrPlayer.vrdata_world_render.getHand(j).getDirection(); + CachedHandPos = vec31.add(vec32.scale(0.47 * ClientDataHolderVR.getInstance().vrPlayer.vrdata_world_render.worldScale)); + return CachedHandPos.x; + } else { + return value; + } + } + @ModifyVariable(at = @At(value = "LOAD"), + method = "render(Lnet/minecraft/world/entity/projectile/FishingHook;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", index = 27) + private double fishingLineStartY(double value, FishingHook fishingHook) { + if (!RenderPassType.isVanilla() && (this.entityRenderDispatcher.options == null || this.entityRenderDispatcher.options.getCameraType().isFirstPerson()) && fishingHook.getPlayerOwner() == Minecraft.getInstance().player) { + return CachedHandPos.y; + } else { + return value; + } + } + @ModifyVariable(at = @At(value = "LOAD"), + method = "render(Lnet/minecraft/world/entity/projectile/FishingHook;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", index = 29) + private double fishingLineStartZ(double value, FishingHook fishingHook) { + if (!RenderPassType.isVanilla() && (this.entityRenderDispatcher.options == null || this.entityRenderDispatcher.options.getCameraType().isFirstPerson()) && fishingHook.getPlayerOwner() == Minecraft.getInstance().player) { + return CachedHandPos.z; + } else { + return value; + } + } + @ModifyVariable(at = @At(value = "LOAD"), + method = "render(Lnet/minecraft/world/entity/projectile/FishingHook;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", index = 31) + private float fishingLineStartOffset(float value, FishingHook fishingHook) { + if (!RenderPassType.isVanilla() && (this.entityRenderDispatcher.options == null || this.entityRenderDispatcher.options.getCameraType().isFirstPerson()) && fishingHook.getPlayerOwner() == Minecraft.getInstance().player) { + return 0.0F; + } else { + return value; + } + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/GuardianRendererVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/entity/GuardianRendererVRMixin.java similarity index 67% rename from common/src/main/java/org/vivecraft/mixin/client/renderer/entity/GuardianRendererVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/renderer/entity/GuardianRendererVRMixin.java index bfd191c4e..ab7bbb1bb 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/GuardianRendererVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/entity/GuardianRendererVRMixin.java @@ -1,6 +1,6 @@ -package org.vivecraft.mixin.client.renderer.entity; +package org.vivecraft.mixin.client_vr.renderer.entity; -import org.vivecraft.ClientDataHolder; +import org.vivecraft.client_vr.ClientDataHolderVR; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.entity.GuardianRenderer; import net.minecraft.world.entity.LivingEntity; @@ -9,7 +9,8 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -import org.vivecraft.render.RenderPass; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client_xr.render_pass.RenderPassType; @Mixin(GuardianRenderer.class) public abstract class GuardianRendererVRMixin { @@ -19,8 +20,8 @@ public abstract class GuardianRendererVRMixin { @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/GuardianRenderer;getPosition(Lnet/minecraft/world/entity/LivingEntity;DF)Lnet/minecraft/world/phys/Vec3;"), method = "render(Lnet/minecraft/world/entity/monster/Guardian;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V") public Vec3 changeEye(GuardianRenderer instance, LivingEntity livingEntity, double d, float f) { - if (livingEntity == Minecraft.getInstance().getCameraEntity()) { - return ClientDataHolder.getInstance().vrPlayer.getVRDataWorld().getEye(RenderPass.CENTER).getPosition().subtract(0.0D, 0.3D * (double) ClientDataHolder.getInstance().vrPlayer.worldScale, 0.0D); + if (!RenderPassType.isVanilla() && livingEntity == Minecraft.getInstance().getCameraEntity()) { + return ClientDataHolderVR.getInstance().vrPlayer.getVRDataWorld().getEye(RenderPass.CENTER).getPosition().subtract(0.0D, 0.3D * (double) ClientDataHolderVR.getInstance().vrPlayer.worldScale, 0.0D); } return this.getPosition(livingEntity, d, f); } diff --git a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/MobRendererVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/entity/MobRendererVRMixin.java similarity index 64% rename from common/src/main/java/org/vivecraft/mixin/client/renderer/entity/MobRendererVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/renderer/entity/MobRendererVRMixin.java index 4df116ee1..b215da96d 100644 --- a/common/src/main/java/org/vivecraft/mixin/client/renderer/entity/MobRendererVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/entity/MobRendererVRMixin.java @@ -1,6 +1,6 @@ -package org.vivecraft.mixin.client.renderer.entity; +package org.vivecraft.mixin.client_vr.renderer.entity; -import org.vivecraft.ClientDataHolder; +import org.vivecraft.client_vr.ClientDataHolderVR; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.entity.MobRenderer; import net.minecraft.world.entity.Entity; @@ -8,14 +8,15 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +import org.vivecraft.client_xr.render_pass.RenderPassType; @Mixin(MobRenderer.class) public class MobRendererVRMixin { @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getRopeHoldPosition(F)Lnet/minecraft/world/phys/Vec3;"), method = "renderLeash") public Vec3 leash(Entity instance, float f) { - if (instance == Minecraft.getInstance().player) { - return ClientDataHolder.getInstance().vrPlayer.vrdata_world_render.getController(0).getPosition(); + if (!RenderPassType.isVanilla() && instance == Minecraft.getInstance().player) { + return ClientDataHolderVR.getInstance().vrPlayer.vrdata_world_render.getController(0).getPosition(); } return instance.getRopeHoldPosition(f); } diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/tutorial/MovementTutorialStepInstanceVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/tutorial/MovementTutorialStepInstanceVRMixin.java new file mode 100644 index 000000000..d145751ae --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/tutorial/MovementTutorialStepInstanceVRMixin.java @@ -0,0 +1,136 @@ +package org.vivecraft.mixin.client_vr.tutorial; + +import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.Input; +import net.minecraft.client.tutorial.MovementTutorialStepInstance; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.client.VivecraftVRMod; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.provider.MCVR; + +import java.util.HashSet; +import java.util.Set; + +@Mixin(MovementTutorialStepInstance.class) +public class MovementTutorialStepInstanceVRMixin { + + @Shadow private int moveCompleted; + + @Shadow private boolean moved; + + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/toasts/TutorialToast;(Lnet/minecraft/client/gui/components/toasts/TutorialToast$Icons;Lnet/minecraft/network/chat/Component;Lnet/minecraft/network/chat/Component;Z)V", ordinal = 0), index = 1, method = "tick") + private Component alterMovementTitle(Component title) { + if (!VRState.vrRunning) { + return title; + } + + if (!ClientDataHolderVR.getInstance().vrSettings.seated) { + // find the currently used movement binding + if (MCVR.get().getInputAction(VivecraftVRMod.INSTANCE.keyFreeMoveStrafe).isActive()) { + // moveStrafe active + return new TranslatableComponent("vivecraft.toasts.move1", new TextComponent(MCVR.get().getOriginName(MCVR.get().getInputAction(VivecraftVRMod.INSTANCE.keyFreeMoveStrafe).getLastOrigin())).withStyle(ChatFormatting.BOLD)); + } else if (MCVR.get().getInputAction(VivecraftVRMod.INSTANCE.keyFreeMoveRotate).isActive()) { + // moveRotate active + return new TranslatableComponent("vivecraft.toasts.move1", new TextComponent(MCVR.get().getOriginName(MCVR.get().getInputAction(VivecraftVRMod.INSTANCE.keyFreeMoveRotate).getLastOrigin())).withStyle(ChatFormatting.BOLD)); + } else if (MCVR.get().getInputAction(Minecraft.getInstance().options.keyUp).isActive() || + MCVR.get().getInputAction(Minecraft.getInstance().options.keyDown).isActive() || + MCVR.get().getInputAction(Minecraft.getInstance().options.keyLeft).isActive() || + MCVR.get().getInputAction(Minecraft.getInstance().options.keyRight).isActive() + ) { + // individual movement bindings + Set buttons = new HashSet<>(); + if (MCVR.get().getInputAction(Minecraft.getInstance().options.keyUp).isActive()) { + buttons.add(MCVR.get().getOriginName(MCVR.get().getInputAction(Minecraft.getInstance().options.keyUp).getLastOrigin())); + } + if (MCVR.get().getInputAction(Minecraft.getInstance().options.keyDown).isActive()) { + buttons.add(MCVR.get().getOriginName(MCVR.get().getInputAction(Minecraft.getInstance().options.keyDown).getLastOrigin())); + } + if (MCVR.get().getInputAction(Minecraft.getInstance().options.keyLeft).isActive()) { + buttons.add(MCVR.get().getOriginName(MCVR.get().getInputAction(Minecraft.getInstance().options.keyLeft).getLastOrigin())); + } + if (MCVR.get().getInputAction(Minecraft.getInstance().options.keyRight).isActive()) { + buttons.add(MCVR.get().getOriginName(MCVR.get().getInputAction(Minecraft.getInstance().options.keyRight).getLastOrigin())); + } + + String[] stringArray = buttons.toArray(new String[0]); + return switch (buttons.size()) { + case 1 -> new TranslatableComponent( + "vivecraft.toasts.move1", + new TextComponent(stringArray[0]).withStyle(ChatFormatting.BOLD) + ); + case 2 -> new TranslatableComponent( + "vivecraft.toasts.move2", + new TextComponent(stringArray[0]).withStyle(ChatFormatting.BOLD), + new TextComponent(stringArray[1]).withStyle(ChatFormatting.BOLD) + ); + case 3 -> new TranslatableComponent( + "vivecraft.toasts.move3", + new TextComponent(stringArray[0]).withStyle(ChatFormatting.BOLD), + new TextComponent(stringArray[1]).withStyle(ChatFormatting.BOLD), + new TextComponent(stringArray[2]).withStyle(ChatFormatting.BOLD) + ); + case 4 -> new TranslatableComponent( + "vivecraft.toasts.move4", + new TextComponent(stringArray[0]).withStyle(ChatFormatting.BOLD), + new TextComponent(stringArray[1]).withStyle(ChatFormatting.BOLD), + new TextComponent(stringArray[2]).withStyle(ChatFormatting.BOLD), + new TextComponent(stringArray[3]).withStyle(ChatFormatting.BOLD) + ); + default -> new TextComponent(""); + }; + } else if (MCVR.get().getInputAction(VivecraftVRMod.INSTANCE.keyTeleportFallback).isActive()) { + // teleport fallback + return new TranslatableComponent("vivecraft.toasts.move1", new TextComponent(MCVR.get().getOriginName(MCVR.get().getInputAction(VivecraftVRMod.INSTANCE.keyTeleportFallback).getLastOrigin())).withStyle(ChatFormatting.BOLD)); + } else if (MCVR.get().getInputAction(VivecraftVRMod.INSTANCE.keyTeleport).isActive()) { + // teleport + return new TranslatableComponent("vivecraft.toasts.teleport", new TextComponent(MCVR.get().getOriginName(MCVR.get().getInputAction(VivecraftVRMod.INSTANCE.keyTeleport).getLastOrigin())).withStyle(ChatFormatting.BOLD)); + } + } + return title; + } + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/toasts/TutorialToast;(Lnet/minecraft/client/gui/components/toasts/TutorialToast$Icons;Lnet/minecraft/network/chat/Component;Lnet/minecraft/network/chat/Component;Z)V", ordinal = 0), index = 2, method = "tick") + private Component alterMovementDescription(Component description) { + if (!VRState.vrRunning) { + return description; + } + + if (!ClientDataHolderVR.getInstance().vrSettings.seated && MCVR.get().getInputAction(Minecraft.getInstance().options.keyJump).isActive()) { + return new TranslatableComponent("tutorial.move.description", new TextComponent(MCVR.get().getOriginName(MCVR.get().getInputAction(Minecraft.getInstance().options.keyJump).getLastOrigin())).withStyle(ChatFormatting.BOLD)); + } + return description; + } + + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/toasts/TutorialToast;(Lnet/minecraft/client/gui/components/toasts/TutorialToast$Icons;Lnet/minecraft/network/chat/Component;Lnet/minecraft/network/chat/Component;Z)V", ordinal = 1), index = 2, method = "tick") + private Component alterLookDescription(Component title) { + if (!VRState.vrRunning) { + return title; + } + + if (!ClientDataHolderVR.getInstance().vrSettings.seated) { + return new TranslatableComponent("vivecraft.toasts.point_controller", new TranslatableComponent(ClientDataHolderVR.getInstance().vrSettings.reverseHands ? "vivecraft.toasts.point_controller.left" : "vivecraft.toasts.point_controller.right").withStyle(ChatFormatting.BOLD)); + } + return title; + } + + @Inject(at = @At("TAIL"), method = "onInput") + private void addTeleport(Input input, CallbackInfo ci) { + moved |= VivecraftVRMod.INSTANCE.keyTeleport.isDown(); + } + + @Inject(at = @At("HEAD"), method = "onMouse", cancellable = true) + private void onlyAfterMove(double d, double e, CallbackInfo ci) { + if (moveCompleted == -1) { + ci.cancel(); + } + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/tutorial/OpenInventoryTutorialStepVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/tutorial/OpenInventoryTutorialStepVRMixin.java new file mode 100644 index 000000000..2171d6ebc --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/tutorial/OpenInventoryTutorialStepVRMixin.java @@ -0,0 +1,28 @@ +package org.vivecraft.mixin.client_vr.tutorial; + +import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.tutorial.OpenInventoryTutorialStep; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.provider.MCVR; + +@Mixin(OpenInventoryTutorialStep.class) +public class OpenInventoryTutorialStepVRMixin { + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/toasts/TutorialToast;(Lnet/minecraft/client/gui/components/toasts/TutorialToast$Icons;Lnet/minecraft/network/chat/Component;Lnet/minecraft/network/chat/Component;Z)V"), index = 2, method = "tick") + private Component alterDescription(Component component) { + if (!VRState.vrRunning) { + return component; + } + if (!ClientDataHolderVR.getInstance().vrSettings.seated && MCVR.get().getInputAction(Minecraft.getInstance().options.keyInventory).isActive()) { + return new TranslatableComponent("tutorial.open_inventory.description", new TextComponent(MCVR.get().getOriginName(MCVR.get().getInputAction(Minecraft.getInstance().options.keyInventory).getLastOrigin())).withStyle(ChatFormatting.BOLD)); + } + return component; + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/tutorial/PunchTreeTutorialStepInstanceVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/tutorial/PunchTreeTutorialStepInstanceVRMixin.java new file mode 100644 index 000000000..2c25b21b1 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/tutorial/PunchTreeTutorialStepInstanceVRMixin.java @@ -0,0 +1,24 @@ +package org.vivecraft.mixin.client_vr.tutorial; + +import net.minecraft.client.tutorial.PunchTreeTutorialStepInstance; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TranslatableComponent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRState; + +@Mixin(PunchTreeTutorialStepInstance.class) +public class PunchTreeTutorialStepInstanceVRMixin { + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/toasts/TutorialToast;(Lnet/minecraft/client/gui/components/toasts/TutorialToast$Icons;Lnet/minecraft/network/chat/Component;Lnet/minecraft/network/chat/Component;Z)V"), index = 2, method = "tick") + private Component alterDescription(Component component) { + if (!VRState.vrRunning) { + return component; + } + if (!ClientDataHolderVR.getInstance().vrSettings.seated) { + return new TranslatableComponent("tutorial.find_tree.description"); + } + return component; + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/world/entity/vehicle/BoatMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/world/BoatMixin.java similarity index 83% rename from common/src/main/java/org/vivecraft/mixin/world/entity/vehicle/BoatMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/world/BoatMixin.java index c95df5d46..420f4413f 100644 --- a/common/src/main/java/org/vivecraft/mixin/world/entity/vehicle/BoatMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/world/BoatMixin.java @@ -1,4 +1,4 @@ -package org.vivecraft.mixin.world.entity.vehicle; +package org.vivecraft.mixin.client_vr.world; import net.minecraft.client.Minecraft; import net.minecraft.world.entity.Entity; @@ -13,7 +13,8 @@ import org.spongepowered.asm.mixin.injection.ModifyConstant; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; -import org.vivecraft.ClientDataHolder; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRState; //TODO needed? @Mixin(Boat.class) @@ -53,14 +54,17 @@ public float inputRight(float f) { @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/vehicle/Boat;setDeltaMovement(Lnet/minecraft/world/phys/Vec3;)V", shift = At.Shift.BEFORE), method = "controlBoat", locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true) public void roomscaleRowing(CallbackInfo ci, float f) { + if (!VRState.vrRunning) { + return; + } double mx, mz; - ClientDataHolder clientDataHolder = ClientDataHolder.getInstance(); + ClientDataHolderVR clientDataHolderVR = ClientDataHolderVR.getInstance(); - if(this.inputUp && !clientDataHolder.vrSettings.seated){ + if(this.inputUp && !clientDataHolderVR.vrSettings.seated){ //controller-based - float yaw = clientDataHolder.vrPlayer.vrdata_world_pre.getController(1).getYaw(); - if(clientDataHolder.vrSettings.vehicleRotation){ + float yaw = clientDataHolderVR.vrPlayer.vrdata_world_pre.getController(1).getYaw(); + if(clientDataHolderVR.vrSettings.vehicleRotation){ //tank controls float end = this.getYRot() % 360; float start = yaw; @@ -102,10 +106,10 @@ else if(difference < 0){ } else { //roomscale or vanilla behavior - if(clientDataHolder.rowTracker.isRowing() && !clientDataHolder.vrSettings.seated){ + if(clientDataHolderVR.rowTracker.isRowing() && !clientDataHolderVR.vrSettings.seated){ - this.deltaRotation += clientDataHolder.rowTracker.LOar / 1.5; - this.deltaRotation -= clientDataHolder.rowTracker.ROar / 1.5; + this.deltaRotation += clientDataHolderVR.rowTracker.LOar / 1.5; + this.deltaRotation -= clientDataHolderVR.rowTracker.ROar / 1.5; /* this.deltaRotation += mc.rowTracker.forces[0] *50; this.deltaRotation -= mc.rowTracker.forces[1] *50; @@ -114,7 +118,7 @@ else if(difference < 0){ if (deltaRotation < 0) this.inputLeft = true; if (deltaRotation > 0) this.inputRight = true; - f = 0.06f * clientDataHolder.rowTracker.Foar; + f = 0.06f * clientDataHolderVR.rowTracker.Foar; if(f > 0) this.inputUp = true; /* diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/world/FishingHookVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/world/FishingHookVRMixin.java new file mode 100644 index 000000000..49e15b022 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/world/FishingHookVRMixin.java @@ -0,0 +1,60 @@ +package org.vivecraft.mixin.client_vr.world; + +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.FishingHook; +import net.minecraft.world.item.FishingRodItem; +import net.minecraft.world.level.Level; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.provider.ControllerType; +import org.vivecraft.client_vr.provider.MCVR; + +@Mixin(FishingHook.class) +public abstract class FishingHookVRMixin extends Entity { + + @Shadow private boolean biting; + + @Shadow + public abstract Player getPlayerOwner(); + + public FishingHookVRMixin(EntityType entityType, Level level) { + super(entityType, level); + } + + @Unique + private boolean wasBiting = false; + @Unique + private boolean wasNibble = false; + + @Inject(at = @At(value = "HEAD"), method = "tick") + private void fishhookFeedback(CallbackInfo ci){ + if (!VRState.vrRunning) { + return; + } + Player player = this.getPlayerOwner(); + if (player != null && player.isLocalPlayer()) + { + if (biting && !wasBiting) { + // bite, big feedback + MCVR.get().triggerHapticPulse( + player.getMainHandItem().getItem() instanceof FishingRodItem ? ControllerType.RIGHT : ControllerType.LEFT, + 0.005F, 160.0F, 0.5F); + } else if (getDeltaMovement().y < -0.01 && !wasNibble) { + // nibble, small feedback + MCVR.get().triggerHapticPulse( + player.getMainHandItem().getItem() instanceof FishingRodItem ? ControllerType.RIGHT : ControllerType.LEFT, + 0.0005F, 160.0F, 0.05F); + wasNibble = true; + } + } + wasBiting = biting; + wasNibble = wasNibble && getDeltaMovement().y < 0.0; + } +} \ No newline at end of file diff --git a/common/src/main/java/org/vivecraft/mixin/world/item/ItemVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/world/ItemVRMixin.java similarity index 96% rename from common/src/main/java/org/vivecraft/mixin/world/item/ItemVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/world/ItemVRMixin.java index f897378b7..1aaa4c832 100644 --- a/common/src/main/java/org/vivecraft/mixin/world/item/ItemVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/world/ItemVRMixin.java @@ -1,4 +1,4 @@ -package org.vivecraft.mixin.world.item; +package org.vivecraft.mixin.client_vr.world; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder; diff --git a/common/src/main/java/org/vivecraft/mixin/world/item/PotionItemVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/world/PotionItemVRMixin.java similarity index 63% rename from common/src/main/java/org/vivecraft/mixin/world/item/PotionItemVRMixin.java rename to common/src/main/java/org/vivecraft/mixin/client_vr/world/PotionItemVRMixin.java index fc291a9b9..a12b425ee 100644 --- a/common/src/main/java/org/vivecraft/mixin/world/item/PotionItemVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/world/PotionItemVRMixin.java @@ -1,6 +1,5 @@ -package org.vivecraft.mixin.world.item; +package org.vivecraft.mixin.client_vr.world; -import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ItemStack; @@ -10,15 +9,16 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.vivecraft.ClientDataHolder; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRState; @Mixin(PotionItem.class) public class PotionItemVRMixin { @Inject(method = "finishUsingItem", at = @At("HEAD")) private void drinkEasterEgg(ItemStack itemStack, Level level, LivingEntity livingEntity, CallbackInfoReturnable cir){ - if (livingEntity instanceof LocalPlayer && itemStack.getHoverName().getString().equals("DRINK ME")) { - ClientDataHolder.getInstance().vrPlayer.wfMode = -0.05; - ClientDataHolder.getInstance().vrPlayer.wfCount = 400; + if (!VRState.vrInitialized && livingEntity instanceof LocalPlayer && itemStack.getHoverName().getString().equals("DRINK ME")) { + ClientDataHolderVR.getInstance().vrPlayer.wfMode = -0.05; + ClientDataHolderVR.getInstance().vrPlayer.wfCount = 400; } } } diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/world/entity/player/PlayerVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/world/entity/player/PlayerVRMixin.java new file mode 100644 index 000000000..596a42fa7 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/world/entity/player/PlayerVRMixin.java @@ -0,0 +1,17 @@ +package org.vivecraft.mixin.client_vr.world.entity.player; + +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.AABB; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(Player.class) +public class PlayerVRMixin { + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/AABB;move(DDD)Lnet/minecraft/world/phys/AABB;"), method = "maybeBackOffFromEdge") + private AABB moveSidewaysExtendDown(AABB instance, double x, double y, double z) { + // this is to fix an issue with a maxStepUp size of 1 and trapdoors + return new AABB(instance.minX + x, instance.minY + y, instance.minZ + z, instance.maxX + x, instance.maxY, instance.maxZ + z); + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/world/entity/projectile/FireworkRocketEntityVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/world/entity/projectile/FireworkRocketEntityVRMixin.java new file mode 100644 index 000000000..a488b0b3f --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/world/entity/projectile/FireworkRocketEntityVRMixin.java @@ -0,0 +1,66 @@ +package org.vivecraft.mixin.client_vr.world.entity.projectile; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.FireworkRocketEntity; +import net.minecraft.world.item.Items; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRState; + +@Mixin(FireworkRocketEntity.class) +public class FireworkRocketEntityVRMixin { + + @Shadow private @Nullable LivingEntity attachedToEntity; + + @Unique + private Vec3 handPos = null; + + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;addParticle(Lnet/minecraft/core/particles/ParticleOptions;DDDDDD)V"), index = 1, method = "tick") + private double modifyX(double x) { + if (attachedToEntity instanceof LocalPlayer localPlayer && attachedToEntity == Minecraft.getInstance().player && VRState.vrRunning) { + var controller = ClientDataHolderVR.getInstance().vrPlayer.getVRDataWorld().getHand(!localPlayer.getOffhandItem().is(Items.FIREWORK_ROCKET) && localPlayer.getMainHandItem().is(Items.FIREWORK_ROCKET) ? 0 : 1); + handPos = controller.getPosition().add(controller.getDirection().scale(0.25)); + return handPos.x; + } + return x; + } + + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;addParticle(Lnet/minecraft/core/particles/ParticleOptions;DDDDDD)V"), index = 2, method = "tick") + private double modifyY(double y) { + if (handPos != null) { + return handPos.y; + } + return y; + } + + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;addParticle(Lnet/minecraft/core/particles/ParticleOptions;DDDDDD)V"), index = 3, method = "tick") + private double modifyZ(double z) { + if (handPos != null) { + z = handPos.z; + handPos = null; + } + return z; + } + + /* + // server offset, this is wrong somehow + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getHandHoldingItemAngle(Lnet/minecraft/world/item/Item;)Lnet/minecraft/world/phys/Vec3;"), method = "tick") + private Vec3 redirectHandOffset(LivingEntity instance, Item item){ + if (instance instanceof ServerPlayer serverPlayer) { + ServerVivePlayer vivePLayer = ServerVRPlayers.getVivePlayer(serverPlayer); + if(vivePLayer != null && vivePLayer.isVR()) { + return vivePLayer.getControllerPos(serverPlayer.getOffhandItem().is(item) && !serverPlayer.getMainHandItem().is(item) ? 1 : 0, serverPlayer, true).subtract(instance.position()); + } + } + return instance.getHandHoldingItemAngle(item); + } + */ +} diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/world/level/biome/BiomeAccessor.java b/common/src/main/java/org/vivecraft/mixin/client_vr/world/level/biome/BiomeAccessor.java new file mode 100644 index 000000000..1b38d365d --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/world/level/biome/BiomeAccessor.java @@ -0,0 +1,11 @@ +package org.vivecraft.mixin.client_vr.world.level.biome; + +import net.minecraft.world.level.biome.Biome; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(Biome.class) +public interface BiomeAccessor{ + @Accessor("climateSettings") + Biome.ClimateSettings getClimateSettings(); +} diff --git a/common/src/main/java/org/vivecraft/mixin/math/Matrix4f.java.patch b/common/src/main/java/org/vivecraft/mixin/math/Matrix4f.java.patch deleted file mode 100644 index 026ebca6a..000000000 --- a/common/src/main/java/org/vivecraft/mixin/math/Matrix4f.java.patch +++ /dev/null @@ -1,57 +0,0 @@ ---- a/com/mojang/math/Matrix4f.java -+++ b/com/mojang/math/Matrix4f.java -@@ -2,26 +2,27 @@ - - import java.nio.FloatBuffer; - import java.util.Random; -+import net.minecraft.world.phys.Vec3; - - public final class Matrix4f - { - private static final int ORDER = 4; -- protected float m00; -- protected float m01; -- protected float m02; -- protected float m03; -- protected float m10; -- protected float m11; -- protected float m12; -- protected float m13; -- protected float m20; -- protected float m21; -- protected float m22; -- protected float m23; -- protected float m30; -- protected float m31; -- protected float m32; -- protected float m33; -+ public float m00; -+ public float m01; -+ public float m02; -+ public float m03; -+ public float m10; -+ public float m11; -+ public float m12; -+ public float m13; -+ public float m20; -+ public float m21; -+ public float m22; -+ public float m23; -+ public float m30; -+ public float m31; -+ public float m32; -+ public float m33; - - public Matrix4f() - { -@@ -808,4 +809,10 @@ - this.m13 = y; - this.m23 = z; - } -+ //Vivecraft -+ public Vec3 translationComponent() -+ { -+ return new Vec3((double)this.m30, (double)this.m31, (double)this.m32); -+ } -+ // - } diff --git a/common/src/main/java/org/vivecraft/mixin/server/ChunkMapAccessor.java b/common/src/main/java/org/vivecraft/mixin/server/ChunkMapAccessor.java new file mode 100644 index 000000000..4c9f48341 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/server/ChunkMapAccessor.java @@ -0,0 +1,12 @@ +package org.vivecraft.mixin.server; + +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import net.minecraft.server.level.ChunkMap; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(ChunkMap.class) +public interface ChunkMapAccessor { + @Accessor("entityMap") + Int2ObjectMap getTrackedEntities(); +} diff --git a/common/src/main/java/org/vivecraft/mixin/server/MinecraftServerMixin.java b/common/src/main/java/org/vivecraft/mixin/server/MinecraftServerMixin.java new file mode 100644 index 000000000..0c1fc3011 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/server/MinecraftServerMixin.java @@ -0,0 +1,23 @@ +package org.vivecraft.mixin.server; + +import net.minecraft.server.MinecraftServer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.vivecraft.server.MinecraftServerExt; +import org.vivecraft.server.ServerVivePlayer; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +@Mixin(MinecraftServer.class) +public class MinecraftServerMixin implements MinecraftServerExt { + + @Unique + Map playersWithVivecraft = new HashMap<>(); + + @Override + public Map getPlayersWithVivecraft() { + return this.playersWithVivecraft; + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/server/ServerGamePacketListenerImplMixin.java b/common/src/main/java/org/vivecraft/mixin/server/ServerGamePacketListenerImplMixin.java new file mode 100644 index 000000000..09e227b66 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/server/ServerGamePacketListenerImplMixin.java @@ -0,0 +1,83 @@ +package org.vivecraft.mixin.server; + +import net.minecraft.Util; +import net.minecraft.network.chat.ChatType; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.protocol.PacketUtils; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.server.AimFixHandler; +import org.vivecraft.common.network.CommonNetworkHelper; + +import net.minecraft.network.Connection; +import net.minecraft.network.protocol.game.ServerGamePacketListener; +import net.minecraft.network.protocol.game.ServerboundCustomPayloadPacket; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerGamePacketListenerImpl; +import net.minecraft.server.network.ServerPlayerConnection; +import org.vivecraft.server.config.ServerConfig; +import org.vivecraft.server.ServerNetworking; + +import static org.vivecraft.common.network.CommonNetworkHelper.PacketDiscriminators.CLIMBING; + +@Mixin(ServerGamePacketListenerImpl.class) +public abstract class ServerGamePacketListenerImplMixin implements ServerPlayerConnection, ServerGamePacketListener { + + @Shadow + @Final + private Connection connection; + + @Shadow + @Final + private MinecraftServer server; + + @Shadow + public ServerPlayer player; + + @Shadow + private int aboveGroundTickCount; + + @Inject(at = @At("TAIL"), method = "(Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/network/Connection;Lnet/minecraft/server/level/ServerPlayer;)V") + public void init(MinecraftServer p_9770_, Connection p_9771_, ServerPlayer p_9772_, CallbackInfo info) { + // Vivecraft + if (this.connection.channel != null && this.connection.channel.pipeline().get("packet_handler") != null) { //fake player fix + this.connection.channel.pipeline().addBefore("packet_handler", "vr_aim_fix", + new AimFixHandler(this.connection)); + } + } + + @Inject(at = @At("TAIL"), method = "tick()V") + public void afterTick(CallbackInfo info) { + ServerNetworking.sendVrPlayerStateToClients(this.player); + } + + @Inject(at = @At("TAIL"), method = "handleCustomPayload(Lnet/minecraft/network/protocol/game/ServerboundCustomPayloadPacket;)V") + public void handleVivecraftPackets(ServerboundCustomPayloadPacket pPacket, CallbackInfo info) { + var buffer = pPacket.getData(); + var channelID = pPacket.getIdentifier(); + + if (channelID.equals(CommonNetworkHelper.CHANNEL)) { + PacketUtils.ensureRunningOnSameThread(pPacket, this, this.player.getLevel()); + CommonNetworkHelper.PacketDiscriminators packetDiscriminator = CommonNetworkHelper.PacketDiscriminators.values()[buffer.readByte()]; + ServerNetworking.handlePacket(packetDiscriminator, buffer, (ServerGamePacketListenerImpl) (Object)this); + if (packetDiscriminator == CLIMBING) { + this.aboveGroundTickCount = 0; + } + } + } + @Inject(at = @At("TAIL"), method = "onDisconnect") + public void doLeaveMessage(Component component, CallbackInfo ci) { + if (ServerConfig.messagesEnabled.get()) { + String message = ServerConfig.messagesLeaveMessage.get(); + if (!message.isEmpty()) { + this.server.getPlayerList().broadcastMessage(new TextComponent(message.formatted(this.player.getName().getString())), ChatType.SYSTEM, Util.NIL_UUID); + } + } + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/server/ServerLoginPacketListenerImplMixin.java b/common/src/main/java/org/vivecraft/mixin/server/ServerLoginPacketListenerImplMixin.java new file mode 100644 index 000000000..419979e1c --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/server/ServerLoginPacketListenerImplMixin.java @@ -0,0 +1,20 @@ +package org.vivecraft.mixin.server; + +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerLoginPacketListenerImpl; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.server.ServerUtil; + +@Mixin(ServerLoginPacketListenerImpl.class) +public class ServerLoginPacketListenerImplMixin { + + @Inject(at = @At("HEAD"), method = "placeNewPlayer") + private void scheduleLoginMessages(ServerPlayer serverPlayer, CallbackInfo ci) { + ServerUtil.scheduleWelcomeMessageOrKick(serverPlayer); + ServerUtil.sendUpdateNotificationIfOP(serverPlayer); + } + +} diff --git a/common/src/main/java/org/vivecraft/mixin/server/level/ServerPlayerMixin.java b/common/src/main/java/org/vivecraft/mixin/server/ServerPlayerMixin.java similarity index 56% rename from common/src/main/java/org/vivecraft/mixin/server/level/ServerPlayerMixin.java rename to common/src/main/java/org/vivecraft/mixin/server/ServerPlayerMixin.java index 801bfae96..9260848bc 100644 --- a/common/src/main/java/org/vivecraft/mixin/server/level/ServerPlayerMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/server/ServerPlayerMixin.java @@ -1,6 +1,9 @@ -package org.vivecraft.mixin.server.level; +package org.vivecraft.mixin.server; import net.minecraft.server.MinecraftServer; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.projectile.AbstractArrow; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -11,24 +14,25 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.api.CommonNetworkHelper; -import org.vivecraft.api.ServerVivePlayer; +import org.vivecraft.server.config.ServerConfig; +import org.vivecraft.server.ServerVRPlayers; +import org.vivecraft.server.ServerVivePlayer; import com.mojang.authlib.GameProfile; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ItemParticleOption; import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.network.chat.ChatType; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TextComponent; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.Util; import net.minecraft.util.Mth; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.UseAnim; @@ -40,13 +44,8 @@ @Mixin(ServerPlayer.class) public abstract class ServerPlayerMixin extends Player { - @Shadow @Final public MinecraftServer server; - - public ServerPlayerMixin(Level p_36114_, BlockPos p_36115_, float p_36116_, GameProfile p_36117_) { - super(p_36114_, p_36115_, p_36116_, p_36117_); - // TODO Auto-generated constructor stub - } - + @Shadow @Final + public MinecraftServer server; @Unique private String language = "en_us"; @Unique @@ -54,11 +53,14 @@ public ServerPlayerMixin(Level p_36114_, BlockPos p_36115_, float p_36116_, Game @Unique private Component tabListDisplayName = null; + public ServerPlayerMixin(Level level, BlockPos blockPos, float f, GameProfile gameProfile) { + super(level, blockPos, f, gameProfile); + } + @Inject(at = @At("TAIL"), method = "initInventoryMenu") - public void menu(CallbackInfo info) { - ServerVivePlayer serverviveplayer = CommonNetworkHelper.vivePlayers.get(this.getUUID()); - // TODO change setting to commonDataHolder? - if ((!this.server.isDedicatedServer() && ClientDataHolder.getInstance().vrSettings != null && !ClientDataHolder.getInstance().vrSettings.disableFun) && serverviveplayer != null && serverviveplayer.isVR() && this.random.nextInt(40) == 3) { + public void menu(CallbackInfo ci) { + ServerVivePlayer serverviveplayer = getVivePlayer(); + if (ServerConfig.vrFun.get() && serverviveplayer != null && serverviveplayer.isVR() && this.random.nextInt(40) == 3) { ItemStack itemstack; if (this.random.nextInt(2) == 1) { itemstack = (new ItemStack(Items.PUMPKIN_PIE)).setHoverName(new TextComponent("EAT ME")); @@ -77,11 +79,12 @@ public void menu(CallbackInfo info) { @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;tick()V", shift = Shift.AFTER), method = "doTick()V") public void tick(CallbackInfo info) { - CommonNetworkHelper.overridePose((ServerPlayer) (Object)this); + ServerVRPlayers.overridePose((ServerPlayer) (Object)this); } + @Unique public void sweepAttack() { - ServerVivePlayer serverviveplayer = CommonNetworkHelper.vivePlayers.get(this.getUUID()); + ServerVivePlayer serverviveplayer = getVivePlayer(); if (serverviveplayer != null && serverviveplayer.isVR()) { Vec3 vec3 = serverviveplayer.getControllerDir(0); @@ -99,6 +102,7 @@ public void sweepAttack() { } } + @Unique protected void triggerItemUseEffects(ItemStack pStack, int pCount) { if (!pStack.isEmpty() && this.isUsingItem()) { if (pStack.getUseAnimation() == UseAnim.DRINK) { @@ -113,8 +117,9 @@ protected void triggerItemUseEffects(ItemStack pStack, int pCount) { } } + @Unique private void addItemParticles(ItemStack stack, int count) { - ServerVivePlayer serverviveplayer = CommonNetworkHelper.vivePlayers.get(this.getUUID()); + ServerVivePlayer serverviveplayer = getVivePlayer(); for (int i = 0; i < count; ++i) { Vec3 vec3 = new Vec3(((double) this.random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D); vec3 = vec3.xRot(-this.getXRot() * ((float) Math.PI / 180F)); @@ -140,10 +145,10 @@ private void addItemParticles(ItemStack stack, int count) { @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;addFreshEntity(Lnet/minecraft/world/entity/Entity;)Z", shift = Shift.BEFORE), method = "drop(Lnet/minecraft/world/item/ItemStack;ZZ)Lnet/minecraft/world/entity/item/ItemEntity;", locals = LocalCapture.CAPTURE_FAILHARD) - public void dropvive(ItemStack p_9085_, boolean p_9086_, boolean p_9087_, CallbackInfoReturnable info, + public void dropvive(ItemStack p_9085_, boolean dropAround, boolean includeName, CallbackInfoReturnable info, ItemEntity itementity) { - ServerVivePlayer serverviveplayer = CommonNetworkHelper.vivePlayers.get(this.getUUID()); - if (serverviveplayer != null && serverviveplayer.isVR() && !p_9087_) { + ServerVivePlayer serverviveplayer = getVivePlayer(); + if (serverviveplayer != null && serverviveplayer.isVR() && !dropAround) { Vec3 vec3 = serverviveplayer.getControllerPos(0, this); Vec3 vec31 = serverviveplayer.getControllerDir(0); float f = 0.3F; @@ -153,8 +158,72 @@ public void dropvive(ItemStack p_9085_, boolean p_9086_, boolean p_9087_, Callba } } - public String getLanguage() { - return this.language; + @Inject(at = @At("HEAD"), method = "hurt", cancellable = true) + public void checkCanGetHurt(DamageSource damageSource, float f, CallbackInfoReturnable cir){ + Entity entity = damageSource.getEntity(); + ServerPlayer other = null; + + // check if the damage came from another player + if (entity instanceof ServerPlayer) { + other = (ServerPlayer)entity; + } else if ((entity instanceof AbstractArrow && (((AbstractArrow)entity).getOwner() instanceof ServerPlayer))) { + other = (ServerPlayer)((AbstractArrow)entity).getOwner(); + } + + if (other != null) { + // both entities are players, so need to check + + ServerVivePlayer otherVive = ServerVRPlayers.getVivePlayer(other); + ServerVivePlayer thisVive = getVivePlayer(); + + // create new object, if they are null, simplifies the checks + if (otherVive == null) { + otherVive = new ServerVivePlayer(other); + } + + if (thisVive == null) { + thisVive = new ServerVivePlayer((ServerPlayer)(Object)this); + } + + if ((!otherVive.isVR() && thisVive.isVR() && thisVive.isSeated()) + || (!thisVive.isVR() && otherVive.isVR() && otherVive.isSeated())) { + // nonvr vs Seated + if (!ServerConfig.pvpSEATEDVRvsNONVR.get()) { + server.getPlayerList().broadcastMessage(new TextComponent("canceled non vs seat"), ChatType.SYSTEM, Util.NIL_UUID); + cir.setReturnValue(false); + } + } else if ((!otherVive.isVR() && thisVive.isVR() && !thisVive.isSeated()) + || (!thisVive.isVR() && otherVive.isVR() && !otherVive.isSeated())) { + // nonvr vs Standing + if (!ServerConfig.pvpVRvsNONVR.get()) { + server.getPlayerList().broadcastMessage(new TextComponent("canceled non vs stand"), ChatType.SYSTEM, Util.NIL_UUID); + cir.setReturnValue(false); + } + } else if ((otherVive.isVR() && otherVive.isSeated() && thisVive.isVR() && !thisVive.isSeated()) + || (thisVive.isVR() && thisVive.isSeated() && otherVive.isVR() && !otherVive.isSeated())) { + // Standing vs Seated + if (!ServerConfig.pvpVRvsSEATEDVR.get()) { + server.getPlayerList().broadcastMessage(new TextComponent("canceled seat vs stand"), ChatType.SYSTEM, Util.NIL_UUID); + cir.setReturnValue(false); + } + } else if (otherVive.isVR() && !otherVive.isSeated() && thisVive.isVR() && !thisVive.isSeated()) { + // Standing vs Standing + if (!ServerConfig.pvpVRvsVR.get()) { + server.getPlayerList().broadcastMessage(new TextComponent("canceled stand vs stand"), ChatType.SYSTEM, Util.NIL_UUID); + cir.setReturnValue(false); + } + } else if (otherVive.isVR() && otherVive.isSeated() && thisVive.isVR() && thisVive.isSeated()){ + // Seated vs Seated + if (!ServerConfig.pvpSEATEDVRvsSEATEDVR.get()) { + server.getPlayerList().broadcastMessage(new TextComponent("canceled seat vs seat"), ChatType.SYSTEM, Util.NIL_UUID); + cir.setReturnValue(false); + } + } + } } + @Unique + private ServerVivePlayer getVivePlayer() { + return ServerVRPlayers.getVivePlayer((ServerPlayer)(Object)this); + } } diff --git a/common/src/main/java/org/vivecraft/mixin/server/TrackedEntityAccessor.java b/common/src/main/java/org/vivecraft/mixin/server/TrackedEntityAccessor.java new file mode 100644 index 000000000..9e20b0b89 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mixin/server/TrackedEntityAccessor.java @@ -0,0 +1,14 @@ +package org.vivecraft.mixin.server; + +import net.minecraft.server.network.ServerPlayerConnection; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Set; + +@Mixin(targets = "net/minecraft/server/level/ChunkMap$TrackedEntity") +public interface TrackedEntityAccessor { + + @Accessor("seenBy") + Set getPlayersTracking(); +} diff --git a/common/src/main/java/org/vivecraft/mixin/server/level/ServerPlayer.java.patch b/common/src/main/java/org/vivecraft/mixin/server/level/ServerPlayer.java.patch deleted file mode 100644 index 6e6abb179..000000000 --- a/common/src/main/java/org/vivecraft/mixin/server/level/ServerPlayer.java.patch +++ /dev/null @@ -1,730 +0,0 @@ ---- a/net/minecraft/server/level/ServerPlayer.java -+++ b/net/minecraft/server/level/ServerPlayer.java -@@ -5,6 +5,7 @@ - import com.mojang.datafixers.util.Either; - import java.util.Collection; - import java.util.List; -+import java.util.Objects; - import java.util.Optional; - import java.util.OptionalInt; - import java.util.Random; -@@ -17,11 +18,14 @@ - import net.minecraft.ReportedException; - import net.minecraft.Util; - import net.minecraft.advancements.CriteriaTriggers; -+import net.minecraft.client.Minecraft; - import net.minecraft.commands.arguments.EntityAnchorArgument; - import net.minecraft.core.BlockPos; - import net.minecraft.core.Direction; - import net.minecraft.core.NonNullList; - import net.minecraft.core.SectionPos; -+import net.minecraft.core.particles.ItemParticleOption; -+import net.minecraft.core.particles.ParticleTypes; - import net.minecraft.nbt.CompoundTag; - import net.minecraft.nbt.NbtOps; - import net.minecraft.network.chat.ChatType; -@@ -53,6 +57,7 @@ - import net.minecraft.network.protocol.game.ClientboundPlayerCombatEndPacket; - import net.minecraft.network.protocol.game.ClientboundPlayerCombatEnterPacket; - import net.minecraft.network.protocol.game.ClientboundPlayerCombatKillPacket; -+import net.minecraft.network.protocol.game.ClientboundPlayerInfoPacket; - import net.minecraft.network.protocol.game.ClientboundPlayerLookAtPacket; - import net.minecraft.network.protocol.game.ClientboundRemoveMobEffectPacket; - import net.minecraft.network.protocol.game.ClientboundResourcePackPacket; -@@ -109,7 +114,10 @@ - import net.minecraft.world.item.ItemStack; - import net.minecraft.world.item.Items; - import net.minecraft.world.item.ServerItemCooldowns; -+import net.minecraft.world.item.UseAnim; - import net.minecraft.world.item.WrittenBookItem; -+import net.minecraft.world.item.alchemy.PotionUtils; -+import net.minecraft.world.item.alchemy.Potions; - import net.minecraft.world.item.crafting.Recipe; - import net.minecraft.world.item.trading.MerchantOffers; - import net.minecraft.world.level.ChunkPos; -@@ -133,8 +141,12 @@ - import net.minecraft.world.scores.Score; - import net.minecraft.world.scores.Team; - import net.minecraft.world.scores.criteria.ObjectiveCriteria; -+import net.minecraftforge.common.util.ITeleporter; -+import net.optifine.reflect.Reflector; - import org.apache.logging.log4j.LogManager; - import org.apache.logging.log4j.Logger; -+import org.vivecraft.api.NetworkHelper; -+import org.vivecraft.api.ServerVivePlayer; - - public class ServerPlayer extends Player - { -@@ -233,6 +245,9 @@ - private int containerCounter; - public int latency; - public boolean wonGame; -+ private String language = "en_us"; -+ private boolean hasTabListName = false; -+ private Component tabListDisplayName = null; - - public ServerPlayer(MinecraftServer p_143384_, ServerLevel p_143385_, GameProfile p_143386_) - { -@@ -378,9 +393,9 @@ - pCompound.putInt("SpawnZ", this.respawnPosition.getZ()); - pCompound.putBoolean("SpawnForced", this.respawnForced); - pCompound.putFloat("SpawnAngle", this.respawnAngle); -- ResourceLocation.CODEC.encodeStart(NbtOps.INSTANCE, this.respawnDimension.location()).resultOrPartial(LOGGER::error).ifPresent((p_9134_) -> -+ ResourceLocation.CODEC.encodeStart(NbtOps.INSTANCE, this.respawnDimension.location()).resultOrPartial(LOGGER::error).ifPresent((p_241148_1_) -> - { -- pCompound.put("SpawnDimension", p_9134_); -+ pCompound.put("SpawnDimension", p_241148_1_); - }); - } - } -@@ -413,13 +428,38 @@ - - private void initMenu(AbstractContainerMenu p_143400_) - { -- p_143400_.addSlotListener(this.containerListener); -- p_143400_.setSynchronizer(this.containerSynchronizer); -+ p_143400_.addSlotListener(this.containerListener); -+ p_143400_.setSynchronizer(this.containerSynchronizer); - } - - public void initInventoryMenu() - { - this.initMenu(this.inventoryMenu); -+ -+ ServerVivePlayer serverviveplayer = NetworkHelper.vivePlayers.get(this.getUUID()); -+ -+ //vivecraft -+ if (!Minecraft.getInstance().vrSettings.disableFun && serverviveplayer != null && serverviveplayer.isVR() && this.random.nextInt(40) == 3) -+ { -+ ItemStack itemstack; -+ -+ if (this.random.nextInt(2) == 1) -+ { -+ itemstack = (new ItemStack(Items.PUMPKIN_PIE)).setHoverName(new TextComponent("EAT ME")); -+ } -+ else -+ { -+ itemstack = PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER).setHoverName(new TextComponent("DRINK ME")); -+ } -+ -+ itemstack.getTag().putInt("HideFlags", 32); -+ -+ if (this.getInventory().add(itemstack)) -+ { -+ this.inventoryMenu.broadcastChanges(); -+ } -+ } -+ // - } - - public void onEnterCombat() -@@ -501,6 +541,7 @@ - if (!this.isSpectator() || !this.touchingUnloadedChunk()) - { - super.tick(); -+ NetworkHelper.overridePose(this); - } - - for (int i = 0; i < this.getInventory().getContainerSize(); ++i) -@@ -573,9 +614,9 @@ - CriteriaTriggers.LOCATION.trigger(this); - } - } -- catch (Throwable throwable) -+ catch (Throwable throwable1) - { -- CrashReport crashreport = CrashReport.forThrowable(throwable, "Ticking player"); -+ CrashReport crashreport = CrashReport.forThrowable(throwable1, "Ticking player"); - CrashReportCategory crashreportcategory = crashreport.addCategory("Player being ticked"); - this.fillCrashReportCategory(crashreportcategory); - throw new ReportedException(crashreport); -@@ -631,6 +672,9 @@ - - public void die(DamageSource pCause) - { -+ //Forge -+ if(Reflector.callBoolean(Reflector.ForgeHooks_onLivingDeath, this, pCause)) return; -+ // - boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_SHOWDEATHMESSAGES); - - if (flag) -@@ -826,76 +870,120 @@ - } - } - -+ //Forge - @Nullable - public Entity changeDimension(ServerLevel pServer) - { -- this.isChangingDimension = true; -- ServerLevel serverlevel = this.getLevel(); -- ResourceKey resourcekey = serverlevel.dimension(); -- -- if (resourcekey == Level.END && pServer.dimension() == Level.OVERWORLD) -- { -- this.unRide(); -- this.getLevel().removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION); -- -- if (!this.wonGame) -- { -- this.wonGame = true; -- this.connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.WIN_GAME, this.seenCredits ? 0.0F : 1.0F)); -- this.seenCredits = true; -- } -- -- return this; -- } -- else -- { -- LevelData leveldata = pServer.getLevelData(); -- this.connection.send(new ClientboundRespawnPacket(pServer.dimensionType(), pServer.dimension(), BiomeManager.obfuscateSeed(pServer.getSeed()), this.gameMode.getGameModeForPlayer(), this.gameMode.getPreviousGameModeForPlayer(), pServer.isDebug(), pServer.isFlat(), true)); -- this.connection.send(new ClientboundChangeDifficultyPacket(leveldata.getDifficulty(), leveldata.isDifficultyLocked())); -- PlayerList playerlist = this.server.getPlayerList(); -- playerlist.sendPlayerPermissionLevel(this); -- serverlevel.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION); -- this.unsetRemoved(); -- PortalInfo portalinfo = this.findDimensionEntryPoint(pServer); -- -- if (portalinfo != null) -- { -- serverlevel.getProfiler().push("moving"); -- -- if (resourcekey == Level.OVERWORLD && pServer.dimension() == Level.NETHER) -- { -- this.enteredNetherPosition = this.position(); -- } -- else if (pServer.dimension() == Level.END) -- { -- this.createEndPlatform(pServer, new BlockPos(portalinfo.pos)); -- } -- -- serverlevel.getProfiler().pop(); -- serverlevel.getProfiler().push("placing"); -- this.setLevel(pServer); -- pServer.addDuringPortalTeleport(this); -- this.setRot(portalinfo.yRot, portalinfo.xRot); -- this.moveTo(portalinfo.pos.x, portalinfo.pos.y, portalinfo.pos.z); -- serverlevel.getProfiler().pop(); -- this.triggerDimensionChangeTriggers(serverlevel); -- this.connection.send(new ClientboundPlayerAbilitiesPacket(this.getAbilities())); -- playerlist.sendLevelInfo(this, pServer); -- playerlist.sendAllPlayerInfo(this); -- -- for (MobEffectInstance mobeffectinstance : this.getActiveEffects()) -- { -- this.connection.send(new ClientboundUpdateMobEffectPacket(this.getId(), mobeffectinstance)); -- } -- -- this.connection.send(new ClientboundLevelEventPacket(1032, BlockPos.ZERO, 0, false)); -- this.lastSentExp = -1; -- this.lastSentHealth = -1.0F; -- this.lastSentFood = -1; -- } -- -- return this; -- } -+ return this.changeDimension(pServer, Reflector.ForgeHooks.exists() ? (ITeleporter)pServer.getPortalForcer() : null); -+ } -+ -+ @Nullable -+ public Entity changeDimension(ServerLevel server, ITeleporter teleporter) -+ { -+ if (Reflector.ForgeHooks.exists() && !Reflector.callBoolean(Reflector.ForgeHooks_onTravelToDimension, this, server.dimension())) -+ { -+ return null; -+ } -+ else -+ { -+ this.isChangingDimension = true; -+ ServerLevel serverlevel = this.getLevel(); -+ ResourceKey resourcekey = serverlevel.dimension(); -+ -+ if (resourcekey == Level.END && server.dimension() == Level.OVERWORLD && teleporter.isVanilla()) -+ { -+ this.unRide(); -+ -+ if (Reflector.ForgeHooks.exists()) -+ { -+ Reflector.callVoid(this.getLevel(), Reflector.ServerWorld_removePlayer, this, true); -+ } -+ else -+ { -+ this.getLevel().removePlayerImmediately(this, RemovalReason.CHANGED_DIMENSION); -+ } -+ -+ if (!this.wonGame) -+ { -+ this.wonGame = true; -+ this.connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.WIN_GAME, this.seenCredits ? 0.0F : 1.0F)); -+ this.seenCredits = true; -+ } -+ -+ return this; -+ } -+ else -+ { -+ LevelData leveldata = server.getLevelData(); -+ this.connection.send(new ClientboundRespawnPacket(server.dimensionType(), server.dimension(), BiomeManager.obfuscateSeed(server.getSeed()), this.gameMode.getGameModeForPlayer(), this.gameMode.getPreviousGameModeForPlayer(), server.isDebug(), server.isFlat(), true)); -+ this.connection.send(new ClientboundChangeDifficultyPacket(leveldata.getDifficulty(), leveldata.isDifficultyLocked())); -+ PlayerList playerlist = this.server.getPlayerList(); -+ playerlist.sendPlayerPermissionLevel(this); -+ -+ if (Reflector.ForgeHooks.exists()) -+ { -+ Reflector.callVoid(serverlevel, Reflector.ServerWorld_removePlayer, this, true); -+ Reflector.callVoid(this, Reflector.Entity_revive); -+ } -+ else -+ { -+ serverlevel.removePlayerImmediately(this, RemovalReason.CHANGED_DIMENSION); -+ this.unsetRemoved(); -+ } -+ -+ //PortalInfo portalinfo = this.findDimensionEntryPoint(server); -+ //Forge -+ PortalInfo portalinfo = teleporter.getPortalInfo(this, server, this::findDimensionEntryPoint); -+ -+ if (portalinfo != null) -+ { -+ Entity e = teleporter.placeEntity(this, serverlevel, server, this.getYRot(), spawnPortal -> {//Forge: Start vanilla logic -+ -+ serverlevel.getProfiler().push("moving"); -+ -+ if (resourcekey == Level.OVERWORLD && server.dimension() == Level.NETHER) -+ { -+ this.enteredNetherPosition = this.position(); -+ } -+ else if (spawnPortal && server.dimension() == Level.END) -+ { -+ this.createEndPlatform(server, new BlockPos(portalinfo.pos)); -+ } -+ -+ serverlevel.getProfiler().pop(); -+ serverlevel.getProfiler().push("placing"); -+ this.setLevel(server); -+ server.addDuringPortalTeleport(this); -+ this.setRot(portalinfo.yRot, portalinfo.xRot); -+ this.moveTo(portalinfo.pos.x, portalinfo.pos.y, portalinfo.pos.z); -+ serverlevel.getProfiler().pop(); -+ this.triggerDimensionChangeTriggers(serverlevel); -+ return this;//forge: this is part of the ITeleporter patch -+ });//Forge: End vanilla logic -+ if (e != this) throw new java.lang.IllegalArgumentException(String.format("Teleporter %s returned not the player entity but instead %s, expected PlayerEntity %s", teleporter, e, this)); -+ this.connection.send(new ClientboundPlayerAbilitiesPacket(this.getAbilities())); -+ playerlist.sendLevelInfo(this, server); -+ playerlist.sendAllPlayerInfo(this); -+ -+ for (MobEffectInstance mobeffectinstance : this.getActiveEffects()) -+ { -+ this.connection.send(new ClientboundUpdateMobEffectPacket(this.getId(), mobeffectinstance)); -+ } -+ //Forge -+ if (teleporter.playTeleportSound(this, serverlevel, server)) -+ this.connection.send(new ClientboundLevelEventPacket(1032, BlockPos.ZERO, 0, false)); -+ // -+ this.lastSentExp = -1; -+ this.lastSentHealth = -1.0F; -+ this.lastSentFood = -1; -+ //Forge -+ Reflector.call(Reflector.BasicEventHooks_firePlayerChangedDimensionEvent, this, resourcekey, server.dimension()); -+ // -+ } -+ -+ return this; -+ } -+ } - } - - private void createEndPlatform(ServerLevel p_9007_, BlockPos p_9008_) -@@ -974,6 +1062,18 @@ - - public Either startSleepInBed(BlockPos pAt) - { -+ Optional optional = Optional.of(pAt); -+ -+ if (Reflector.ForgeEventFactory_onPlayerSleepInBed.exists()) -+ { -+ Player.BedSleepingProblem player$bedsleepingproblem = (Player.BedSleepingProblem)Reflector.call(Reflector.ForgeEventFactory_onPlayerSleepInBed, this, optional); -+ -+ if (player$bedsleepingproblem != null) -+ { -+ return Either.left(player$bedsleepingproblem); -+ } -+ } -+ - Direction direction = this.level.getBlockState(pAt).getValue(HorizontalDirectionalBlock.FACING); - - if (!this.isSleeping() && this.isAlive()) -@@ -993,8 +1093,14 @@ - else - { - this.setRespawnPosition(this.level.dimension(), pAt, this.getYRot(), false, true); -- -- if (this.level.isDay()) -+ -+ boolean flag = this.level.isDay(); -+ if (Reflector.ForgeEventFactory_fireSleepingTimeCheck.exists()) -+ { -+ flag = !Reflector.callBoolean(Reflector.ForgeEventFactory_fireSleepingTimeCheck, this, optional); -+ } -+ -+ if (flag) - { - return Either.left(Player.BedSleepingProblem.NOT_POSSIBLE_NOW); - } -@@ -1005,9 +1111,9 @@ - double d0 = 8.0D; - double d1 = 5.0D; - Vec3 vec3 = Vec3.atBottomCenterOf(pAt); -- List list = this.level.getEntitiesOfClass(Monster.class, new AABB(vec3.x() - 8.0D, vec3.y() - 5.0D, vec3.z() - 8.0D, vec3.x() + 8.0D, vec3.y() + 5.0D, vec3.z() + 8.0D), (p_9062_) -> -+ List list = this.level.getEntitiesOfClass(Monster.class, new AABB(vec3.x() - 8.0D, vec3.y() - 5.0D, vec3.z() - 8.0D, vec3.x() + 8.0D, vec3.y() + 5.0D, vec3.z() + 8.0D), (p_241146_1_) -> - { -- return p_9062_.isPreventingPlayerRest(this); -+ return p_241146_1_.isPreventingPlayerRest(this); - }); - - if (!list.isEmpty()) -@@ -1016,7 +1122,7 @@ - } - } - -- Either either = super.startSleepInBed(pAt).ifRight((p_9029_) -> -+ Either either = super.startSleepInBed(pAt).ifRight((p_241144_1_) -> - { - this.awardStat(Stats.SLEEP_IN_BED); - CriteriaTriggers.SLEPT_IN_BED.trigger(this); -@@ -1046,7 +1152,14 @@ - - private boolean bedInRange(BlockPos p_9117_, Direction p_9118_) - { -- return this.isReachableBedBlock(p_9117_) || this.isReachableBedBlock(p_9117_.relative(p_9118_.getOpposite())); -+ if (p_9118_ == null) -+ { -+ return false; -+ } -+ else -+ { -+ return this.isReachableBedBlock(p_9117_) || this.isReachableBedBlock(p_9117_.relative(p_9118_.getOpposite())); -+ } - } - - private boolean isReachableBedBlock(BlockPos p_9223_) -@@ -1187,6 +1300,7 @@ - this.connection.send(new ClientboundOpenScreenPacket(abstractcontainermenu.containerId, abstractcontainermenu.getType(), p_9033_.getDisplayName())); - this.initMenu(abstractcontainermenu); - this.containerMenu = abstractcontainermenu; -+ Reflector.postForgeBusEvent(Reflector.newInstance(Reflector.PlayerContainerEvent_Open_Constructor, this, this.containerMenu)); - return OptionalInt.of(this.containerCounter); - } - } -@@ -1208,6 +1322,7 @@ - this.connection.send(new ClientboundHorseScreenOpenPacket(this.containerCounter, pInventory.getContainerSize(), pHorse.getId())); - this.containerMenu = new HorseInventoryMenu(this.containerCounter, this.getInventory(), pInventory, pHorse); - this.initMenu(this.containerMenu); -+ Reflector.postForgeBusEvent(Reflector.newInstance(Reflector.PlayerContainerEvent_Open_Constructor, this, this.containerMenu)); - } - - public void openItemGui(ItemStack pStack, InteractionHand pHand) -@@ -1238,6 +1353,7 @@ - { - this.containerMenu.removed(this); - this.inventoryMenu.transferState(this.containerMenu); -+ Reflector.postForgeBusEvent(Reflector.newInstance(Reflector.PlayerContainerEvent_Close_Constructor, this, this.containerMenu)); - this.containerMenu = this.inventoryMenu; - } - -@@ -1263,9 +1379,9 @@ - public void awardStat(Stat pStat, int pAmount) - { - this.stats.increment(this, pStat, pAmount); -- this.getScoreboard().forAllObjectives(pStat, this.getScoreboardName(), (p_8996_) -> -+ this.getScoreboard().forAllObjectives(pStat, this.getScoreboardName(), (p_195396_1_) -> - { -- p_8996_.add(pAmount); -+ p_195396_1_.add(pAmount); - }); - } - -@@ -1387,6 +1503,16 @@ - this.enteredNetherPosition = pThat.enteredNetherPosition; - this.setShoulderEntityLeft(pThat.getShoulderEntityLeft()); - this.setShoulderEntityRight(pThat.getShoulderEntityRight()); -+ //Forge -+ CompoundTag compoundtag = (CompoundTag)Reflector.call(pThat, Reflector.Entity_getPersistentData); -+ -+ if (compoundtag != null && compoundtag.contains("PlayerPersisted")) -+ { -+ ((CompoundTag)Reflector.call(this, Reflector.Entity_getPersistentData)).put("PlayerPersisted", compoundtag.getCompound("PlayerPersisted")); -+ } -+ -+ Reflector.callVoid(Reflector.ForgeEventFactory_onPlayerClone, this, pThat, !pKeepEverything); -+ // - } - - protected void onEffectAdded(MobEffectInstance p_143393_, @Nullable Entity p_143394_) -@@ -1460,6 +1586,10 @@ - - public boolean setGameMode(GameType p_143404_) - { -+ //Forge -+ if (Reflector.ForgeHooks_onChangeGameMode.exists() && !Reflector.callBoolean(Reflector.ForgeHooks_onChangeGameMode, this, this.gameMode.getGameModeForPlayer(), p_143404_)) -+ return false; -+ // - if (!this.gameMode.changeGameModeForPlayer(p_143404_)) - { - return false; -@@ -1531,6 +1661,10 @@ - this.allowsListing = pPacket.allowsListing(); - this.getEntityData().set(DATA_PLAYER_MODE_CUSTOMISATION, (byte)pPacket.modelCustomisation()); - this.getEntityData().set(DATA_PLAYER_MAIN_HAND, (byte)(pPacket.mainHand() == HumanoidArm.LEFT ? 0 : 1)); -+ if (Reflector.ForgeHooks.exists()) -+ { -+ this.language = Reflector.callString(pPacket, Reflector.CClientSettingsPacket_getLanguage); -+ } - } - - public boolean canChatInColor() -@@ -1606,7 +1740,8 @@ - { - Entity entity = this.getCamera(); - this.camera = (Entity)(pEntityToSpectate == null ? this : pEntityToSpectate); -- -+ //Forge -- ehhh -+ //while (this.camera instanceof net.minecraftforge.entity.PartEntity partEntity) this.camera = partEntity.getParent(); // FORGE: fix MC-46486 - if (entity != this.camera) - { - this.connection.send(new ClientboundSetCameraPacket(this.camera)); -@@ -1642,7 +1777,15 @@ - @Nullable - public Component getTabListDisplayName() - { -- return null; -+ //Forge -+ if (!this.hasTabListName) -+ { -+ this.tabListDisplayName = (Component)Reflector.call(Reflector.ForgeEventFactory_getPlayerTabListDisplayName, this); -+ this.hasTabListName = true; -+ } -+ -+ return this.tabListDisplayName; -+ // - } - - public void swing(InteractionHand pHand) -@@ -1675,22 +1818,109 @@ - { - this.connection.teleport(pX, p_9002_, pY, p_9004_, pZ); - } -- else -+ else if (Reflector.callBoolean(Reflector.ForgeHooks_onTravelToDimension,this, pNewLevel.dimension())) - { - ServerLevel serverlevel = this.getLevel(); - LevelData leveldata = pNewLevel.getLevelData(); - this.connection.send(new ClientboundRespawnPacket(pNewLevel.dimensionType(), pNewLevel.dimension(), BiomeManager.obfuscateSeed(pNewLevel.getSeed()), this.gameMode.getGameModeForPlayer(), this.gameMode.getPreviousGameModeForPlayer(), pNewLevel.isDebug(), pNewLevel.isFlat(), true)); - this.connection.send(new ClientboundChangeDifficultyPacket(leveldata.getDifficulty(), leveldata.isDifficultyLocked())); - this.server.getPlayerList().sendPlayerPermissionLevel(this); -- serverlevel.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION); -- this.unsetRemoved(); -+ //Forge -+ if (Reflector.ForgeHooks.exists()) -+ { -+ Reflector.callVoid(serverlevel, Reflector.ServerWorld_removePlayer, this, true); -+ Reflector.callVoid(this, Reflector.Entity_revive); -+ } -+ else -+ { -+ serverlevel.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION); -+ this.unsetRemoved(); -+ } -+ // - this.moveTo(pX, p_9002_, pY, p_9004_, pZ); - this.setLevel(pNewLevel); - pNewLevel.addDuringCommandTeleport(this); - this.triggerDimensionChangeTriggers(serverlevel); - this.connection.teleport(pX, p_9002_, pY, p_9004_, pZ); -+ //Forge -+ this.gameMode.setLevel(pNewLevel); -+ // - this.server.getPlayerList().sendLevelInfo(this, pNewLevel); - this.server.getPlayerList().sendAllPlayerInfo(this); -+ Reflector.call(Reflector.BasicEventHooks_firePlayerChangedDimensionEvent, this, serverlevel.dimension(), pNewLevel.dimension()); -+ } -+ } -+ -+ public void sweepAttack() -+ { -+ ServerVivePlayer serverviveplayer = NetworkHelper.vivePlayers.get(this.getUUID()); -+ -+ if (serverviveplayer != null && serverviveplayer.isVR()) -+ { -+ Vec3 vec3 = serverviveplayer.getControllerDir(0); -+ float f = (float)Math.toDegrees(Math.atan2(vec3.x, -vec3.z)); -+ double d0 = (double)(-Mth.sin(f * ((float)Math.PI / 180F))); -+ double d1 = (double)Mth.cos(f * ((float)Math.PI / 180F)); -+ Vec3 vec31 = serverviveplayer.getControllerPos(0, this); -+ -+ if (this.level instanceof ServerLevel) -+ { -+ ((ServerLevel)this.level).sendParticles(ParticleTypes.SWEEP_ATTACK, vec31.x + d0, vec31.y, vec31.z + d1, 0, d0, 0.0D, d1, 0.0D); -+ } -+ } -+ else -+ { -+ super.sweepAttack(); -+ } -+ } -+ -+ protected void triggerItemUseEffects(ItemStack pStack, int pCount) -+ { -+ if (!pStack.isEmpty() && this.isUsingItem()) -+ { -+ if (pStack.getUseAnimation() == UseAnim.DRINK) -+ { -+ this.playSound(this.getDrinkingSound(pStack), 0.5F, this.level.random.nextFloat() * 0.1F + 0.9F); -+ } -+ -+ if (pStack.getUseAnimation() == UseAnim.EAT) -+ { -+ this.addItemParticles(pStack, pCount); -+ this.playSound(this.getEatingSound(pStack), 0.5F + 0.5F * (float)this.random.nextInt(2), (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F); -+ } -+ } -+ } -+ -+ private void addItemParticles(ItemStack stack, int count) -+ { -+ ServerVivePlayer serverviveplayer = NetworkHelper.vivePlayers.get(this.getUUID()); -+ -+ for (int i = 0; i < count; ++i) -+ { -+ Vec3 vec3 = new Vec3(((double)this.random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D); -+ vec3 = vec3.xRot(-this.getXRot() * ((float)Math.PI / 180F)); -+ vec3 = vec3.yRot(-this.getYRot() * ((float)Math.PI / 180F)); -+ double d0 = (double)(-this.random.nextFloat()) * 0.6D - 0.3D; -+ Vec3 vec31 = new Vec3(((double)this.random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D); -+ vec31 = vec31.xRot(-this.getXRot() * ((float)Math.PI / 180F)); -+ vec31 = vec31.yRot(-this.getYRot() * ((float)Math.PI / 180F)); -+ vec31 = vec31.add(this.getX(), this.getEyeY(), this.getZ()); -+ -+ if (serverviveplayer != null && serverviveplayer.isVR()) -+ { -+ InteractionHand interactionhand = this.getUsedItemHand(); -+ -+ if (interactionhand == InteractionHand.MAIN_HAND) -+ { -+ vec31 = serverviveplayer.getControllerPos(0, this); -+ } -+ else -+ { -+ vec31 = serverviveplayer.getControllerPos(1, this); -+ } -+ } -+ -+ this.level.addParticle(new ItemParticleOption(ParticleTypes.ITEM, stack), vec31.x, vec31.y, vec31.z, vec3.x, vec3.y + 0.05D, vec3.z); - } - } - -@@ -1717,26 +1947,29 @@ - - public void setRespawnPosition(ResourceKey p_9159_, @Nullable BlockPos p_9160_, float p_9161_, boolean p_9162_, boolean p_9163_) - { -- if (p_9160_ != null) -+ if (!Reflector.callBoolean(Reflector.ForgeEventFactory_onPlayerSpawnSet, this, p_9160_ == null ? Level.OVERWORLD : p_9159_, p_9160_, p_9161_)) - { -- boolean flag = p_9160_.equals(this.respawnPosition) && p_9159_.equals(this.respawnDimension); -+ if (p_9160_ != null) -+ { -+ boolean flag = p_9160_.equals(this.respawnPosition) && p_9159_.equals(this.respawnDimension); -+ -+ if (p_9163_ && !flag) -+ { -+ this.sendMessage(new TranslatableComponent("block.minecraft.set_spawn"), Util.NIL_UUID); -+ } - -- if (p_9163_ && !flag) -+ this.respawnPosition = p_9160_; -+ this.respawnDimension = p_9159_; -+ this.respawnAngle = p_9161_; -+ this.respawnForced = p_9162_; -+ } -+ else - { -- this.sendMessage(new TranslatableComponent("block.minecraft.set_spawn"), Util.NIL_UUID); -+ this.respawnPosition = null; -+ this.respawnDimension = Level.OVERWORLD; -+ this.respawnAngle = 0.0F; -+ this.respawnForced = false; - } -- -- this.respawnPosition = p_9160_; -- this.respawnDimension = p_9159_; -- this.respawnAngle = p_9161_; -- this.respawnForced = p_9162_; -- } -- else -- { -- this.respawnPosition = null; -- this.respawnDimension = Level.OVERWORLD; -- this.respawnAngle = 0.0F; -- this.respawnForced = false; - } - } - -@@ -1783,7 +2016,32 @@ - } - else - { -- this.level.addFreshEntity(itementity); -+ //Vivecraft -+ ServerVivePlayer serverviveplayer = NetworkHelper.vivePlayers.get(this.getUUID()); -+ -+ if (serverviveplayer != null && serverviveplayer.isVR() && !pDropAround) -+ { -+ Vec3 vec3 = serverviveplayer.getControllerPos(0, this); -+ Vec3 vec31 = serverviveplayer.getControllerDir(0); -+ float f = 0.3F; -+ itementity.setDeltaMovement(vec31.x * (double)f, vec31.y * (double)f, vec31.z * (double)f); -+ itementity.setPos(vec3.x() + itementity.getDeltaMovement().x(), vec3.y() + itementity.getDeltaMovement().y(), vec3.z() + itementity.getDeltaMovement().z()); -+ } -+ // -+ -+ //Forge -+ Collection collection = (Collection)Reflector.call(this, Reflector.Entity_captureDrops); -+ -+ if (collection != null) -+ { -+ collection.add(itementity); -+ } -+ else -+ { -+ this.level.addFreshEntity(itementity); -+ } -+ // -+ - ItemStack itemstack = itementity.getItem(); - - if (pTraceItem) -@@ -1890,4 +2148,23 @@ - { - return this.allowsListing; - } -+ -+ //Forge -+ public String getLanguage() -+ { -+ return this.language; -+ } -+ -+ public void refreshTabListName() -+ { -+ Component component = this.tabListDisplayName; -+ this.tabListDisplayName = (Component)Reflector.call(Reflector.ForgeEventFactory_getPlayerTabListDisplayName, this); -+ -+ if (!Objects.equals(component, this.tabListDisplayName)) -+ { -+ this.getServer().getPlayerList().broadcastAll(new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.UPDATE_DISPLAY_NAME, this)); -+ } -+ } -+ // -+ - } diff --git a/common/src/main/java/org/vivecraft/mixin/server/network/ServerGamePacketListenerImpl.java.patch b/common/src/main/java/org/vivecraft/mixin/server/network/ServerGamePacketListenerImpl.java.patch deleted file mode 100644 index 2442acf3f..000000000 --- a/common/src/main/java/org/vivecraft/mixin/server/network/ServerGamePacketListenerImpl.java.patch +++ /dev/null @@ -1,321 +0,0 @@ ---- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java -+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -27,6 +27,7 @@ - import net.minecraft.Util; - import net.minecraft.advancements.Advancement; - import net.minecraft.advancements.CriteriaTriggers; -+import net.minecraft.client.Minecraft; - import net.minecraft.commands.CommandSourceStack; - import net.minecraft.core.BlockPos; - import net.minecraft.core.Direction; -@@ -34,6 +35,7 @@ - import net.minecraft.nbt.ListTag; - import net.minecraft.nbt.StringTag; - import net.minecraft.network.Connection; -+import net.minecraft.network.FriendlyByteBuf; - import net.minecraft.network.chat.ChatType; - import net.minecraft.network.chat.Component; - import net.minecraft.network.chat.TextComponent; -@@ -110,6 +112,8 @@ - import net.minecraft.world.entity.ExperienceOrb; - import net.minecraft.world.entity.MoverType; - import net.minecraft.world.entity.PlayerRideableJumping; -+import net.minecraft.world.entity.Pose; -+import net.minecraft.world.entity.ai.attributes.Attribute; - import net.minecraft.world.entity.animal.horse.AbstractHorse; - import net.minecraft.world.entity.item.ItemEntity; - import net.minecraft.world.entity.player.ChatVisiblity; -@@ -147,9 +151,20 @@ - import net.minecraft.world.phys.shapes.BooleanOp; - import net.minecraft.world.phys.shapes.Shapes; - import net.minecraft.world.phys.shapes.VoxelShape; -+import net.optifine.reflect.Reflector; - import org.apache.commons.lang3.StringUtils; - import org.apache.logging.log4j.LogManager; - import org.apache.logging.log4j.Logger; -+import org.vivecraft.api.AimFixHandler; -+import org.vivecraft.api.NetworkHelper; -+import org.vivecraft.api.ServerVivePlayer; -+import org.vivecraft.reflection.MCReflection; -+import io.netty.channel.Channel; -+import java.io.BufferedReader; -+import java.io.ByteArrayInputStream; -+import java.io.DataInputStream; -+import java.io.IOException; -+import java.io.InputStreamReader; - - public class ServerGamePacketListenerImpl implements ServerPlayerConnection, ServerGamePacketListener - { -@@ -197,6 +212,20 @@ - this.player = p_9772_; - p_9772_.connection = this; - this.keepAliveTime = Util.getMillis(); -+ -+ //Vivecraft -+ try -+ { -+ ((Channel)MCReflection.NetworkManager_channel.get(p_9771_)).pipeline().addBefore("packet_handler", "vr_aim_fix", new AimFixHandler(this.connection)); -+ } -+ catch (Exception exception) -+ { -+ if (!Reflector.fml_ModLoader.exists()) -+ { -+ LOGGER.warn("{} failed adding VR aim fix", (Object)this.player.getName().getString()); -+ } -+ } -+ // - p_9772_.getTextFilter().join(); - } - -@@ -293,6 +322,8 @@ - { - this.disconnect(new TranslatableComponent("multiplayer.disconnect.idling")); - } -+ -+ NetworkHelper.sendPosData(this.player); - } - - public void resetPosition() -@@ -317,7 +348,7 @@ - - public void disconnect(Component pTextComponent) - { -- this.connection.send(new ClientboundDisconnectPacket(pTextComponent), (p_9828_) -> -+ this.connection.send(new ClientboundDisconnectPacket(pTextComponent), (p_210161_2_) -> - { - this.connection.disconnect(pTextComponent); - }); -@@ -432,11 +463,17 @@ - } - - entity.absMoveTo(d3, d4, d5, f, f1); -+ //Forge -+ this.player.absMoveTo(d3, d4, d5, this.player.getYRot(), this.player.getXRot()); -+ // - boolean flag2 = serverlevel.noCollision(entity, entity.getBoundingBox().deflate(0.0625D)); - - if (flag && (flag1 || !flag2)) - { - entity.absMoveTo(d0, d1, d2, f, f1); -+ //Forge -+ this.player.absMoveTo(d3, d4, d5, this.player.getYRot(), this.player.getXRot()); -+ // - this.connection.send(new ClientboundMoveVehiclePacket(entity)); - return; - } -@@ -453,7 +490,10 @@ - - private boolean noBlocksAround(Entity p_9794_) - { -- return p_9794_.level.getBlockStates(p_9794_.getBoundingBox().inflate(0.0625D).expandTowards(0.0D, -0.55D, 0.0D)).allMatch(BlockBehaviour.BlockStateBase::isAir); -+ //Forge is this ok? -+ //return p_9794_.level.getBlockStates(p_9794_.getBoundingBox().inflate(0.0625D).expandTowards(0.0D, -0.55D, 0.0D)).allMatch(BlockBehaviour.BlockStateBase::isAir); -+ return BlockPos.betweenClosedStream(p_9794_.getBoundingBox().inflate(0.0625D).expandTowards(0.0D, -0.55D, 0.0D)).allMatch(b -> p_9794_.level.getBlockState(b).isAir()); -+ // - } - - public void handleAcceptTeleportPacket(ServerboundAcceptTeleportationPacket pPacket) -@@ -1207,7 +1247,19 @@ - - if (blockpos.getY() < i) - { -- if (this.awaitingPositionFromClient == null && this.player.distanceToSqr((double)blockpos.getX() + 0.5D, (double)blockpos.getY() + 0.5D, (double)blockpos.getZ() + 0.5D) < 64.0D && serverlevel.mayInteract(this.player, blockpos)) -+ double d0 = 8.0D; -+ //Forge -+ Object object = Reflector.call(Reflector.getFieldValue(Reflector.ForgeMod_REACH_DISTANCE), Reflector.RegistryObject_get); -+ -+ if (object != null) -+ { -+ d0 = this.player.getAttribute((Attribute)object).getValue() + 3.0D; -+ } -+ -+ d0 = d0 * d0; -+ // -+ -+ if (this.awaitingPositionFromClient == null && this.player.distanceToSqr((double)blockpos.getX() + 0.5D, (double)blockpos.getY() + 0.5D, (double)blockpos.getZ() + 0.5D) < d0 && serverlevel.mayInteract(this.player, blockpos)) - { - InteractionResult interactionresult = this.player.gameMode.useItemOn(this.player, serverlevel, itemstack, interactionhand, blockhitresult); - -@@ -1323,9 +1375,9 @@ - { - this.connection.send(pPacket, pFutureListeners); - } -- catch (Throwable throwable) -+ catch (Throwable throwable1) - { -- CrashReport crashreport = CrashReport.forThrowable(throwable, "Sending packet"); -+ CrashReport crashreport = CrashReport.forThrowable(throwable1, "Sending packet"); - CrashReportCategory crashreportcategory = crashreport.addCategory("Packet being sent"); - crashreportcategory.setDetail("Packet class", () -> - { -@@ -1357,8 +1409,10 @@ - - public void handleChat(ServerboundChatPacket pPacket) - { -- String s = StringUtils.normalizeSpace(pPacket.getMessage()); -- -+ //String s = StringUtils.normalizeSpace(pPacket.getMessage()); -+ //Forge -why? -+ String s = org.apache.commons.lang3.StringUtils.normalizeSpace(pPacket.getMessage()); -+ // - for (int i = 0; i < s.length(); ++i) - { - if (!SharedConstants.isAllowedChatCharacter(s.charAt(i))) -@@ -1399,9 +1453,14 @@ - String s1 = pPacket.getFiltered(); - Component component = s1.isEmpty() ? null : new TranslatableComponent("chat.type.text", this.player.getDisplayName(), s1); - Component component1 = new TranslatableComponent("chat.type.text", this.player.getDisplayName(), s); -+ //Forge -+ if(Reflector.ForgeHooks_onServerChatEvent.exists()) -+ component1 = (Component) Reflector.call(Reflector.ForgeHooks_onServerChatEvent, this, s, component1); -+ Component finalComponent = component1; -+ // - this.server.getPlayerList().broadcastMessage(component1, (p_184197_) -> - { -- return this.player.shouldFilterMessageTo(p_184197_) ? component : component1; -+ return this.player.shouldFilterMessageTo(p_184197_) ? component : finalComponent; - }, ChatType.CHAT, this.player.getUUID()); - } - -@@ -1527,7 +1586,9 @@ - { - ItemStack itemstack = ServerGamePacketListenerImpl.this.player.getItemInHand(p_143679_).copy(); - InteractionResult interactionresult = p_143680_.run(ServerGamePacketListenerImpl.this.player, entity, p_143679_); -- -+ //Forge -+ if (Reflector.call(Reflector.ForgeHooks_onInteractEntityAt, player, entity, entity.position(), p_143679_) != null) return; -+ // - if (interactionresult.consumesAction()) - { - CriteriaTriggers.PLAYER_INTERACTED_WITH_ENTITY.trigger(ServerGamePacketListenerImpl.this.player, itemstack, entity); -@@ -1790,6 +1851,130 @@ - - public void handleCustomPayload(ServerboundCustomPayloadPacket pPacket) - { -+ //Forge -+ PacketUtils.ensureRunningOnSameThread(pPacket, this, this.player.getLevel()); -+ Reflector.call(Reflector.NetworkHooks_onCustomPayload, pPacket, this.connection); -+ // -+ FriendlyByteBuf friendlybytebuf = (FriendlyByteBuf)MCReflection.CCustomPayloadPacket_data.get(pPacket); -+ ResourceLocation resourcelocation = (ResourceLocation)MCReflection.CCustomPayloadPacket_channel.get(pPacket); -+ String s = resourcelocation.getNamespace(); -+ String s1 = resourcelocation.getPath(); -+ -+ if (s.equalsIgnoreCase("vivecraft") && s1.equalsIgnoreCase("data")) -+ { -+ int i = friendlybytebuf.readableBytes(); -+ NetworkHelper.PacketDiscriminators networkhelper$packetdiscriminators = NetworkHelper.PacketDiscriminators.values()[friendlybytebuf.readByte()]; -+ byte[] abyte = new byte[i - 1]; -+ friendlybytebuf.readBytes(abyte); -+ ServerVivePlayer serverviveplayer = NetworkHelper.vivePlayers.get(this.player.getUUID()); -+ -+ if (serverviveplayer == null && networkhelper$packetdiscriminators != NetworkHelper.PacketDiscriminators.VERSION) -+ { -+ return; -+ } -+ -+ switch (networkhelper$packetdiscriminators) -+ { -+ case VERSION: -+ String s2 = Minecraft.getInstance().minecriftVerString; -+ this.send(NetworkHelper.getVivecraftServerPacket(NetworkHelper.PacketDiscriminators.VERSION, s2)); -+ this.send(NetworkHelper.getVivecraftServerPacket(NetworkHelper.PacketDiscriminators.REQUESTDATA, new byte[0])); -+ this.send(NetworkHelper.getVivecraftServerPacket(NetworkHelper.PacketDiscriminators.CLIMBING, new byte[] {1, 0})); -+ this.send(NetworkHelper.getVivecraftServerPacket(NetworkHelper.PacketDiscriminators.TELEPORT, new byte[0])); -+ this.send(NetworkHelper.getVivecraftServerPacket(NetworkHelper.PacketDiscriminators.CRAWL, new byte[0])); -+ serverviveplayer = new ServerVivePlayer(this.player); -+ NetworkHelper.vivePlayers.put(this.player.getUUID(), serverviveplayer); -+ BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(new DataInputStream(new ByteArrayInputStream(abyte)))); -+ -+ try -+ { -+ String s3 = bufferedreader.readLine(); -+ -+ if (s3.contains("NONVR")) -+ { -+ this.player.sendMessage(new TextComponent("NONVR: " + this.player.getDisplayName().getString()), this.player.getUUID()); -+ serverviveplayer.setVR(false); -+ } -+ else -+ { -+ this.player.sendMessage(new TextComponent("VR: " + this.player.getDisplayName().getString()), this.player.getUUID()); -+ serverviveplayer.setVR(true); -+ } -+ } -+ catch (IOException ioexception) -+ { -+ ioexception.printStackTrace(); -+ } -+ -+ break; -+ -+ case CONTROLLER0DATA: -+ serverviveplayer.controller0data = abyte; -+ break; -+ -+ case CONTROLLER1DATA: -+ serverviveplayer.controller1data = abyte; -+ break; -+ -+ case DRAW: -+ serverviveplayer.draw = abyte; -+ break; -+ -+ case HEADDATA: -+ serverviveplayer.hmdData = abyte; -+ -+ case MOVEMODE: -+ case REQUESTDATA: -+ default: -+ break; -+ -+ case WORLDSCALE: -+ friendlybytebuf.resetReaderIndex(); -+ friendlybytebuf.readByte(); -+ serverviveplayer.worldScale = friendlybytebuf.readFloat(); -+ break; -+ -+ case HEIGHT: -+ friendlybytebuf.resetReaderIndex(); -+ friendlybytebuf.readByte(); -+ serverviveplayer.heightscale = friendlybytebuf.readFloat(); -+ break; -+ -+ case TELEPORT: -+ friendlybytebuf.resetReaderIndex(); -+ friendlybytebuf.readByte(); -+ float f = friendlybytebuf.readFloat(); -+ float f1 = friendlybytebuf.readFloat(); -+ float f2 = friendlybytebuf.readFloat(); -+ this.player.absMoveTo((double)f, (double)f1, (double)f2, this.player.getYRot(), this.player.getXRot()); -+ break; -+ -+ case CLIMBING: -+ this.player.fallDistance = 0.0F; -+ this.aboveGroundTickCount = 0; //why were we not doing this -+ case ACTIVEHAND: -+ friendlybytebuf.resetReaderIndex(); -+ friendlybytebuf.readByte(); -+ serverviveplayer.activeHand = friendlybytebuf.readByte(); -+ -+ if (serverviveplayer.isSeated()) -+ { -+ serverviveplayer.activeHand = 0; -+ } -+ -+ break; -+ -+ case CRAWL: -+ friendlybytebuf.resetReaderIndex(); -+ friendlybytebuf.readByte(); -+ serverviveplayer.crawling = friendlybytebuf.readByte() != 0; -+ -+ if (serverviveplayer.crawling) -+ { -+ this.player.setPose(Pose.SWIMMING); -+ } -+ } -+ } - } - - public void handleChangeDifficulty(ServerboundChangeDifficultyPacket pPacket) diff --git a/common/src/main/java/org/vivecraft/mixin/server/network/ServerGamePacketListenerImplMixin.java b/common/src/main/java/org/vivecraft/mixin/server/network/ServerGamePacketListenerImplMixin.java deleted file mode 100644 index 20d10e587..000000000 --- a/common/src/main/java/org/vivecraft/mixin/server/network/ServerGamePacketListenerImplMixin.java +++ /dev/null @@ -1,186 +0,0 @@ -package org.vivecraft.mixin.server.network; - -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.DataInputStream; -import java.io.IOException; -import java.io.InputStreamReader; - -import net.minecraft.network.protocol.PacketUtils; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.CommonDataHolder; -import org.vivecraft.api.AimFixHandler; -import org.vivecraft.api.CommonNetworkHelper; -import org.vivecraft.api.ServerVivePlayer; - -import net.minecraft.network.Connection; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.chat.TextComponent; -import net.minecraft.network.protocol.game.ServerGamePacketListener; -import net.minecraft.network.protocol.game.ServerboundCustomPayloadPacket; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.server.network.ServerGamePacketListenerImpl; -import net.minecraft.server.network.ServerPlayerConnection; -import net.minecraft.world.entity.Pose; - -@Mixin(ServerGamePacketListenerImpl.class) -public abstract class ServerGamePacketListenerImplMixin implements ServerPlayerConnection, ServerGamePacketListener{ - - @Shadow - @Final - public Connection connection; - - @Shadow - public ServerPlayer player; - - @Shadow - private int aboveGroundTickCount; - - - @Inject(at = @At("TAIL"), method = "(Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/network/Connection;Lnet/minecraft/server/level/ServerPlayer;)V") - public void init(MinecraftServer p_9770_, Connection p_9771_, ServerPlayer p_9772_, CallbackInfo info) { - // Vivecraft - if (this.connection.channel != null && this.connection.channel.pipeline().get("packet_handler") != null) { //fake player fix - this.connection.channel.pipeline().addBefore("packet_handler", "vr_aim_fix", - new AimFixHandler(this.connection)); - } - } - - @Inject(at = @At("TAIL"), method = "tick()V") - public void posdata(CallbackInfo info) { - CommonNetworkHelper.sendPosData(this.player); - } - - @Inject(at = @At("TAIL"), method = "handleCustomPayload(Lnet/minecraft/network/protocol/game/ServerboundCustomPayloadPacket;)V" ) - public void custompacket(ServerboundCustomPayloadPacket pPacket, CallbackInfo info) { - - PacketUtils.ensureRunningOnSameThread(pPacket, this, this.player.getLevel()); - - FriendlyByteBuf friendlybytebuf = pPacket.getData(); - ResourceLocation resourcelocation = pPacket.getIdentifier(); - String s = resourcelocation.getNamespace(); - String s1 = resourcelocation.getPath(); - - if (s.equalsIgnoreCase("vivecraft") && s1.equalsIgnoreCase("data")) - { - int i = friendlybytebuf.readableBytes(); - CommonNetworkHelper.PacketDiscriminators networkhelper$packetdiscriminators = CommonNetworkHelper.PacketDiscriminators.values()[friendlybytebuf.readByte()]; - byte[] abyte = new byte[i - 1]; - friendlybytebuf.readBytes(abyte); - ServerVivePlayer serverviveplayer = CommonNetworkHelper.vivePlayers.get(this.player.getUUID()); - - if (serverviveplayer == null && networkhelper$packetdiscriminators != CommonNetworkHelper.PacketDiscriminators.VERSION) - { - return; - } - - switch (networkhelper$packetdiscriminators) - { - case VERSION: - String s2 = CommonDataHolder.getInstance().minecriftVerString; - this.send(CommonNetworkHelper.getVivecraftServerPacket(CommonNetworkHelper.PacketDiscriminators.VERSION, s2)); - this.send(CommonNetworkHelper.getVivecraftServerPacket(CommonNetworkHelper.PacketDiscriminators.REQUESTDATA, new byte[0])); - this.send(CommonNetworkHelper.getVivecraftServerPacket(CommonNetworkHelper.PacketDiscriminators.CLIMBING, new byte[] {1, 0})); - this.send(CommonNetworkHelper.getVivecraftServerPacket(CommonNetworkHelper.PacketDiscriminators.TELEPORT, new byte[0])); - this.send(CommonNetworkHelper.getVivecraftServerPacket(CommonNetworkHelper.PacketDiscriminators.CRAWL, new byte[0])); - serverviveplayer = new ServerVivePlayer(this.player); - CommonNetworkHelper.vivePlayers.put(this.player.getUUID(), serverviveplayer); - BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(new DataInputStream(new ByteArrayInputStream(abyte)))); - - try - { - String s3 = bufferedreader.readLine(); - - if (s3.contains("NONVR")) - { - this.player.sendMessage(new TextComponent("NONVR: " + this.player.getDisplayName().getString()), this.player.getUUID()); - serverviveplayer.setVR(false); - } - else - { - this.player.sendMessage(new TextComponent("VR: " + this.player.getDisplayName().getString()), this.player.getUUID()); - serverviveplayer.setVR(true); - } - } - catch (IOException ioexception) - { - ioexception.printStackTrace(); - } - - break; - - case CONTROLLER0DATA: - serverviveplayer.controller0data = abyte; - break; - - case CONTROLLER1DATA: - serverviveplayer.controller1data = abyte; - break; - - case DRAW: - serverviveplayer.draw = abyte; - break; - - case HEADDATA: - serverviveplayer.hmdData = abyte; - - case MOVEMODE: - case REQUESTDATA: - default: - break; - - case WORLDSCALE: - friendlybytebuf.resetReaderIndex(); - friendlybytebuf.readByte(); - serverviveplayer.worldScale = friendlybytebuf.readFloat(); - break; - case HEIGHT: - friendlybytebuf.resetReaderIndex(); - friendlybytebuf.readByte(); - serverviveplayer.heightscale = friendlybytebuf.readFloat(); - break; - - case TELEPORT: - friendlybytebuf.resetReaderIndex(); - friendlybytebuf.readByte(); - float f = friendlybytebuf.readFloat(); - float f1 = friendlybytebuf.readFloat(); - float f2 = friendlybytebuf.readFloat(); - this.player.absMoveTo((double)f, (double)f1, (double)f2, this.player.getYRot(), this.player.getXRot()); - break; - - case CLIMBING: - this.player.fallDistance = 0.0F; - this.aboveGroundTickCount = 0; //why were we not doing this - case ACTIVEHAND: - friendlybytebuf.resetReaderIndex(); - friendlybytebuf.readByte(); - serverviveplayer.activeHand = friendlybytebuf.readByte(); - - if (serverviveplayer.isSeated()) - { - serverviveplayer.activeHand = 0; - } - - break; - - case CRAWL: - friendlybytebuf.resetReaderIndex(); - friendlybytebuf.readByte(); - serverviveplayer.crawling = friendlybytebuf.readByte() != 0; - - if (serverviveplayer.crawling) - { - this.player.setPose(Pose.SWIMMING); - } - } - } - } -} diff --git a/common/src/main/java/org/vivecraft/mixin/server/network/ServerGamePacketListnerImplVRMixin.java b/common/src/main/java/org/vivecraft/mixin/server/network/ServerGamePacketListnerImplVRMixin.java deleted file mode 100644 index d85c9e1aa..000000000 --- a/common/src/main/java/org/vivecraft/mixin/server/network/ServerGamePacketListnerImplVRMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.vivecraft.mixin.server.network; - -import net.minecraft.core.BlockPos; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.server.network.ServerGamePacketListenerImpl; -import net.minecraft.world.entity.Entity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(ServerGamePacketListenerImpl.class) -public class ServerGamePacketListnerImplVRMixin { - - @Shadow - public ServerPlayer player; - - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;absMoveTo(DDDFF)V"), method = "handleMoveVehicle") - public void playerPos(Entity instance, double d, double e, double f, float g, float h) { - instance.absMoveTo(d, e, f, g, h); - this.player.absMoveTo(d, e, f, this.player.getYRot(), this.player.getXRot()); - } - - @Inject(at = @At("RETURN"), method = "noBlocksAround", cancellable = true) - public void noBlocks(Entity entity, CallbackInfoReturnable cir) { - cir.setReturnValue(BlockPos.betweenClosedStream(entity.getBoundingBox().inflate(0.0625D).expandTowards(0.0D, -0.55D, 0.0D)).allMatch(b -> entity.level.getBlockState(b).isAir())); - } -} diff --git a/common/src/main/java/org/vivecraft/mixin/server/packs/repository/PackRepository.java.patch b/common/src/main/java/org/vivecraft/mixin/server/packs/repository/PackRepository.java.patch deleted file mode 100644 index fc5f20c79..000000000 --- a/common/src/main/java/org/vivecraft/mixin/server/packs/repository/PackRepository.java.patch +++ /dev/null @@ -1,74 +0,0 @@ ---- a/net/minecraft/server/packs/repository/PackRepository.java -+++ b/net/minecraft/server/packs/repository/PackRepository.java -@@ -4,8 +4,11 @@ - import com.google.common.collect.ImmutableList; - import com.google.common.collect.ImmutableMap; - import com.google.common.collect.ImmutableSet; -+import com.google.common.collect.Lists; - import com.google.common.collect.Maps; -+import java.util.Arrays; - import java.util.Collection; -+import java.util.HashSet; - import java.util.List; - import java.util.Map; - import java.util.Objects; -@@ -13,6 +16,7 @@ - import java.util.stream.Collectors; - import java.util.stream.Stream; - import javax.annotation.Nullable; -+import net.minecraft.client.Minecraft; - import net.minecraft.server.packs.PackResources; - import net.minecraft.server.packs.PackType; - -@@ -26,7 +30,7 @@ - public PackRepository(Pack.PackConstructor p_10502_, RepositorySource... p_10503_) - { - this.constructor = p_10502_; -- this.sources = ImmutableSet.copyOf(p_10503_); -+ this.sources = new HashSet<>(Arrays.asList(p_10503_)); - } - - public PackRepository(PackType p_143890_, RepositorySource... p_143891_) -@@ -39,10 +43,16 @@ - - public void reload() - { -- List list = this.selected.stream().map(Pack::getId).collect(ImmutableList.toImmutableList()); -+ List list = Lists.newLinkedList(this.selected); -+ List list1 = this.selected.stream().map(Pack::getId).collect(ImmutableList.toImmutableList()); - this.close(); - this.available = this.discoverAvailable(); -- this.selected = this.rebuildSelected(list); -+ this.selected = this.rebuildSelected(list1); -+ -+ if (!this.selected.equals(list)) -+ { -+ Minecraft.getInstance().resourcePacksChanged = true; -+ } - } - - private Map discoverAvailable() -@@ -62,7 +72,13 @@ - - public void setSelected(Collection p_10510_) - { -+ List list = Lists.newLinkedList(this.selected); - this.selected = this.rebuildSelected(p_10510_); -+ -+ if (!this.selected.equals(list)) -+ { -+ Minecraft.getInstance().resourcePacksChanged = true; -+ } - } - - private List rebuildSelected(Collection p_10518_) -@@ -125,4 +141,9 @@ - { - return this.selected.stream().map(Pack::open).collect(ImmutableList.toImmutableList()); - } -+ -+ public void addPackFinder(RepositorySource packFinder) -+ { -+ this.sources.add(packFinder); -+ } - } diff --git a/common/src/main/java/org/vivecraft/mixin/server/packs/repository/PackRepositoryVRMixin.java b/common/src/main/java/org/vivecraft/mixin/server/packs/repository/PackRepositoryVRMixin.java deleted file mode 100644 index 1dbdb4235..000000000 --- a/common/src/main/java/org/vivecraft/mixin/server/packs/repository/PackRepositoryVRMixin.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.vivecraft.mixin.server.packs.repository; - -import java.util.Arrays; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import com.google.common.collect.Lists; - -import net.minecraft.server.packs.repository.Pack; -import net.minecraft.server.packs.repository.PackRepository; -import net.minecraft.server.packs.repository.RepositorySource; -import org.vivecraft.CommonDataHolder; - -@Mixin(PackRepository.class) -public class PackRepositoryVRMixin { - - @Shadow - private List selected; - - @Inject(at = @At("TAIL"), method = "reload()V") - public void reload(CallbackInfo info) { - if (!this.selected.equals(Lists.newLinkedList(this.selected))) { - CommonDataHolder.getInstance().resourcePacksChanged = true; - } - } - - @Inject(at = @At("TAIL"), method = "setSelected(Ljava/util/Collection;)V") - public void selected(Collection c, CallbackInfo info) { - if (!this.selected.equals(Lists.newLinkedList(this.selected))) { - CommonDataHolder.getInstance().resourcePacksChanged = true; - } - } - -} diff --git a/common/src/main/java/org/vivecraft/mixin/util/profiling/ActiveProfiler.java.patch b/common/src/main/java/org/vivecraft/mixin/util/profiling/ActiveProfiler.java.patch deleted file mode 100644 index e4f532506..000000000 --- a/common/src/main/java/org/vivecraft/mixin/util/profiling/ActiveProfiler.java.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- a/net/minecraft/util/profiling/ActiveProfiler.java -+++ b/net/minecraft/util/profiling/ActiveProfiler.java -@@ -135,6 +135,7 @@ - - this.path = this.path + pName; - this.paths.add(this.path); -+ //LOGGER.error("+" + this.path); - this.startTimes.add(Util.getNanos()); - this.currentEntry = null; - } -@@ -164,6 +165,7 @@ - { - long i = Util.getNanos(); - long j = this.startTimes.removeLong(this.startTimes.size() - 1); -+ //LOGGER.error("-" + this.paths.get(this.paths.size() - 1)); - this.paths.remove(this.paths.size() - 1); - long k = i - j; - ActiveProfiler.PathEntry activeprofiler$pathentry = this.getCurrentEntry(); diff --git a/common/src/main/java/org/vivecraft/mixin/world/entity/ai/goal/SwellGoalMixin.java b/common/src/main/java/org/vivecraft/mixin/world/entity/ai/goal/SwellGoalMixin.java index ff3fd01a4..1f4d14ba3 100644 --- a/common/src/main/java/org/vivecraft/mixin/world/entity/ai/goal/SwellGoalMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/world/entity/ai/goal/SwellGoalMixin.java @@ -10,8 +10,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.vivecraft.api.CommonNetworkHelper; -import org.vivecraft.api.ServerVivePlayer; +import org.vivecraft.server.config.ServerConfig; +import org.vivecraft.server.ServerVRPlayers; +import org.vivecraft.server.ServerVivePlayer; @Mixin(SwellGoal.class) public class SwellGoalMixin { @@ -23,10 +24,12 @@ public class SwellGoalMixin { @Inject(at = @At("HEAD"), method = "canUse", cancellable = true) public void vrSwellDistance(CallbackInfoReturnable cir) { LivingEntity target = this.creeper.getTarget(); - if (target instanceof ServerPlayer player && CommonNetworkHelper.isVive(player)) { - ServerVivePlayer data = CommonNetworkHelper.vivePlayers.get(player.getUUID()); - if (data != null && !data.isSeated()) - cir.setReturnValue(this.creeper.getSwellDir() > 0 || this.creeper.distanceToSqr(target) < 1.75 * 1.75); //ServerConfig.creeperSwellDistance.get() + if (target instanceof ServerPlayer player && ServerVRPlayers.isVRPlayer(player)) { + ServerVivePlayer data = ServerVRPlayers.getVivePlayer(player); + if (data != null && !data.isSeated()) { + double swellDistance = ServerConfig.creeperSwellDistance.get(); + cir.setReturnValue(this.creeper.getSwellDir() > 0 || this.creeper.distanceToSqr(target) < swellDistance * swellDistance); + } } } } diff --git a/common/src/main/java/org/vivecraft/mixin/world/entity/monster/EnderMan.java.patch b/common/src/main/java/org/vivecraft/mixin/world/entity/monster/EnderMan.java.patch deleted file mode 100644 index c57ec1a43..000000000 --- a/common/src/main/java/org/vivecraft/mixin/world/entity/monster/EnderMan.java.patch +++ /dev/null @@ -1,103 +0,0 @@ ---- a/net/minecraft/world/entity/monster/EnderMan.java -+++ b/net/minecraft/world/entity/monster/EnderMan.java -@@ -62,7 +62,11 @@ - import net.minecraft.world.level.pathfinder.BlockPathTypes; - import net.minecraft.world.phys.AABB; - import net.minecraft.world.phys.BlockHitResult; -+import net.minecraft.world.phys.HitResult; - import net.minecraft.world.phys.Vec3; -+import net.optifine.reflect.Reflector; -+import org.vivecraft.api.NetworkHelper; -+import org.vivecraft.api.ServerVivePlayer; - - public class EnderMan extends Monster implements NeutralMob - { -@@ -130,6 +134,8 @@ - attributeinstance.addTransientModifier(SPEED_MODIFIER_ATTACKING); - } - } -+ -+ super.setTarget(pLivingEntity); - } - - protected void defineSynchedData() -@@ -312,6 +318,7 @@ - return this.teleport(d1, d2, d3); - } - -+ //cursed params - private boolean teleport(double pX, double p_32545_, double pY) - { - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(pX, p_32545_, pY); -@@ -327,6 +334,19 @@ - - if (flag && !flag1) - { -+ Object object = Reflector.call(Reflector.ForgeEventFactory_onEnderTeleport, this, pX, p_32545_, pY); -+ -+ if (object != null) -+ { -+ if (Reflector.callBoolean(object, Reflector.EnderTeleportEvent_isCanceled)) -+ { -+ return false; -+ } -+ -+ pX = Reflector.callDouble(object, Reflector.EnderTeleportEvent_getTargetX); -+ p_32545_ = Reflector.callDouble(object, Reflector.EnderTeleportEvent_getTargetY); -+ pY = Reflector.callDouble(object, Reflector.EnderTeleportEvent_getTargetZ); -+ } - boolean flag2 = this.randomTeleport(pX, p_32545_, pY, true); - - if (flag2 && !this.isSilent()) -@@ -501,11 +521,18 @@ - - public boolean canUse() - { -+ boolean flag = !this.enderman.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); -+ -+ if (Reflector.ForgeEventFactory_getMobGriefingEvent.exists()) -+ { -+ flag = !Reflector.callBoolean(Reflector.ForgeEventFactory_getMobGriefingEvent, this.enderman.level, this.enderman); -+ } -+ - if (this.enderman.getCarriedBlock() == null) - { - return false; - } -- else if (!this.enderman.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) -+ else if (flag) - { - return false; - } -@@ -527,8 +554,10 @@ - BlockPos blockpos1 = blockpos.below(); - BlockState blockstate1 = level.getBlockState(blockpos1); - BlockState blockstate2 = this.enderman.getCarriedBlock(); -+ Object object = Reflector.call(Reflector.BlockSnapshot_create, level.dimension(), level, blockpos); -+ boolean flag = Reflector.callBoolean(Reflector.ForgeEventFactory_onBlockPlace, this.enderman, object, Direction.UP); - -- if (blockstate2 != null) -+ if (blockstate2 != null && !flag) - { - blockstate2 = Block.updateFromNeighbourShapes(blockstate2, this.enderman.level, blockpos); - -@@ -657,11 +686,18 @@ - - public boolean canUse() - { -+ boolean flag = !this.enderman.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); -+ -+ if (Reflector.ForgeEventFactory_getMobGriefingEvent.exists()) -+ { -+ flag = !Reflector.callBoolean(Reflector.ForgeEventFactory_getMobGriefingEvent, this.enderman.level, this.enderman); -+ } -+ - if (this.enderman.getCarriedBlock() != null) - { - return false; - } -- else if (!this.enderman.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) -+ else if (!flag) - { - return false; - } diff --git a/common/src/main/java/org/vivecraft/mixin/world/entity/monster/EndermanFreezeWhenLookedAtMixin.java b/common/src/main/java/org/vivecraft/mixin/world/entity/monster/EndermanFreezeWhenLookedAtMixin.java index b6140f149..c36fb5da1 100644 --- a/common/src/main/java/org/vivecraft/mixin/world/entity/monster/EndermanFreezeWhenLookedAtMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/world/entity/monster/EndermanFreezeWhenLookedAtMixin.java @@ -10,8 +10,8 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.api.CommonNetworkHelper; -import org.vivecraft.api.ServerVivePlayer; +import org.vivecraft.server.ServerVRPlayers; +import org.vivecraft.server.ServerVivePlayer; @Mixin(EnderMan.EndermanFreezeWhenLookedAt.class) public class EndermanFreezeWhenLookedAtMixin { @@ -25,8 +25,8 @@ public class EndermanFreezeWhenLookedAtMixin { @Inject(at = @At("HEAD"), method = "tick", cancellable = true) public void vrTick(CallbackInfo ci) { - if (this.target instanceof ServerPlayer player && CommonNetworkHelper.isVive(player)) { - ServerVivePlayer data = CommonNetworkHelper.vivePlayers.get(player.getUUID()); + if (this.target instanceof ServerPlayer player && ServerVRPlayers.isVRPlayer(player)) { + ServerVivePlayer data = ServerVRPlayers.getVivePlayer(player); this.enderman.getLookControl().setLookAt(data.getHMDPos(player)); ci.cancel(); } diff --git a/common/src/main/java/org/vivecraft/mixin/world/entity/monster/EndermanMixin.java b/common/src/main/java/org/vivecraft/mixin/world/entity/monster/EndermanMixin.java index 0f5058c80..30de5f657 100644 --- a/common/src/main/java/org/vivecraft/mixin/world/entity/monster/EndermanMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/world/entity/monster/EndermanMixin.java @@ -16,8 +16,8 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.vivecraft.api.CommonNetworkHelper; -import org.vivecraft.api.ServerVivePlayer; +import org.vivecraft.server.ServerVRPlayers; +import org.vivecraft.server.ServerVivePlayer; @Mixin(EnderMan.class) public abstract class EndermanMixin extends Monster { @@ -28,7 +28,7 @@ protected EndermanMixin(EntityType entityType, Level level) { @Inject(at = @At("HEAD"), method = "Lnet/minecraft/world/entity/monster/EnderMan;isLookingAtMe(Lnet/minecraft/world/entity/player/Player;)Z", cancellable = true) public void lookAtVR(Player player, CallbackInfoReturnable cir){ - if (CommonNetworkHelper.isVive((ServerPlayer) player)) { + if (ServerVRPlayers.isVRPlayer((ServerPlayer) player)) { cir.setReturnValue(shouldEndermanAttackVRPlayer((EnderMan) (Object) this, (ServerPlayer) player)); } } @@ -36,7 +36,7 @@ public void lookAtVR(Player player, CallbackInfoReturnable cir){ private static boolean shouldEndermanAttackVRPlayer(EnderMan enderman, ServerPlayer player) { ItemStack itemstack = player.getInventory().armor.get(3); if (!itemstack.is(Items.CARVED_PUMPKIN)) { //no enderitem - ServerVivePlayer data = CommonNetworkHelper.vivePlayers.get(player.getUUID()); + ServerVivePlayer data = ServerVRPlayers.getVivePlayer(player); Vec3 vector3d = data.getHMDDir(); Vec3 vector3d1 = new Vec3(enderman.getX() - data.getHMDPos(player).x, enderman.getEyeY() - data.getHMDPos(player).y, enderman.getZ() - data.getHMDPos(player).z); double d0 = vector3d1.length(); diff --git a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/AbstractArrow.java.patch b/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/AbstractArrow.java.patch deleted file mode 100644 index 2f0ba7ffa..000000000 --- a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/AbstractArrow.java.patch +++ /dev/null @@ -1,71 +0,0 @@ ---- a/net/minecraft/world/entity/projectile/AbstractArrow.java -+++ b/net/minecraft/world/entity/projectile/AbstractArrow.java -@@ -41,6 +41,9 @@ - import net.minecraft.world.phys.HitResult; - import net.minecraft.world.phys.Vec3; - import net.minecraft.world.phys.shapes.VoxelShape; -+import net.optifine.reflect.Reflector; -+import org.vivecraft.api.NetworkHelper; -+import org.vivecraft.api.ServerVivePlayer; - - public abstract class AbstractArrow extends Projectile - { -@@ -83,6 +86,22 @@ - - if (p_36718_ instanceof Player) - { -+ ServerVivePlayer serverviveplayer = NetworkHelper.vivePlayers.get(p_36718_.getUUID()); -+ -+ if (serverviveplayer != null && serverviveplayer.isVR()) -+ { -+ Vec3 vec3 = serverviveplayer.getControllerPos(serverviveplayer.activeHand, (Player)p_36718_); -+ Vec3 vec31 = serverviveplayer.getControllerDir(serverviveplayer.activeHand); -+ -+ if (!serverviveplayer.isSeated() && serverviveplayer.getDraw() > 0.0F) -+ { -+ vec31 = serverviveplayer.getControllerPos(1, (Player)p_36718_).subtract(serverviveplayer.getControllerPos(0, (Player)p_36718_)).normalize(); -+ vec3 = serverviveplayer.getControllerPos(0, (Player)p_36718_); -+ } -+ -+ this.setPos(vec3.x + vec31.x, vec3.y + vec31.y, vec3.z + vec31.z); -+ } -+ - this.pickup = AbstractArrow.Pickup.ALLOWED; - } - } -@@ -146,8 +165,18 @@ - - BlockPos blockpos = this.blockPosition(); - BlockState blockstate = this.level.getBlockState(blockpos); -+ boolean flag1; -+ -+ if (Reflector.IForgeBlockState_isAir2.exists()) -+ { -+ flag1 = Reflector.callBoolean(blockstate, Reflector.IForgeBlockState_isAir2, this.level, blockpos); -+ } -+ else -+ { -+ flag1 = blockstate.isAir(); -+ } - -- if (!blockstate.isAir() && !flag) -+ if (!flag1 && !flag) - { - VoxelShape voxelshape = blockstate.getCollisionShape(this.level, blockpos); - -@@ -222,7 +251,14 @@ - } - } - -- if (hitresult != null && !flag) -+ boolean flag2 = true; -+ -+ if (hitresult != null && Reflector.ForgeEventFactory_onProjectileImpactA.exists()) -+ { -+ flag2 = hitresult.getType() != HitResult.Type.MISS && !Reflector.callBoolean(Reflector.ForgeEventFactory_onProjectileImpactA, this, hitresult); -+ } -+ -+ if (hitresult != null && !flag && flag2) - { - this.onHit(hitresult); - this.hasImpulse = true; diff --git a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/AbstractArrowMixin.java b/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/AbstractArrowMixin.java index 64f0d3670..7350902a0 100644 --- a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/AbstractArrowMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/AbstractArrowMixin.java @@ -1,13 +1,24 @@ package org.vivecraft.mixin.world.entity.projectile; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.network.protocol.game.ClientboundSoundPacket; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; import net.minecraft.world.entity.Entity; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.EntityHitResult; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.api.ClientNetworkHelper; -import org.vivecraft.api.CommonNetworkHelper; -import org.vivecraft.api.ServerVivePlayer; +import org.vivecraft.common.utils.Utils; +import org.vivecraft.server.config.ServerConfig; +import org.vivecraft.server.ServerVRPlayers; +import org.vivecraft.server.ServerVivePlayer; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; @@ -25,19 +36,88 @@ protected AbstractArrowMixin(EntityType p_37248_, Level p_ // TODO Auto-generated constructor stub } + @Shadow + private double baseDamage; + @Inject(at = @At("RETURN"), method = "(Lnet/minecraft/world/entity/EntityType;Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/level/Level;)V") public void pickup(EntityType p_36717_, LivingEntity p_36718_, Level p_36719_, CallbackInfo info) { - ServerVivePlayer serverviveplayer = CommonNetworkHelper.vivePlayers.get(p_36718_.getUUID()); - if (serverviveplayer != null && serverviveplayer.isVR()) { - Vec3 vec3 = serverviveplayer.getControllerPos(serverviveplayer.activeHand, (Player) p_36718_); - Vec3 vec31 = serverviveplayer.getControllerDir(serverviveplayer.activeHand); - - if (!serverviveplayer.isSeated() && serverviveplayer.getDraw() > 0.0F) { - vec31 = serverviveplayer.getControllerPos(1, (Player) p_36718_).subtract(serverviveplayer.getControllerPos(0, (Player) p_36718_)).normalize(); - vec3 = serverviveplayer.getControllerPos(0, (Player) p_36718_); + if (p_36718_ instanceof ServerPlayer player) { + ServerVivePlayer serverviveplayer = ServerVRPlayers.getVivePlayer(player); + if (serverviveplayer != null && serverviveplayer.isVR()) { + Vec3 vec3 = serverviveplayer.getControllerPos(serverviveplayer.activeHand, (Player) p_36718_); + Vec3 vec31 = serverviveplayer.getControllerDir(serverviveplayer.activeHand); + + if (!serverviveplayer.isSeated() && serverviveplayer.getDraw() > 0.0F) { + vec31 = serverviveplayer.getControllerPos(1, (Player) p_36718_).subtract(serverviveplayer.getControllerPos(0, (Player) p_36718_)).normalize(); + vec3 = serverviveplayer.getControllerPos(0, (Player) p_36718_); + } + + this.setPos(vec3.x + vec31.x, vec3.y + vec31.y, vec3.z + vec31.z); + } + } + } + + @Inject(at = @At("HEAD"), method = "onHitEntity") + public void damageMultiplier(EntityHitResult entityHitResult, CallbackInfo ci) { + if (((Projectile)(Object)this).getOwner() instanceof ServerPlayer owner) { + ServerVivePlayer serverVivePlayer = ServerVRPlayers.getVivePlayer(owner); + Vec3 hitpos; + double multiplier = 1.0; + if ((hitpos = isHeadshot(entityHitResult)) != null) { + if (serverVivePlayer != null && serverVivePlayer.isVR()) { + if (serverVivePlayer.isSeated()) { + multiplier = baseDamage * ServerConfig.bowSeatedHeadshotMultiplier.get(); + } else { + multiplier = baseDamage * ServerConfig.bowStandingHeadshotMultiplier.get(); + } + } else { + multiplier = baseDamage * ServerConfig.bowVanillaHeadshotMultiplier.get(); + } + + if (multiplier > 1.0) { + // send headshot particles + ((ServerLevel)this.level).sendParticles( + owner, + ParticleTypes.CRIT, + true, // always render the hit particles on the client + hitpos.x, + hitpos.y, + hitpos.z, + 5, + - this.getDeltaMovement().x, + - this.getDeltaMovement().y, + - this.getDeltaMovement().z, + 0.1); + // send sound effect + owner.connection.send(new ClientboundSoundPacket(SoundEvents.ITEM_BREAK, SoundSource.PLAYERS, owner.getX(), owner.getY(), owner.getZ(), 0.7f, 0.5f)); + } + } + // if headshots are disabled, still use the regular multiplier + if (serverVivePlayer != null) { + if (serverVivePlayer.isSeated()) { + multiplier = Math.max(multiplier, ServerConfig.bowSeatedMultiplier.get()); + } else { + multiplier = Math.max(multiplier, ServerConfig.bowStandingMultiplier.get()); + } } - this.setPos(vec3.x + vec31.x, vec3.y + vec31.y, vec3.z + vec31.z); + baseDamage *= multiplier; + } + } + + @Unique + // checks if the hit was a headshot, and returns the hit position, if it was, null otherwise + private Vec3 isHeadshot(EntityHitResult hit) { + AABB headBox; + if ((headBox = Utils.getEntityHeadHitbox(hit.getEntity(), 0.3)) != null) { + Vec3 originalHitpos = hit.getEntity() + .getBoundingBox() + .clip(this.position(), this.position().add(this.getDeltaMovement().scale(2.0))) + .orElse(this.position().add(this.getDeltaMovement())); + return headBox + .clip(this.position(), originalHitpos) + .orElse(headBox.contains(this.position()) ? this.position() : null); } + return null; } } diff --git a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/AbstractHurtingProjectile.java.patch b/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/AbstractHurtingProjectile.java.patch deleted file mode 100644 index 7f226d5ff..000000000 --- a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/AbstractHurtingProjectile.java.patch +++ /dev/null @@ -1,42 +0,0 @@ ---- a/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java -+++ b/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java -@@ -13,6 +13,9 @@ - import net.minecraft.world.level.Level; - import net.minecraft.world.phys.HitResult; - import net.minecraft.world.phys.Vec3; -+import net.optifine.reflect.Reflector; -+import org.vivecraft.api.NetworkHelper; -+import org.vivecraft.api.ServerVivePlayer; - - public abstract class AbstractHurtingProjectile extends Projectile - { -@@ -78,8 +81,14 @@ - } - - HitResult hitresult = ProjectileUtil.getHitResult(this, this::canHitEntity); -+ boolean flag = false; - -- if (hitresult.getType() != HitResult.Type.MISS) -+ if (Reflector.ForgeEventFactory_onProjectileImpactD.exists()) -+ { -+ flag = Reflector.callBoolean(Reflector.ForgeEventFactory_onProjectileImpactD, this, hitresult); -+ } -+ -+ if (hitresult.getType() != HitResult.Type.MISS && !flag) - { - this.onHit(hitresult); - } -@@ -180,6 +189,13 @@ - if (entity != null) - { - Vec3 vec3 = entity.getLookAngle(); -+ ServerVivePlayer serverviveplayer = NetworkHelper.vivePlayers.get(pSource.getEntity().getUUID()); -+ -+ if (serverviveplayer != null && serverviveplayer.isVR()) -+ { -+ vec3 = serverviveplayer.getHMDDir(); -+ } -+ - this.setDeltaMovement(vec3); - this.xPower = vec3.x * 0.1D; - this.yPower = vec3.y * 0.1D; diff --git a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/AbstractHurtingProjectileMixin.java b/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/AbstractHurtingProjectileMixin.java index bb0a8aee0..2fcd5fb45 100644 --- a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/AbstractHurtingProjectileMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/AbstractHurtingProjectileMixin.java @@ -1,24 +1,26 @@ package org.vivecraft.mixin.world.entity.projectile; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.projectile.AbstractHurtingProjectile; import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -import org.vivecraft.api.ClientNetworkHelper; -import org.vivecraft.api.CommonNetworkHelper; -import org.vivecraft.api.ServerVivePlayer; +import org.vivecraft.server.ServerVRPlayers; +import org.vivecraft.server.ServerVivePlayer; @Mixin(AbstractHurtingProjectile.class) public abstract class AbstractHurtingProjectileMixin { - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getLookAngle()Lnet/minecraft/world/phys/Vec3;"), method = "hurt(Lnet/minecraft/world/damagesource/DamageSource;F)Z") - public Vec3 hurtvive(Entity instance) { - ServerVivePlayer serverviveplayer = CommonNetworkHelper.vivePlayers.get(instance.getUUID()); - if (serverviveplayer != null && serverviveplayer.isVR()) { - return serverviveplayer.getHMDDir(); - } - return instance.getLookAngle(); - } + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getLookAngle()Lnet/minecraft/world/phys/Vec3;"), method = "hurt(Lnet/minecraft/world/damagesource/DamageSource;F)Z") + public Vec3 hurtvive(Entity instance) { + if (instance instanceof ServerPlayer player) { + ServerVivePlayer serverviveplayer = ServerVRPlayers.getVivePlayer(player); + if (serverviveplayer != null && serverviveplayer.isVR()) { + return serverviveplayer.getHMDDir(); + } + } + return instance.getLookAngle(); + } } diff --git a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/FishingHook.java.patch b/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/FishingHook.java.patch deleted file mode 100644 index 6e1cfab97..000000000 --- a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/FishingHook.java.patch +++ /dev/null @@ -1,165 +0,0 @@ ---- a/net/minecraft/world/entity/projectile/FishingHook.java -+++ b/net/minecraft/world/entity/projectile/FishingHook.java -@@ -41,6 +41,10 @@ - import net.minecraft.world.phys.EntityHitResult; - import net.minecraft.world.phys.HitResult; - import net.minecraft.world.phys.Vec3; -+import net.optifine.reflect.Reflector; -+import org.vivecraft.api.NetworkHelper; -+import org.vivecraft.api.ServerVivePlayer; -+import org.vivecraft.provider.MCVR; - - public class FishingHook extends Projectile - { -@@ -77,26 +81,52 @@ - - public FishingHook(Player p_37106_, Level p_37107_, int p_37108_, int p_37109_) - { -- this(EntityType.FISHING_BOBBER, p_37107_, p_37108_, p_37109_); -- this.setOwner(p_37106_); -- float f = p_37106_.getXRot(); -- float f1 = p_37106_.getYRot(); -- float f2 = Mth.cos(-f1 * ((float)Math.PI / 180F) - (float)Math.PI); -- float f3 = Mth.sin(-f1 * ((float)Math.PI / 180F) - (float)Math.PI); -- float f4 = -Mth.cos(-f * ((float)Math.PI / 180F)); -- float f5 = Mth.sin(-f * ((float)Math.PI / 180F)); -- double d0 = p_37106_.getX() - (double)f3 * 0.3D; -- double d1 = p_37106_.getEyeY(); -- double d2 = p_37106_.getZ() - (double)f2 * 0.3D; -- this.moveTo(d0, d1, d2, f1, f); -- Vec3 vec3 = new Vec3((double)(-f3), (double)Mth.clamp(-(f5 / f4), -5.0F, 5.0F), (double)(-f2)); -- double d3 = vec3.length(); -- vec3 = vec3.multiply(0.6D / d3 + 0.5D + this.random.nextGaussian() * 0.0045D, 0.6D / d3 + 0.5D + this.random.nextGaussian() * 0.0045D, 0.6D / d3 + 0.5D + this.random.nextGaussian() * 0.0045D); -- this.setDeltaMovement(vec3); -- this.setYRot((float)(Mth.atan2(vec3.x, vec3.z) * (double)(180F / (float)Math.PI))); -- this.setXRot((float)(Mth.atan2(vec3.y, vec3.horizontalDistance()) * (double)(180F / (float)Math.PI))); -- this.yRotO = this.getYRot(); -- this.xRotO = this.getXRot(); -+ this(EntityType.FISHING_BOBBER, p_37107_, p_37108_, p_37109_); -+ this.setOwner(p_37106_); -+ float f = p_37106_.getXRot(); -+ float f1 = p_37106_.getYRot(); -+ float f2 = Mth.cos(-f1 * ((float)Math.PI / 180F) - (float)Math.PI); -+ float f3 = Mth.sin(-f1 * ((float)Math.PI / 180F) - (float)Math.PI); -+ float f4 = -Mth.cos(-f * ((float)Math.PI / 180F)); -+ float f5 = Mth.sin(-f * ((float)Math.PI / 180F)); -+ //Vivecraft -+ ServerVivePlayer serverviveplayer = NetworkHelper.vivePlayers.get(p_37106_.getUUID()); -+ -+ if (serverviveplayer != null && serverviveplayer.isVR()) -+ { -+ Vec3 vec32 = serverviveplayer.getControllerDir(serverviveplayer.activeHand); -+ Vec3 vec3 = serverviveplayer.getControllerPos(serverviveplayer.activeHand, p_37106_); -+ float f7 = -((float)Math.toDegrees(Math.asin(vec32.y / vec32.length()))); -+ float f6 = (float)Math.toDegrees(Math.atan2(-vec32.x, vec32.z)); -+ this.moveTo(vec3.x + vec32.x * (double)0.6F, vec3.y + vec32.y * (double)0.6F, vec3.z + vec32.z * (double)0.6F, f6, f7); -+ f = f7; -+ f1 = f6; -+ f2 = Mth.cos(-f6 * ((float)Math.PI / 180F) - (float)Math.PI); -+ f3 = Mth.sin(-f6 * ((float)Math.PI / 180F) - (float)Math.PI); -+ f4 = -Mth.cos(-f7 * ((float)Math.PI / 180F)); -+ f5 = Mth.sin(-f7 * ((float)Math.PI / 180F)); -+ } -+ else -+ { -+ double d0 = p_37106_.getX() - (double)f3 * 0.3D; -+ double d1 = p_37106_.getEyeY(); -+ double d2 = p_37106_.getZ() - (double)f2 * 0.3D; -+ this.moveTo(d0, d1, d2, f1, f); -+ } -+ -+ double d4 = p_37106_.getX() - (double)f3 * 0.3D; -+ double d5 = p_37106_.getEyeY(); -+ double d6 = p_37106_.getZ() - (double)f2 * 0.3D; -+ this.moveTo(d4, d5, d6, f1, f); -+ Vec3 vec31 = new Vec3((double)(-f3), (double)Mth.clamp(-(f5 / f4), -5.0F, 5.0F), (double)(-f2)); -+ double d3 = vec31.length(); -+ vec31 = vec31.multiply(0.6D / d3 + 0.5D + this.random.nextGaussian() * 0.0045D, 0.6D / d3 + 0.5D + this.random.nextGaussian() * 0.0045D, 0.6D / d3 + 0.5D + this.random.nextGaussian() * 0.0045D); -+ this.setDeltaMovement(vec31); -+ this.setYRot((float)(Mth.atan2(vec31.x, vec31.z) * (double)(180F / (float)Math.PI))); -+ this.setXRot((float)(Mth.atan2(vec31.y, vec31.horizontalDistance()) * (double)(180F / (float)Math.PI))); -+ // -+ this.yRotO = this.getYRot(); -+ this.xRotO = this.getXRot(); - } - - protected void defineSynchedData() -@@ -271,6 +301,16 @@ - this.setDeltaMovement(this.getDeltaMovement().scale(0.92D)); - this.reapplyPosition(); - } -+ -+ if (player != null && player.isLocalPlayer()) -+ { -+ ServerVivePlayer serverviveplayer = NetworkHelper.vivePlayers.get(player.getUUID()); -+ -+ if (serverviveplayer != null && serverviveplayer.isVR() && this.currentState == FishingHook.FishHookState.BOBBING && this.getDeltaMovement().y <= -0.24D) -+ { -+ MCVR.get().triggerHapticPulse(0, 250); -+ } -+ } - } - - private boolean shouldStopFishing(Player p_37137_) -@@ -471,9 +511,9 @@ - - private FishingHook.OpenWaterType getOpenWaterTypeForArea(BlockPos p_37148_, BlockPos p_37149_) - { -- return BlockPos.betweenClosedStream(p_37148_, p_37149_).map(this::getOpenWaterTypeForBlock).reduce((p_37139_, p_37140_) -> -+ return BlockPos.betweenClosedStream(p_37148_, p_37149_).map(this::getOpenWaterTypeForBlock).reduce((p_234601_0_, p_234601_1_) -> - { -- return p_37139_ == p_37140_ ? p_37139_ : FishingHook.OpenWaterType.INVALID; -+ return p_234601_0_ == p_234601_1_ ? p_234601_0_ : FishingHook.OpenWaterType.INVALID; - }).orElse(FishingHook.OpenWaterType.INVALID); - } - -@@ -512,6 +552,7 @@ - if (!this.level.isClientSide && player != null && !this.shouldStopFishing(player)) - { - int i = 0; -+ Object object = null; - - if (this.hookedIn != null) - { -@@ -525,6 +566,15 @@ - LootContext.Builder lootcontext$builder = (new LootContext.Builder((ServerLevel)this.level)).withParameter(LootContextParams.ORIGIN, this.position()).withParameter(LootContextParams.TOOL, p_37157_).withParameter(LootContextParams.THIS_ENTITY, this).withRandom(this.random).withLuck((float)this.luck + player.getLuck()); - LootTable loottable = this.level.getServer().getLootTables().get(BuiltInLootTables.FISHING); - List list = loottable.getRandomItems(lootcontext$builder.create(LootContextParamSets.FISHING)); -+ object = Reflector.newInstance(Reflector.ItemFishedEvent_Constructor, list, this.onGround ? 2 : 1, this); -+ Reflector.postForgeBusEvent(object); -+ -+ if (Reflector.callBoolean(object, Reflector.Event_isCanceled)) -+ { -+ this.discard(); -+ return Reflector.callInt(object, Reflector.ItemFishedEvent_getRodDamage); -+ } -+ - CriteriaTriggers.FISHING_ROD_HOOKED.trigger((ServerPlayer)player, p_37157_, this, list); - - for (ItemStack itemstack : list) -@@ -553,7 +603,7 @@ - } - - this.discard(); -- return i; -+ return object == null ? i : Reflector.callInt(object, Reflector.ItemFishedEvent_getRodDamage); - } - else - { -@@ -614,6 +664,16 @@ - } - } - -+ public void remove(boolean keepData) -+ { -+ this.discard(); -+ -+ if (this.getPlayerOwner() != null) -+ { -+ this.getPlayerOwner().fishing = null; -+ } -+ } -+ - @Nullable - public Player getPlayerOwner() - { diff --git a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/FishingHookMixin.java b/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/FishingHookMixin.java index 9f55873d0..40446f18c 100644 --- a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/FishingHookMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/FishingHookMixin.java @@ -1,14 +1,14 @@ package org.vivecraft.mixin.world.entity.projectile; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; -import org.vivecraft.api.ClientNetworkHelper; -import org.vivecraft.api.CommonNetworkHelper; -import org.vivecraft.api.ServerVivePlayer; +import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.vivecraft.server.ServerVRPlayers; +import org.vivecraft.server.ServerVivePlayer; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.player.Player; @@ -19,25 +19,47 @@ @Mixin(FishingHook.class) public abstract class FishingHookMixin extends Entity { - + protected FishingHookMixin(EntityType p_37248_, Level p_37249_) { super(p_37248_, p_37249_); // TODO Auto-generated constructor stub } - @Inject(at = @At(value = "RETURN", target = "Lnet/minecraft/world/entity/player/Player;getYRot()F"), - method = "(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/level/Level;II)V", - locals = LocalCapture.CAPTURE_FAILHARD) - public void hook(Player p_37106_, Level p_37107_, int p_37108_, int p_37109_ , CallbackInfo info, float f, float f1) { - ServerVivePlayer serverviveplayer = CommonNetworkHelper.vivePlayers.get(p_37106_.getUUID()); + @Unique + private ServerVivePlayer serverviveplayer = null; + @Unique + private Vec3 controllerDir = null; + @Unique + private Vec3 controllerPos = null; + + @ModifyVariable(at = @At(value = "STORE"), method = "(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/level/Level;II)V", ordinal = 0) + private float modifyXrot(float xRot, Player player) { + serverviveplayer = ServerVRPlayers.getVivePlayer((ServerPlayer) player); + if (serverviveplayer != null && serverviveplayer.isVR()) { + controllerDir = serverviveplayer.getControllerDir(serverviveplayer.activeHand); + controllerPos = serverviveplayer.getControllerPos(serverviveplayer.activeHand, player); + return -((float) Math.toDegrees(Math.asin(controllerDir.y / controllerDir.length()))); + } + return xRot; + } + @ModifyVariable(at = @At(value = "STORE"), method = "(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/level/Level;II)V", ordinal = 1) + private float modifyYrot(float yRot) { if (serverviveplayer != null && serverviveplayer.isVR()) { - Vec3 vec32 = serverviveplayer.getControllerDir(serverviveplayer.activeHand); - Vec3 vec3 = serverviveplayer.getControllerPos(serverviveplayer.activeHand, p_37106_); - f = -((float) Math.toDegrees(Math.asin(vec32.y / vec32.length()))); - f1 = (float) Math.toDegrees(Math.atan2(-vec32.x, vec32.z)); - this.moveTo(vec3.x + vec32.x * (double)0.6F, vec3.y + vec32.y * (double)0.6F, vec3.z + vec32.z * (double)0.6F, f1, f); + return (float) Math.toDegrees(Math.atan2(-controllerDir.x, controllerDir.z)); } - + return yRot; } -} + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/projectile/FishingHook;moveTo(DDDFF)V"), method = "(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/level/Level;II)V") + private void modifyMoveTo(FishingHook instance, double x, double y, double z, float yRot, float xRot) { + if (serverviveplayer != null && serverviveplayer.isVR()) { + instance.moveTo(controllerPos.x + controllerDir.x * (double)0.6F, controllerPos.y + controllerDir.y * (double)0.6F, controllerPos.z + controllerDir.z * (double)0.6F, yRot, xRot); + controllerDir = null; + controllerPos = null; + } else { + this.moveTo(x, y, z, yRot, xRot); + } + + serverviveplayer = null; + } +} \ No newline at end of file diff --git a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/Projectile.java.patch b/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/Projectile.java.patch deleted file mode 100644 index 520625dc5..000000000 --- a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/Projectile.java.patch +++ /dev/null @@ -1,61 +0,0 @@ ---- a/net/minecraft/world/entity/projectile/Projectile.java -+++ b/net/minecraft/world/entity/projectile/Projectile.java -@@ -3,6 +3,10 @@ - import com.google.common.base.MoreObjects; - import java.util.UUID; - import javax.annotation.Nullable; -+ -+import org.vivecraft.api.NetworkHelper; -+import org.vivecraft.api.ServerVivePlayer; -+ - import net.minecraft.core.BlockPos; - import net.minecraft.nbt.CompoundTag; - import net.minecraft.network.protocol.Packet; -@@ -120,9 +124,9 @@ - - if (entity != null) - { -- for (Entity entity1 : this.level.getEntities(this, this.getBoundingBox().expandTowards(this.getDeltaMovement()).inflate(1.0D), (p_37272_) -> -+ for (Entity entity1 : this.level.getEntities(this, this.getBoundingBox().expandTowards(this.getDeltaMovement()).inflate(1.0D), (p_234613_0_) -> - { -- return !p_37272_.isSpectator() && p_37272_.isPickable(); -+ return !p_234613_0_.isSpectator() && p_234613_0_.isPickable(); - })) - { - if (entity1.getRootVehicle() == entity.getRootVehicle()) -@@ -148,12 +152,29 @@ - - public void shootFromRotation(Entity pProjectile, float pX, float pY, float pZ, float pVelocity, float pInaccuracy) - { -- float f = -Mth.sin(pY * ((float)Math.PI / 180F)) * Mth.cos(pX * ((float)Math.PI / 180F)); -- float f1 = -Mth.sin((pX + pZ) * ((float)Math.PI / 180F)); -- float f2 = Mth.cos(pY * ((float)Math.PI / 180F)) * Mth.cos(pX * ((float)Math.PI / 180F)); -- this.shoot((double)f, (double)f1, (double)f2, pVelocity, pInaccuracy); -- Vec3 vec3 = pProjectile.getDeltaMovement(); -- this.setDeltaMovement(this.getDeltaMovement().add(vec3.x, pProjectile.isOnGround() ? 0.0D : vec3.y, vec3.z)); -+ ServerVivePlayer serverviveplayer = NetworkHelper.vivePlayers.get(pProjectile.getUUID()); -+ -+ if (serverviveplayer != null && serverviveplayer.isVR()) -+ { -+ Vec3 vec3 = serverviveplayer.getControllerDir(serverviveplayer.activeHand); -+ -+ if (this instanceof AbstractArrow && !(this instanceof ThrownTrident) && !serverviveplayer.isSeated() && serverviveplayer.getDraw() > 0.0F) -+ { -+ vec3 = serverviveplayer.getControllerPos(1, (Player)pProjectile).subtract(serverviveplayer.getControllerPos(0, (Player)pProjectile)).normalize(); -+ pVelocity *= serverviveplayer.getDraw(); -+ ((AbstractArrow)this).setBaseDamage(((AbstractArrow)this).getBaseDamage() * 2.0D); -+ } -+ -+ pX = -((float)Math.toDegrees(Math.asin(vec3.y / vec3.length()))); -+ pY = (float)Math.toDegrees(Math.atan2(-vec3.x, vec3.z)); -+ } -+ -+ float f2 = -Mth.sin(pY * ((float)Math.PI / 180F)) * Mth.cos(pX * ((float)Math.PI / 180F)); -+ float f = -Mth.sin((pX + pZ) * ((float)Math.PI / 180F)); -+ float f1 = Mth.cos(pY * ((float)Math.PI / 180F)) * Mth.cos(pX * ((float)Math.PI / 180F)); -+ this.shoot((double)f2, (double)f, (double)f1, pVelocity, pInaccuracy); -+ Vec3 vec31 = pProjectile.getDeltaMovement(); -+ this.setDeltaMovement(this.getDeltaMovement().add(vec31.x, pProjectile.isOnGround() ? 0.0D : vec31.y, vec31.z)); - } - - protected void onHit(HitResult pResult) diff --git a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/ProjectileMixin.java b/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/ProjectileMixin.java index a9394a299..33b827792 100644 --- a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/ProjectileMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/ProjectileMixin.java @@ -1,54 +1,57 @@ package org.vivecraft.mixin.world.entity.projectile; -import net.minecraft.util.Mth; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.projectile.AbstractArrow; import net.minecraft.world.entity.projectile.Projectile; import net.minecraft.world.entity.projectile.ThrownTrident; -import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.api.ClientNetworkHelper; -import org.vivecraft.api.CommonNetworkHelper; -import org.vivecraft.api.ServerVivePlayer; +import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.vivecraft.server.ServerVRPlayers; +import org.vivecraft.server.ServerVivePlayer; @Mixin(Projectile.class) -public abstract class ProjectileMixin extends Entity{ +public class ProjectileMixin { - @Shadow - public abstract void shoot(double f2, double f, double f1, float pVelocity, float pInaccuracy); + @Unique + private Vec3 controllerDir; - public ProjectileMixin(EntityType p_19870_, Level p_19871_) { - super(p_19870_, p_19871_); - // TODO Auto-generated constructor stub + @ModifyVariable(method = "shootFromRotation(Lnet/minecraft/world/entity/Entity;FFFFF)V", + at = @At("HEAD"), ordinal = 3, argsOnly = true) + public float pVelocity(float pVelocity, Entity pProjectile) { + if (pProjectile instanceof ServerPlayer player) { + ServerVivePlayer serverVivePlayer = ServerVRPlayers.getVivePlayer(player); + if (serverVivePlayer != null && serverVivePlayer.isVR()) { + this.controllerDir = serverVivePlayer.getControllerDir(serverVivePlayer.activeHand); + if (((Projectile) (Object) this) instanceof AbstractArrow && !(((Projectile) (Object) this) instanceof ThrownTrident) && !serverVivePlayer.isSeated() && serverVivePlayer.getDraw() > 0.0F){ + this.controllerDir = serverVivePlayer.getControllerPos(1, (Player) pProjectile).subtract(serverVivePlayer.getControllerPos(0, (Player) pProjectile)).normalize(); + } + } + } + return pVelocity; } - @Inject(at = @At("HEAD"), method = "shootFromRotation(Lnet/minecraft/world/entity/Entity;FFFFF)V", cancellable = true) - public void shoot(Entity pProjectile, float pX, float pY, float pZ, float pVelocity, float pInaccuracy, CallbackInfo info) { - ServerVivePlayer serverviveplayer = CommonNetworkHelper.vivePlayers.get(pProjectile.getUUID()); - if (serverviveplayer != null && serverviveplayer.isVR()){ - Vec3 vec3 = serverviveplayer.getControllerDir(serverviveplayer.activeHand); - if (((Projectile) (Object) this) instanceof AbstractArrow && !(((Projectile) (Object) this) instanceof ThrownTrident) && !serverviveplayer.isSeated() && serverviveplayer.getDraw() > 0.0F){ - vec3 = serverviveplayer.getControllerPos(1, (Player)pProjectile).subtract(serverviveplayer.getControllerPos(0, (Player)pProjectile)).normalize(); - pVelocity *= serverviveplayer.getDraw(); - ((AbstractArrow)(Object)this).setBaseDamage(((AbstractArrow)(Object)this).getBaseDamage() * 2.0D); - } - pX = -((float)Math.toDegrees(Math.asin(vec3.y / vec3.length()))); - pY = (float)Math.toDegrees(Math.atan2(-vec3.x, vec3.z)); + @ModifyVariable(method = "shootFromRotation(Lnet/minecraft/world/entity/Entity;FFFFF)V", + at = @At("HEAD"), ordinal = 0, argsOnly = true) + public float pX(float pXIn, Entity pProjectile) { + if (this.controllerDir != null) { + return -((float) Math.toDegrees(Math.asin(this.controllerDir.y / this.controllerDir.length()))); } - float f2 = -Mth.sin(pY * ((float)Math.PI / 180F)) * Mth.cos(pX * ((float)Math.PI / 180F)); - float f = -Mth.sin((pX + pZ) * ((float)Math.PI / 180F)); - float f1 = Mth.cos(pY * ((float)Math.PI / 180F)) * Mth.cos(pX * ((float)Math.PI / 180F)); - this.shoot((double)f2, (double)f, (double)f1, pVelocity, pInaccuracy); - Vec3 vec31 = pProjectile.getDeltaMovement(); - this.setDeltaMovement(this.getDeltaMovement().add(vec31.x, pProjectile.isOnGround() ? 0.0D : vec31.y, vec31.z)); - info.cancel(); + return pXIn; } + @ModifyVariable(method = "shootFromRotation(Lnet/minecraft/world/entity/Entity;FFFFF)V", + at = @At("HEAD"), ordinal = 1, argsOnly = true) + public float pY(float pYIn, Entity pProjectile) { + if (this.controllerDir != null) { + float toRet = (float) Math.toDegrees(Math.atan2(-this.controllerDir.x, this.controllerDir.z)); + this.controllerDir = null; + return toRet; + } + return pYIn; + } } diff --git a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/ThrowableProjectile.java.patch b/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/ThrowableProjectile.java.patch deleted file mode 100644 index 86431f11b..000000000 --- a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/ThrowableProjectile.java.patch +++ /dev/null @@ -1,52 +0,0 @@ ---- a/net/minecraft/world/entity/projectile/ThrowableProjectile.java -+++ b/net/minecraft/world/entity/projectile/ThrowableProjectile.java -@@ -4,6 +4,7 @@ - import net.minecraft.core.particles.ParticleTypes; - import net.minecraft.world.entity.EntityType; - import net.minecraft.world.entity.LivingEntity; -+import net.minecraft.world.entity.player.Player; - import net.minecraft.world.level.Level; - import net.minecraft.world.level.block.Blocks; - import net.minecraft.world.level.block.entity.BlockEntity; -@@ -12,6 +13,9 @@ - import net.minecraft.world.phys.BlockHitResult; - import net.minecraft.world.phys.HitResult; - import net.minecraft.world.phys.Vec3; -+import net.optifine.reflect.Reflector; -+import org.vivecraft.api.NetworkHelper; -+import org.vivecraft.api.ServerVivePlayer; - - public abstract class ThrowableProjectile extends Projectile - { -@@ -30,6 +34,14 @@ - { - this(p_37462_, p_37463_.getX(), p_37463_.getEyeY() - (double)0.1F, p_37463_.getZ(), p_37464_); - this.setOwner(p_37463_); -+ ServerVivePlayer serverviveplayer = NetworkHelper.vivePlayers.get(p_37463_.getUUID()); -+ -+ if (serverviveplayer != null && serverviveplayer.isVR()) -+ { -+ Vec3 vec3 = serverviveplayer.getControllerPos(serverviveplayer.activeHand, (Player)p_37463_); -+ Vec3 vec31 = serverviveplayer.getControllerDir(serverviveplayer.activeHand).scale((double)0.6F); -+ this.setPos(vec3.x + vec31.x, vec3.y + vec31.y, vec3.z + vec31.z); -+ } - } - - public boolean shouldRenderAtSqrDistance(double pDistance) -@@ -76,7 +88,15 @@ - - if (hitresult.getType() != HitResult.Type.MISS && !flag) - { -- this.onHit(hitresult); -+ if (Reflector.ForgeEventFactory_onProjectileImpactT.exists()) -+ { -+ flag = Reflector.callBoolean(Reflector.ForgeEventFactory_onProjectileImpactT, this, hitresult); -+ } -+ -+ if (!flag) -+ { -+ this.onHit(hitresult); -+ } - } - - this.checkInsideBlocks(); diff --git a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/ThrowableProjectileMixin.java b/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/ThrowableProjectileMixin.java index 7c51559e1..61b8e5745 100644 --- a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/ThrowableProjectileMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/ThrowableProjectileMixin.java @@ -1,13 +1,13 @@ package org.vivecraft.mixin.world.entity.projectile; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.api.ClientNetworkHelper; -import org.vivecraft.api.CommonNetworkHelper; -import org.vivecraft.api.ServerVivePlayer; +import org.vivecraft.server.ServerVRPlayers; +import org.vivecraft.server.ServerVivePlayer; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; @@ -20,19 +20,21 @@ @Mixin(ThrowableProjectile.class) public abstract class ThrowableProjectileMixin extends Entity { - protected ThrowableProjectileMixin(EntityType p_37248_, Level p_37249_) { - super(p_37248_, p_37249_); - // TODO Auto-generated constructor stub - } + protected ThrowableProjectileMixin(EntityType p_37248_, Level p_37249_) { + super(p_37248_, p_37249_); + // TODO Auto-generated constructor stub + } + + @Inject(at = @At("TAIL"), method = "(Lnet/minecraft/world/entity/EntityType;Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/level/Level;)V") + public void init(EntityType p_37462_, LivingEntity p_37463_, Level p_37464_, CallbackInfo info) { + if (p_37463_ instanceof ServerPlayer player) { + ServerVivePlayer serverviveplayer = ServerVRPlayers.getVivePlayer(player); + if (serverviveplayer != null && serverviveplayer.isVR()) { + Vec3 vec3 = serverviveplayer.getControllerPos(serverviveplayer.activeHand, (Player) p_37463_); + Vec3 vec31 = serverviveplayer.getControllerDir(serverviveplayer.activeHand).scale((double) 0.6F); + this.setPos(vec3.x + vec31.x, vec3.y + vec31.y, vec3.z + vec31.z); + } + } + } - @Inject(at = @At("TAIL"), method = "(Lnet/minecraft/world/entity/EntityType;Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/level/Level;)V") - public void init(EntityType p_37462_, LivingEntity p_37463_, Level p_37464_, CallbackInfo info) { - ServerVivePlayer serverviveplayer = CommonNetworkHelper.vivePlayers.get(p_37463_.getUUID()); - if (serverviveplayer != null && serverviveplayer.isVR()) { - Vec3 vec3 = serverviveplayer.getControllerPos(serverviveplayer.activeHand, (Player)p_37463_); - Vec3 vec31 = serverviveplayer.getControllerDir(serverviveplayer.activeHand).scale((double)0.6F); - this.setPos(vec3.x + vec31.x, vec3.y + vec31.y, vec3.z + vec31.z); - } - } - } diff --git a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/ThrownTrident.java.patch b/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/ThrownTrident.java.patch deleted file mode 100644 index 1614bba69..000000000 --- a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/ThrownTrident.java.patch +++ /dev/null @@ -1,39 +0,0 @@ ---- a/net/minecraft/world/entity/projectile/ThrownTrident.java -+++ b/net/minecraft/world/entity/projectile/ThrownTrident.java -@@ -22,6 +22,8 @@ - import net.minecraft.world.level.Level; - import net.minecraft.world.phys.EntityHitResult; - import net.minecraft.world.phys.Vec3; -+import org.vivecraft.api.NetworkHelper; -+import org.vivecraft.api.ServerVivePlayer; - - public class ThrownTrident extends AbstractArrow - { -@@ -75,16 +77,24 @@ - else - { - this.setNoPhysics(true); -- Vec3 vec3 = entity.getEyePosition().subtract(this.position()); -- this.setPosRaw(this.getX(), this.getY() + vec3.y * 0.015D * (double)i, this.getZ()); -+ Vec3 vec3 = new Vec3(entity.getX(), entity.getEyeY(), entity.getZ()); -+ ServerVivePlayer serverviveplayer = NetworkHelper.vivePlayers.get(entity.getUUID()); - -+ if (serverviveplayer != null && serverviveplayer.isVR()) -+ { -+ vec3 = serverviveplayer.getControllerPos(0, (Player)entity); -+ } -+ -+ Vec3 vec31 = new Vec3(vec3.x - this.getX(), vec3.y - this.getY(), vec3.z - this.getZ()); -+ this.setPosRaw(this.getX(), this.getY() + vec31.y * 0.015D * (double)i, this.getZ()); -+ - if (this.level.isClientSide) - { - this.yOld = this.getY(); - } - - double d0 = 0.05D * (double)i; -- this.setDeltaMovement(this.getDeltaMovement().scale(0.95D).add(vec3.normalize().scale(d0))); -+ this.setDeltaMovement(this.getDeltaMovement().scale(0.95D).add(vec31.normalize().scale(d0))); - - if (this.clientSideReturnTridentTickCount == 0) - { diff --git a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/ThrownTridentMixin.java b/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/ThrownTridentMixin.java index 6db3b3249..7e5a68880 100644 --- a/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/ThrownTridentMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/world/entity/projectile/ThrownTridentMixin.java @@ -1,11 +1,11 @@ package org.vivecraft.mixin.world.entity.projectile; +import net.minecraft.server.level.ServerPlayer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -import org.vivecraft.api.ClientNetworkHelper; -import org.vivecraft.api.CommonNetworkHelper; -import org.vivecraft.api.ServerVivePlayer; +import org.vivecraft.server.ServerVRPlayers; +import org.vivecraft.server.ServerVivePlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; @@ -15,13 +15,15 @@ @Mixin(ThrownTrident.class) public class ThrownTridentMixin { - @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getEyePosition()Lnet/minecraft/world/phys/Vec3;"), method = "tick()V") - public Vec3 tick(Entity entity) { - Vec3 vec3 = entity.getEyePosition(); - ServerVivePlayer serverviveplayer = CommonNetworkHelper.vivePlayers.get(entity.getUUID()); - if (serverviveplayer != null && serverviveplayer.isVR()) { - vec3 = serverviveplayer.getControllerPos(0, (Player)entity); - } - return vec3; - } + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getEyePosition()Lnet/minecraft/world/phys/Vec3;"), method = "tick()V") + public Vec3 tick(Entity entity) { + Vec3 vec3 = entity.getEyePosition(); + if (entity instanceof ServerPlayer player) { + ServerVivePlayer serverviveplayer = ServerVRPlayers.getVivePlayer(player); + if (serverviveplayer != null && serverviveplayer.isVR()) { + vec3 = serverviveplayer.getControllerPos(0, (Player) entity); + } + } + return vec3; + } } diff --git a/common/src/main/java/org/vivecraft/mixin/world/entity/vehicle/Boat.java.patch b/common/src/main/java/org/vivecraft/mixin/world/entity/vehicle/Boat.java.patch deleted file mode 100644 index 20585015f..000000000 --- a/common/src/main/java/org/vivecraft/mixin/world/entity/vehicle/Boat.java.patch +++ /dev/null @@ -1,165 +0,0 @@ ---- a/net/minecraft/world/entity/vehicle/Boat.java -+++ b/net/minecraft/world/entity/vehicle/Boat.java -@@ -4,6 +4,7 @@ - import java.util.List; - import javax.annotation.Nullable; - import net.minecraft.BlockUtil; -+import net.minecraft.client.Minecraft; - import net.minecraft.core.BlockPos; - import net.minecraft.core.Direction; - import net.minecraft.core.particles.ParticleTypes; -@@ -47,6 +48,7 @@ - import net.minecraft.world.phys.shapes.BooleanOp; - import net.minecraft.world.phys.shapes.Shapes; - import net.minecraft.world.phys.shapes.VoxelShape; -+import net.optifine.reflect.Reflector; - - public class Boat extends Entity - { -@@ -600,7 +602,15 @@ - - if (!(blockstate.getBlock() instanceof WaterlilyBlock) && Shapes.joinIsNotEmpty(blockstate.getCollisionShape(this.level, blockpos$mutableblockpos).move((double)l1, (double)k2, (double)i2), voxelshape, BooleanOp.AND)) - { -- f += blockstate.getBlock().getFriction(); -+ if (Reflector.IForgeBlockState_getSlipperiness.exists()) -+ { -+ f += Reflector.callFloat(blockstate, Reflector.IForgeBlockState_getSlipperiness, this.level, blockpos$mutableblockpos, this); -+ } -+ else -+ { -+ f += blockstate.getBlock().getFriction(); -+ } -+ - ++k1; - } - } -@@ -749,17 +759,22 @@ - if (this.isVehicle()) - { - float f = 0.0F; -+ -+ //Vivecraft analog movement -+ Minecraft minecraft = Minecraft.getInstance(); -+ float f1 = minecraft.player.input.leftImpulse; - - if (this.inputLeft) - { -- --this.deltaRotation; -+ this.deltaRotation -= f1; - } - - if (this.inputRight) - { -- ++this.deltaRotation; -+ this.deltaRotation -= f1; - } -- -+ // -+ - if (this.inputRight != this.inputLeft && !this.inputUp && !this.inputDown) - { - f += 0.005F; -@@ -777,7 +792,84 @@ - f -= 0.005F; - } - -- this.setDeltaMovement(this.getDeltaMovement().add((double)(Mth.sin(-this.getYRot() * ((float)Math.PI / 180F)) * f), 0.0D, (double)(Mth.cos(this.getYRot() * ((float)Math.PI / 180F)) * f))); -+ double mx, mz; -+ -+ if(this.inputUp && !dataholder.vrSettings.seated){ -+ //controller-based -+ float yaw = minecraft.vrPlayer.vrdata_world_pre.getController(1).getYaw(); -+ if(dataholder.vrSettings.vehicleRotation){ -+ //tank controls -+ float end = this.getYRot() % 360; -+ float start = yaw; -+ float difference = Math.abs(end - start); -+ -+ if (difference > 180) -+ if (end > start) -+ start += 360; -+ else -+ end += 360; -+ -+ difference = end - start; -+ -+ f = 0; -+ -+ if (Math.abs(difference) < 30){ -+ f = 0.04f; -+ } -+ else if (Math.abs(difference) > 150) { -+ f = -0.005F; -+ } -+ else if(difference < 0){ -+ this.deltaRotation +=1; -+ f = 0.005f; -+ } else if(difference > 0) { -+ this.deltaRotation -=1; -+ f = 0.005f; -+ } -+ -+ mx = (double)(Math.sin(-this.getYRot()* 0.017453292F) * f); -+ mz = (double)(Math.cos(this.getYRot() * 0.017453292F) * f); -+ } else { -+ //point to move -+ mx = (double)(Math.sin(-yaw* 0.017453292F) * f); -+ mz = (double)(Math.cos(yaw * 0.017453292F) * f); -+ this.setYRot(yaw); -+ } -+ -+ -+ } else { -+ //roomscale or vanilla behavior -+ if(minecraft.rowTracker.isRowing() && !dataholder.vrSettings.seated){ -+ -+ this.deltaRotation += minecraft.rowTracker.LOar / 1.5; -+ this.deltaRotation -= minecraft.rowTracker.ROar / 1.5; -+ /* -+ this.deltaRotation += mc.rowTracker.forces[0] *50; -+ this.deltaRotation -= mc.rowTracker.forces[1] *50; -+ */ -+ -+ if (deltaRotation < 0) this.inputLeft = true; -+ if (deltaRotation > 0) this.inputRight = true; -+ -+ f = 0.06f * minecraft.rowTracker.Foar; -+ if(f > 0) this.inputUp = true; -+ -+ /* -+ f=(float)(mc.rowTracker.forces[0] + mc.rowTracker.forces[1]); -+ if(f > 0.005) this.forwardInputDown = true; -+ */ -+ -+ mx= (double)(Math.sin(-this.getYRot() * 0.017453292F) * f); -+ mz= (double)(Math.cos(this.getYRot() * 0.017453292F) * f); -+ }else{ -+ //default boat (seated mode) -+ mx= (double)(Math.sin(-this.getYRot() * 0.017453292F) * f); -+ mz= (double)(Math.cos(this.getYRot() * 0.017453292F) * f); -+ } -+ } -+ this.setDeltaMovement(this.getDeltaMovement().x + mx, this.getDeltaMovement().y, this.getDeltaMovement().z + mz); -+ // -+ - this.setPaddleState(this.inputRight && !this.inputLeft || this.inputUp, this.inputLeft && !this.inputRight || this.inputUp); - } - } -@@ -1055,6 +1147,17 @@ - return new ItemStack(this.getDropItem()); - } - -+ protected void addPassenger(Entity pPassenger) -+ { -+ super.addPassenger(pPassenger); -+ -+ if (this.isControlledByLocalInstance() && this.lerpSteps > 0) -+ { -+ this.lerpSteps = 0; -+ this.absMoveTo(this.lerpX, this.lerpY, this.lerpZ, (float)this.lerpYRot, (float)this.lerpXRot); -+ } -+ } -+ - public static enum Status - { - IN_WATER, diff --git a/common/src/main/java/org/vivecraft/mixin/world/item/CrossbowItem.java.patch b/common/src/main/java/org/vivecraft/mixin/world/item/CrossbowItem.java.patch deleted file mode 100644 index 54015790a..000000000 --- a/common/src/main/java/org/vivecraft/mixin/world/item/CrossbowItem.java.patch +++ /dev/null @@ -1,37 +0,0 @@ ---- a/net/minecraft/world/item/CrossbowItem.java -+++ b/net/minecraft/world/item/CrossbowItem.java -@@ -31,6 +31,9 @@ - import net.minecraft.world.item.enchantment.Enchantments; - import net.minecraft.world.level.Level; - import net.minecraft.world.phys.Vec3; -+import org.vivecraft.api.NetworkHelper; -+import org.vivecraft.api.ServerVivePlayer; -+import org.vivecraft.utils.math.Vector3; - - public class CrossbowItem extends ProjectileWeaponItem implements Vanishable - { -@@ -270,6 +273,15 @@ - Vec3 vec31 = pShooter.getUpVector(1.0F); - Quaternion quaternion = new Quaternion(new Vector3f(vec31), pProjectileAngle, true); - Vec3 vec3 = pShooter.getViewVector(1.0F); -+ //Vivecraft -+ ServerVivePlayer serverviveplayer = NetworkHelper.vivePlayers.get(pShooter.getUUID()); -+ -+ if (serverviveplayer != null && serverviveplayer.isVR()) -+ { -+ vec3 = serverviveplayer.getControllerDir(serverviveplayer.activeHand); -+ serverviveplayer.getControllerVectorCustom(serverviveplayer.activeHand, new Vector3(0.0F, 1.0F, 0.0F)); -+ } -+ // - Vector3f vector3f = new Vector3f(vec3); - vector3f.transform(quaternion); - projectile.shoot((double)vector3f.x(), (double)vector3f.y(), (double)vector3f.z(), pVelocity, pInaccuracy); -@@ -428,7 +440,7 @@ - } - } - -- private static float getPowerForTime(int pUseTime, ItemStack pCrossbowStack) -+ public static float getPowerForTime(int pUseTime, ItemStack pCrossbowStack) - { - float f = (float)pUseTime / (float)getChargeDuration(pCrossbowStack); - diff --git a/common/src/main/java/org/vivecraft/mixin/world/item/CrossbowItemMixin.java b/common/src/main/java/org/vivecraft/mixin/world/item/CrossbowItemMixin.java index c849233dd..10e8fc9d4 100644 --- a/common/src/main/java/org/vivecraft/mixin/world/item/CrossbowItemMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/world/item/CrossbowItemMixin.java @@ -1,28 +1,31 @@ package org.vivecraft.mixin.world.item; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.vivecraft.api.CommonNetworkHelper; import net.minecraft.world.item.CrossbowItem; import org.spongepowered.asm.mixin.injection.Redirect; -import org.vivecraft.api.ServerVivePlayer; -import org.vivecraft.utils.math.Vector3; +import org.vivecraft.server.ServerVRPlayers; +import org.vivecraft.server.ServerVivePlayer; +import org.vivecraft.common.utils.math.Vector3; @Mixin(CrossbowItem.class) public class CrossbowItemMixin { @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getViewVector(F)Lnet/minecraft/world/phys/Vec3;"), method = "shootProjectile(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/InteractionHand;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemStack;FZFFF)V") - private static Vec3 shoot(LivingEntity LivingEntity, float v) { - Vec3 vec3 = LivingEntity.getViewVector(v); - ServerVivePlayer serverviveplayer = CommonNetworkHelper.vivePlayers.get(LivingEntity.getUUID()); - if (serverviveplayer != null && serverviveplayer.isVR()) { - vec3 = serverviveplayer.getControllerDir(serverviveplayer.activeHand); - serverviveplayer.getControllerVectorCustom(serverviveplayer.activeHand, new Vector3(0.0F, 1.0F, 0.0F)); + private static Vec3 shoot(LivingEntity livingEntity, float v) { + Vec3 vec3 = livingEntity.getViewVector(v); + if (livingEntity instanceof ServerPlayer player) { + ServerVivePlayer serverviveplayer = ServerVRPlayers.getVivePlayer(player); + if (serverviveplayer != null && serverviveplayer.isVR()) { + vec3 = serverviveplayer.getControllerDir(serverviveplayer.activeHand); + serverviveplayer.getControllerVectorCustom(serverviveplayer.activeHand, new Vector3(0.0F, 1.0F, 0.0F)); + } } return vec3; } diff --git a/common/src/main/java/org/vivecraft/mixin/world/item/Item.java.patch b/common/src/main/java/org/vivecraft/mixin/world/item/Item.java.patch deleted file mode 100644 index c4700f16b..000000000 --- a/common/src/main/java/org/vivecraft/mixin/world/item/Item.java.patch +++ /dev/null @@ -1,37 +0,0 @@ ---- a/net/minecraft/world/item/Item.java -+++ b/net/minecraft/world/item/Item.java -@@ -8,6 +8,9 @@ - import java.util.Optional; - import java.util.UUID; - import javax.annotation.Nullable; -+ -+import org.vivecraft.asm.ASMDelegator; -+ - import net.minecraft.SharedConstants; - import net.minecraft.Util; - import net.minecraft.core.BlockPos; -@@ -143,7 +146,7 @@ - { - ItemStack itemstack = pPlayer.getItemInHand(pUsedHand); - -- if (pPlayer.canEat(this.getFoodProperties().canAlwaysEat())) -+ if (pPlayer.canEat(this.getFoodProperties().canAlwaysEat()) || itemstack.getHoverName().getString().equals("EAT ME")) - { - pPlayer.startUsingItem(pUsedHand); - return InteractionResultHolder.consume(itemstack); -@@ -358,6 +361,15 @@ - float f = pPlayer.getXRot(); - float f1 = pPlayer.getYRot(); - Vec3 vec3 = pPlayer.getEyePosition(); -+ -+ // Vivecraft - Identical code to asm for vanilla and so we understand what's going on. -+ // TODO: Actually make the asm work again when we fix Forge -+ f = ASMDelegator.itemRayTracePitch(pPlayer, f); -+ f1 = ASMDelegator.itemRayTraceYaw(pPlayer, f1); -+ vec3 = ASMDelegator.itemRayTracePos(pPlayer, vec3); -+ System.out.println(Thread.currentThread().getName() + " " + vec3.x + " " + vec3.y + " " + vec3.z + " " + f + " " + f1); -+ // -+ - float f2 = Mth.cos(-f1 * ((float)Math.PI / 180F) - (float)Math.PI); - float f3 = Mth.sin(-f1 * ((float)Math.PI / 180F) - (float)Math.PI); - float f4 = -Mth.cos(-f * ((float)Math.PI / 180F)); diff --git a/common/src/main/java/org/vivecraft/mixin/world/item/PotionItem.java.patch b/common/src/main/java/org/vivecraft/mixin/world/item/PotionItem.java.patch deleted file mode 100644 index 925e2adfd..000000000 --- a/common/src/main/java/org/vivecraft/mixin/world/item/PotionItem.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/world/item/PotionItem.java -+++ b/net/minecraft/world/item/PotionItem.java -@@ -3,6 +3,8 @@ - import java.util.List; - import javax.annotation.Nullable; - import net.minecraft.advancements.CriteriaTriggers; -+import net.minecraft.client.Minecraft; -+import net.minecraft.client.player.LocalPlayer; - import net.minecraft.core.NonNullList; - import net.minecraft.core.Registry; - import net.minecraft.network.chat.Component; diff --git a/common/src/main/java/org/vivecraft/mixin/world/item/crafting/RecipeManager.java.patch b/common/src/main/java/org/vivecraft/mixin/world/item/crafting/RecipeManager.java.patch deleted file mode 100644 index 171e322aa..000000000 --- a/common/src/main/java/org/vivecraft/mixin/world/item/crafting/RecipeManager.java.patch +++ /dev/null @@ -1,47 +0,0 @@ ---- a/net/minecraft/world/item/crafting/RecipeManager.java -+++ b/net/minecraft/world/item/crafting/RecipeManager.java -@@ -21,6 +21,7 @@ - import net.minecraft.Util; - import net.minecraft.core.NonNullList; - import net.minecraft.core.Registry; -+import net.minecraft.network.chat.TranslatableComponent; - import net.minecraft.resources.ResourceLocation; - import net.minecraft.server.packs.resources.ResourceManager; - import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener; -@@ -28,7 +29,10 @@ - import net.minecraft.util.profiling.ProfilerFiller; - import net.minecraft.world.Container; - import net.minecraft.world.item.ItemStack; -+import net.minecraft.world.item.Items; - import net.minecraft.world.level.Level; -+import net.minecraft.world.level.block.Blocks; -+import net.optifine.reflect.Reflector; - import org.apache.logging.log4j.LogManager; - import org.apache.logging.log4j.Logger; - -@@ -70,6 +74,25 @@ - } - } - -+ //VIVECRAFT - This prolly cant stay here. Move to .json files someday. -+ ItemStack is = new ItemStack(Items.LEATHER_BOOTS); -+ is.setHoverName(new TranslatableComponent("vivecraft.item.jumpboots")); -+ is.getOrCreateTag().putBoolean("Unbreakable", true); -+ is.getOrCreateTag().putInt("HideFlags",4); -+ -+ ItemStack is2 = new ItemStack(Items.SHEARS); -+ is2.setHoverName(new TranslatableComponent("vivecraft.item.climbclaws")); -+ is2.getOrCreateTag().putBoolean("Unbreakable", true); -+ is2.getOrCreateTag().putInt("HideFlags",4); -+ -+ ShapedRecipe boot = new ShapedRecipe(new ResourceLocation("jumpboots"),"Vivecraft", 1, 2, NonNullList.a(Ingredient.EMPTY,Ingredient.a(Items.LEATHER_BOOTS), Ingredient.a(new ItemStack(Blocks.SLIME_BLOCK))), is); -+ ShapedRecipe claw = new ShapedRecipe(new ResourceLocation("climbclaws"),"Vivecraft", 3, 2, NonNullList.a(Ingredient.EMPTY,Ingredient.a(Items.SPIDER_EYE),Ingredient.EMPTY,Ingredient.a(Items.SPIDER_EYE),Ingredient.a(Items.SHEARS),Ingredient.EMPTY,Ingredient.a(Items.SHEARS)), is2); -+ -+ if (map.containsKey(boot.getType())) { -+ map.get(boot.getType()).put(boot.getId(), boot); -+ map.get(claw.getType()).put(claw.getId(), claw); -+ } -+ - this.recipes = map.entrySet().stream().collect(ImmutableMap.toImmutableMap(Entry::getKey, (p_44033_) -> - { - return p_44033_.getValue().build(); diff --git a/common/src/main/java/org/vivecraft/mixin/world/item/crafting/ShapedRecipeMixin.java b/common/src/main/java/org/vivecraft/mixin/world/item/crafting/ShapedRecipeMixin.java index a4498c5ec..3c2727ceb 100644 --- a/common/src/main/java/org/vivecraft/mixin/world/item/crafting/ShapedRecipeMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/world/item/crafting/ShapedRecipeMixin.java @@ -12,7 +12,6 @@ import net.minecraft.world.item.crafting.ShapedRecipe; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Group; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; diff --git a/common/src/main/java/org/vivecraft/mixin/world/level/material/FluidState.java.patch b/common/src/main/java/org/vivecraft/mixin/world/level/material/FluidState.java.patch deleted file mode 100644 index 72f8bb383..000000000 --- a/common/src/main/java/org/vivecraft/mixin/world/level/material/FluidState.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/world/level/material/FluidState.java -+++ b/net/minecraft/world/level/material/FluidState.java -@@ -18,7 +18,7 @@ - import net.minecraft.world.phys.Vec3; - import net.minecraft.world.phys.shapes.VoxelShape; - --public final class FluidState extends StateHolder -+public class FluidState extends StateHolder - { - public static final Codec CODEC = codec(Registry.FLUID.byNameCodec(), Fluid::defaultFluidState).stable(); - public static final int AMOUNT_MAX = 9; diff --git a/common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisChunkProgramOverridesMixin.java b/common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisChunkProgramOverridesMixin.java deleted file mode 100644 index 85decffc2..000000000 --- a/common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisChunkProgramOverridesMixin.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.vivecraft.modCompatMixin.irisMixin; - -import me.jellysquid.mods.sodium.client.gl.shader.GlProgram; -import me.jellysquid.mods.sodium.client.model.vertex.type.ChunkVertexType; -import net.coderbot.iris.Iris; -import net.coderbot.iris.compat.sodium.impl.shader_overrides.IrisChunkProgramOverrides; -import net.coderbot.iris.compat.sodium.impl.shader_overrides.IrisChunkShaderInterface; -import net.coderbot.iris.compat.sodium.impl.shader_overrides.IrisTerrainPass; -import net.coderbot.iris.pipeline.SodiumTerrainPipeline; -import net.coderbot.iris.pipeline.WorldRenderingPipeline; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.extensions.iris.PipelineManagerExtension; -import org.vivecraft.render.RenderPass; - -import java.util.EnumMap; - -@Mixin(IrisChunkProgramOverrides.class) -public class IrisChunkProgramOverridesMixin { - - private final EnumMap>> pipelinePrograms = new EnumMap<>(RenderPass.class); - @Shadow(remap = false) - private GlProgram createShader(IrisTerrainPass pass, SodiumTerrainPipeline pipeline){ - return null; - } - - @Inject(method = "createShaders", at = @At("HEAD"), remap = false) - public void createAllPipelinesShaders(SodiumTerrainPipeline pipeline, ChunkVertexType vertexType, CallbackInfo ci){ - for (RenderPass renderPass : RenderPass.values()) { - WorldRenderingPipeline worldPipeline = ((PipelineManagerExtension)Iris.getPipelineManager()).getVRPipeline(renderPass); - // GUI and unused renderPasses don't have a pipeline - if (worldPipeline != null) { - SodiumTerrainPipeline sodiumPipeline = worldPipeline.getSodiumTerrainPipeline(); - EnumMap> renderPassShaders = new EnumMap<>(IrisTerrainPass.class); - pipelinePrograms.put(renderPass, renderPassShaders); - if (sodiumPipeline != null) { - sodiumPipeline.patchShaders(vertexType); - for (IrisTerrainPass pass : IrisTerrainPass.values()) { - if (pass.isShadow() && !sodiumPipeline.hasShadowPass()) { - renderPassShaders.put(pass, null); - continue; - } - - renderPassShaders.put(pass, createShader(pass, sodiumPipeline)); - } - } else { - renderPassShaders.clear(); - } - } - } - } - - @Redirect(method = "getProgramOverride", at = @At(value = "INVOKE", target = "Ljava/util/EnumMap;get(Ljava/lang/Object;)Ljava/lang/Object;"), remap = false) - public Object deleteVRPipelineShaders(EnumMap> instance, Object key){ - // return shader of the current RenderPass - return pipelinePrograms.get(ClientDataHolder.getInstance().currentPass).get((IrisTerrainPass)key); - } - - @Inject(method = "deleteShaders", at = @At("HEAD"), remap = false) - public void deleteVRPipelineShaders(CallbackInfo ci){ - for (EnumMap> map : pipelinePrograms.values()) { - for (GlProgram program : map.values()) { - if (program != null) { - program.delete(); - } - } - map.clear(); - } - pipelinePrograms.clear(); - } -} diff --git a/common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisPipelineManagerVRMixin.java b/common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisPipelineManagerVRMixin.java deleted file mode 100644 index c9fb423de..000000000 --- a/common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisPipelineManagerVRMixin.java +++ /dev/null @@ -1,119 +0,0 @@ -package org.vivecraft.modCompatMixin.irisMixin; - -import com.mojang.blaze3d.pipeline.RenderTarget; -import net.coderbot.iris.Iris; -import net.coderbot.iris.pipeline.WorldRenderingPipeline; -import net.coderbot.iris.shaderpack.DimensionId; -import net.coderbot.iris.shadows.ShadowRenderTargets; -import net.minecraft.client.Minecraft; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.extensions.iris.PipelineManagerExtension; -import org.vivecraft.render.RenderPass; - -import java.util.HashMap; -import java.util.Map; -import java.util.function.Function; - -@Pseudo -@Mixin(net.coderbot.iris.pipeline.PipelineManager.class) -public class IrisPipelineManagerVRMixin implements PipelineManagerExtension { - - @Shadow(remap = false) - private void resetTextureState(){} - @Shadow(remap = false) - private WorldRenderingPipeline pipeline; - @Shadow(remap = false) - @Final - private Function pipelineFactory; - - private ShadowRenderTargets shadowRenderTargets; - public ShadowRenderTargets getShadowRenderTargets() { - return shadowRenderTargets; - } - - public void setShadowRenderTargets(ShadowRenderTargets targets) { - shadowRenderTargets = targets; - } - - private final Map vrPipelines = new HashMap<>(); - - @Inject(method = "preparePipeline", at = @At(value = "INVOKE", target = "Ljava/util/Map;put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"), remap = false) - private void generateVRPipelines(DimensionId newDimension, CallbackInfoReturnable cir) { - RenderTarget current = Minecraft.getInstance().mainRenderTarget; - // main pipeline also sets this, but we don't want that, since it is unused - shadowRenderTargets = null; - for (RenderPass renderPass : RenderPass.values()) { - Iris.logger.info("Creating VR pipeline for dimension {}, RenderPass {}", newDimension, renderPass); - switch (renderPass) { - case LEFT: - case RIGHT: - Minecraft.getInstance().mainRenderTarget = ClientDataHolder.getInstance().vrRenderer.framebufferVrRender; - break; - - case CENTER: - Minecraft.getInstance().mainRenderTarget = ClientDataHolder.getInstance().vrRenderer.framebufferUndistorted; - break; - - case THIRD: - Minecraft.getInstance().mainRenderTarget = ClientDataHolder.getInstance().vrRenderer.framebufferMR; - break; - - case SCOPEL: - Minecraft.getInstance().mainRenderTarget = ClientDataHolder.getInstance().vrRenderer.telescopeFramebufferL; - break; - - case SCOPER: - Minecraft.getInstance().mainRenderTarget = ClientDataHolder.getInstance().vrRenderer.telescopeFramebufferR; - break; - - case CAMERA: - Minecraft.getInstance().mainRenderTarget = ClientDataHolder.getInstance().vrRenderer.cameraRenderFramebuffer; - break; - default: - Minecraft.getInstance().mainRenderTarget = null; - } - if (Minecraft.getInstance().mainRenderTarget == null) { - Iris.logger.info("skipped VR pipeline for dimension {}, RenderPass {}, not used", newDimension, renderPass); - continue; - } - pipeline = pipelineFactory.apply(newDimension); - vrPipelines.put(renderPass, pipeline); - } - - Minecraft.getInstance().mainRenderTarget = current; - - if (ClientDataHolder.getInstance().currentPass != null) { - pipeline = vrPipelines.get(ClientDataHolder.getInstance().currentPass); - } else { - pipeline = vrPipelines.get(RenderPass.LEFT); - } - } - @Inject(method = "preparePipeline", at = @At(value = "INVOKE", target = "Ljava/util/Map;get(Ljava/lang/Object;)Ljava/lang/Object;"), remap = false, cancellable = true) - private void returnCurrentVRPipeline(DimensionId newDimension, CallbackInfoReturnable cir) { - pipeline = vrPipelines.get(ClientDataHolder.getInstance().currentPass); - cir.setReturnValue(pipeline); - } - - @Inject(method = "destroyPipeline", at = @At(value = "INVOKE", target = "Ljava/util/Map;clear()V"), remap = false) - private void destroyVRPipelines(CallbackInfo ci) { - vrPipelines.forEach((renderPass, pipeline) -> { - Iris.logger.info("Destroying VR pipeline {}", renderPass); - resetTextureState(); - pipeline.destroy(); - }); - shadowRenderTargets = null; - vrPipelines.clear(); - } - - public WorldRenderingPipeline getVRPipeline(RenderPass pass){ - return vrPipelines.get(pass); - } -} diff --git a/common/src/main/java/org/vivecraft/mod_compat_vr/ShadersHelper.java b/common/src/main/java/org/vivecraft/mod_compat_vr/ShadersHelper.java new file mode 100644 index 000000000..2c284e400 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/ShadersHelper.java @@ -0,0 +1,36 @@ +package org.vivecraft.mod_compat_vr; + +import org.vivecraft.client.Xplat; +import org.vivecraft.mod_compat_vr.iris.IrisHelper; +import org.vivecraft.mod_compat_vr.optifine.OptifineHelper; + +public class ShadersHelper { + + public static int ShaderLight() { + if (isShaderActive()) { + return 8; + } + return 4; + } + + public static boolean isShaderActive() { + boolean irisActive = ((Xplat.isModLoaded("iris") || Xplat.isModLoaded("oculus")) && IrisHelper.isShaderActive()); + boolean optifineActive = OptifineHelper.isOptifineLoaded() && OptifineHelper.isShaderActive(); + + return irisActive || optifineActive; + } + + public static boolean needsSameSizeBuffers() { + return OptifineHelper.isOptifineLoaded() && OptifineHelper.isShaderActive(); + } + + public static boolean hasFixesSizeBuffers() { + return false; + } + + public static void maybeReloadShaders() { + if (Xplat.isModLoaded("iris") || Xplat.isModLoaded("oculus")) { + IrisHelper.reload(); + } + } +} diff --git a/common/src/main/java/org/vivecraft/IrisHelper.java b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/IrisHelper.java similarity index 83% rename from common/src/main/java/org/vivecraft/IrisHelper.java rename to common/src/main/java/org/vivecraft/mod_compat_vr/iris/IrisHelper.java index 1b67f81ab..59cbbf219 100644 --- a/common/src/main/java/org/vivecraft/IrisHelper.java +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/IrisHelper.java @@ -1,19 +1,14 @@ -package org.vivecraft; +package org.vivecraft.mod_compat_vr.iris; import net.coderbot.iris.Iris; import net.coderbot.iris.pipeline.WorldRenderingPipeline; import net.irisshaders.iris.api.v0.IrisApi; +import org.vivecraft.client_xr.render_pass.RenderPassManager; import java.io.IOException; public class IrisHelper { - public static int ShaderLight() { - if (IrisApi.getInstance().isShaderPackInUse()) { - return 8; - } - return 4; - } public static void setShadersActive(boolean bl) { IrisApi.getInstance().getConfig().setShadersEnabledAndApply(bl); @@ -21,6 +16,7 @@ public static void setShadersActive(boolean bl) { public static void reload() { try { + RenderPassManager.setVanillaRenderPass(); Iris.reload(); } catch (IOException e) { System.err.println("Error reloading shaders on Frame Buffer reinit"); diff --git a/common/src/main/java/org/vivecraft/mod_compat_vr/iris/extensions/IrisChunkProgramOverridesExtension.java b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/extensions/IrisChunkProgramOverridesExtension.java new file mode 100644 index 000000000..9098e9197 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/extensions/IrisChunkProgramOverridesExtension.java @@ -0,0 +1,12 @@ +package org.vivecraft.mod_compat_vr.iris.extensions; + +import net.coderbot.iris.pipeline.SodiumTerrainPipeline; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +public interface IrisChunkProgramOverridesExtension { + + void createAllPipelinesShadersSodiumProcessing(SodiumTerrainPipeline sodiumTerrainPipeline, Object chunkVertexType, Method createShaders) throws InvocationTargetException, IllegalAccessException; + +} diff --git a/common/src/main/java/org/vivecraft/extensions/iris/PipelineManagerExtension.java b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/extensions/PipelineManagerExtension.java similarity index 74% rename from common/src/main/java/org/vivecraft/extensions/iris/PipelineManagerExtension.java rename to common/src/main/java/org/vivecraft/mod_compat_vr/iris/extensions/PipelineManagerExtension.java index a8429a12c..1db4dc99d 100644 --- a/common/src/main/java/org/vivecraft/extensions/iris/PipelineManagerExtension.java +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/extensions/PipelineManagerExtension.java @@ -1,8 +1,8 @@ -package org.vivecraft.extensions.iris; +package org.vivecraft.mod_compat_vr.iris.extensions; import net.coderbot.iris.pipeline.WorldRenderingPipeline; import net.coderbot.iris.shadows.ShadowRenderTargets; -import org.vivecraft.render.RenderPass; +import org.vivecraft.client_vr.render.RenderPass; public interface PipelineManagerExtension { @@ -12,4 +12,6 @@ public interface PipelineManagerExtension { // needed for sodium terrain shaders, to get all pipelines, and not just the one from the current pass WorldRenderingPipeline getVRPipeline(RenderPass pass); + WorldRenderingPipeline getVanillaPipeline(); + } diff --git a/common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisBeginFrameHack.java b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisBeginFrameHack.java similarity index 77% rename from common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisBeginFrameHack.java rename to common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisBeginFrameHack.java index 6adc4ad73..6f1170fe1 100644 --- a/common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisBeginFrameHack.java +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisBeginFrameHack.java @@ -1,11 +1,12 @@ -package org.vivecraft.modCompatMixin.irisMixin; +package org.vivecraft.mod_compat_vr.iris.mixin; -import org.vivecraft.ClientDataHolder; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_xr.render_pass.RenderPassType; @Pseudo @Mixin(targets = { @@ -17,7 +18,7 @@ public class IrisBeginFrameHack { // only update the timer on the first RenderPass, so that it counts the time from all RenderPasses @Inject(method = "beginFrame", at = @At("HEAD"), cancellable = true, remap = false) private void cancelShadows(CallbackInfo ci) { - if (!ClientDataHolder.getInstance().isFirstPass) { + if (!RenderPassType.isVanilla() && !ClientDataHolderVR.getInstance().isFirstPass) { ci.cancel(); } } diff --git a/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisChunkProgramOverridesMixin.java b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisChunkProgramOverridesMixin.java new file mode 100644 index 000000000..613b8a432 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisChunkProgramOverridesMixin.java @@ -0,0 +1,95 @@ +package org.vivecraft.mod_compat_vr.iris.mixin; + +import me.jellysquid.mods.sodium.client.gl.shader.GlProgram; +import net.coderbot.iris.Iris; +import net.coderbot.iris.compat.sodium.impl.shader_overrides.IrisChunkProgramOverrides; +import net.coderbot.iris.compat.sodium.impl.shader_overrides.IrisChunkShaderInterface; +import net.coderbot.iris.compat.sodium.impl.shader_overrides.IrisTerrainPass; +import net.coderbot.iris.pipeline.SodiumTerrainPipeline; +import net.coderbot.iris.pipeline.WorldRenderingPipeline; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client_xr.render_pass.RenderPassManager; +import org.vivecraft.client_xr.render_pass.RenderPassType; +import org.vivecraft.client_xr.render_pass.WorldRenderPass; +import org.vivecraft.mod_compat_vr.iris.extensions.IrisChunkProgramOverridesExtension; +import org.vivecraft.mod_compat_vr.iris.extensions.PipelineManagerExtension; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.EnumMap; + +@Pseudo +@Mixin(IrisChunkProgramOverrides.class) +public class IrisChunkProgramOverridesMixin implements IrisChunkProgramOverridesExtension { + + @Shadow(remap = false) + @Final + private EnumMap> programs; + + @Unique + private final EnumMap>> pipelinePrograms = new EnumMap<>(RenderPass.class); + + @Unique + public void createAllPipelinesShadersSodiumProcessing(SodiumTerrainPipeline sodiumTerrainPipeline, Object chunkVertexType, Method createShadersMethod) throws InvocationTargetException, IllegalAccessException { + if (VRState.vrInitialized) { + WorldRenderPass current = RenderPassManager.wrp; + RenderPass currentPass = ClientDataHolderVR.getInstance().currentPass; + + RenderPassManager.renderPassType = RenderPassType.WORLD_ONLY; + for (RenderPass renderPass : RenderPass.values()) { + Iris.logger.info("Creating VR sodium shaders for RenderPass {}", renderPass); + + WorldRenderingPipeline worldPipeline = ((PipelineManagerExtension) Iris.getPipelineManager()).getVRPipeline(renderPass); + // GUI and unused renderPasses don't have a pipeline + if (worldPipeline != null) { + SodiumTerrainPipeline sodiumPipeline = worldPipeline.getSodiumTerrainPipeline(); + EnumMap> renderPassShaders = new EnumMap<>(IrisTerrainPass.class); + pipelinePrograms.put(renderPass, renderPassShaders); + createShadersMethod.invoke(this, sodiumPipeline, chunkVertexType); + // programs should have the shaders for this pass now + renderPassShaders.putAll(programs); + // clear it now, since programs is for the vanilla pass + programs.clear(); + } + } + + RenderPassManager.setVanillaRenderPass(); + Iris.logger.info("Creating sodium shaders for vanilla RenderPass"); + createShadersMethod.invoke(this, ((PipelineManagerExtension) Iris.getPipelineManager()).getVanillaPipeline().getSodiumTerrainPipeline(), chunkVertexType); + if (current != null) { + RenderPassManager.setWorldRenderPass(current); + ClientDataHolderVR.getInstance().currentPass = currentPass; + } + } else { + createShadersMethod.invoke(this, sodiumTerrainPipeline, chunkVertexType); + } + } + + @Redirect(method = "getProgramOverride", at = @At(value = "INVOKE", target = "Ljava/util/EnumMap;get(Ljava/lang/Object;)Ljava/lang/Object;"), remap = false) + public Object getVRPipelineShaders(EnumMap> instance, Object key){ + // return shader of the current RenderPass + return !RenderPassType.isVanilla() ? pipelinePrograms.get(ClientDataHolderVR.getInstance().currentPass).get((IrisTerrainPass)key) : instance.get((IrisTerrainPass)key); + } + + @Inject(method = "deleteShaders", at = @At("HEAD"), remap = false) + public void deleteVRPipelineShaders(CallbackInfo ci){ + if (VRState.vrInitialized) { + for (EnumMap> map : pipelinePrograms.values()) { + for (GlProgram program : map.values()) { + if (program != null) { + program.delete(); + } + } + map.clear(); + } + pipelinePrograms.clear(); + } + } +} diff --git a/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisChunkProgramOverridesMixinSodium_0_4_11.java b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisChunkProgramOverridesMixinSodium_0_4_11.java new file mode 100644 index 000000000..aabb316c9 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisChunkProgramOverridesMixinSodium_0_4_11.java @@ -0,0 +1,33 @@ +package org.vivecraft.mod_compat_vr.iris.mixin; + +import me.jellysquid.mods.sodium.client.render.chunk.vertex.format.ChunkVertexType; +import net.coderbot.iris.compat.sodium.impl.shader_overrides.IrisChunkProgramOverrides; +import net.coderbot.iris.pipeline.SodiumTerrainPipeline; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Group; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.vivecraft.mod_compat_vr.iris.extensions.IrisChunkProgramOverridesExtension; + +import java.lang.reflect.InvocationTargetException; + +@Pseudo +@Mixin(IrisChunkProgramOverrides.class) +public class IrisChunkProgramOverridesMixinSodium_0_4_11 { + + @Group(name = "create sodium shaders", min = 1, max = 1) + @Redirect(at = @At(value = "INVOKE", target = "Lnet/coderbot/iris/compat/sodium/impl/shader_overrides/IrisChunkProgramOverrides;createShaders(Lnet/coderbot/iris/pipeline/SodiumTerrainPipeline;Lme/jellysquid/mods/sodium/client/render/chunk/vertex/format/ChunkVertexType;)V"), method = "getProgramOverride", remap = false, expect = 0) + public void createAllPipelinesShadersSodium_0_4_11(IrisChunkProgramOverrides instance, SodiumTerrainPipeline sodiumTerrainPipeline, ChunkVertexType chunkVertexType) { + try { + ((IrisChunkProgramOverridesExtension) this).createAllPipelinesShadersSodiumProcessing( + sodiumTerrainPipeline, + chunkVertexType, + instance.getClass().getMethod("createShaders", SodiumTerrainPipeline.class, ChunkVertexType.class) + ); + } catch (InvocationTargetException | IllegalAccessException | NoSuchMethodException e) { + // this shouldn't happen if everything went well + throw new RuntimeException(e); + } + } +} diff --git a/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisChunkProgramOverridesMixinSodium_0_4_8.java b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisChunkProgramOverridesMixinSodium_0_4_8.java new file mode 100644 index 000000000..7845f3805 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisChunkProgramOverridesMixinSodium_0_4_8.java @@ -0,0 +1,31 @@ +package org.vivecraft.mod_compat_vr.iris.mixin; + +import me.jellysquid.mods.sodium.client.model.vertex.type.ChunkVertexType; +import net.coderbot.iris.compat.sodium.impl.shader_overrides.IrisChunkProgramOverrides; +import net.coderbot.iris.pipeline.SodiumTerrainPipeline; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Group; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.vivecraft.mod_compat_vr.iris.extensions.IrisChunkProgramOverridesExtension; + +import java.lang.reflect.InvocationTargetException; + +@Mixin(IrisChunkProgramOverrides.class) +public class IrisChunkProgramOverridesMixinSodium_0_4_8 { + + @Group(name = "create sodium shaders", min = 1, max = 1) + @Redirect(at = @At(value = "INVOKE", target = "Lnet/coderbot/iris/compat/sodium/impl/shader_overrides/IrisChunkProgramOverrides;createShaders(Lnet/coderbot/iris/pipeline/SodiumTerrainPipeline;Lme/jellysquid/mods/sodium/client/model/vertex/type/ChunkVertexType;)V"), method = "getProgramOverride", remap = false, expect = 0) + public void createAllPipelinesShadersSodium_0_4_9(IrisChunkProgramOverrides instance, SodiumTerrainPipeline sodiumTerrainPipeline, ChunkVertexType chunkVertexType) { + try { + ((IrisChunkProgramOverridesExtension) this).createAllPipelinesShadersSodiumProcessing( + sodiumTerrainPipeline, + chunkVertexType, + instance.getClass().getMethod("createShaders", SodiumTerrainPipeline.class, ChunkVertexType.class) + ); + } catch (InvocationTargetException | IllegalAccessException | NoSuchMethodException e) { + // this shouldn't happen if everything went well + throw new RuntimeException(e); + } + } +} diff --git a/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisChunkProgramOverridesMixinSodium_0_4_9.java b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisChunkProgramOverridesMixinSodium_0_4_9.java new file mode 100644 index 000000000..a0d645696 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisChunkProgramOverridesMixinSodium_0_4_9.java @@ -0,0 +1,33 @@ +package org.vivecraft.mod_compat_vr.iris.mixin; + +import me.jellysquid.mods.sodium.client.render.vertex.type.ChunkVertexType; +import net.coderbot.iris.compat.sodium.impl.shader_overrides.IrisChunkProgramOverrides; +import net.coderbot.iris.pipeline.SodiumTerrainPipeline; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Group; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.vivecraft.mod_compat_vr.iris.extensions.IrisChunkProgramOverridesExtension; + +import java.lang.reflect.InvocationTargetException; + +@Pseudo +@Mixin(IrisChunkProgramOverrides.class) +public class IrisChunkProgramOverridesMixinSodium_0_4_9 { + + @Group(name = "create sodium shaders", min = 1, max = 1) + @Redirect(at = @At(value = "INVOKE", target = "Lnet/coderbot/iris/compat/sodium/impl/shader_overrides/IrisChunkProgramOverrides;createShaders(Lnet/coderbot/iris/pipeline/SodiumTerrainPipeline;Lme/jellysquid/mods/sodium/client/render/vertex/type/ChunkVertexType;)V"), method = "getProgramOverride", remap = false, expect = 0) + public void createAllPipelinesShadersSodium_0_4_9(IrisChunkProgramOverrides instance, SodiumTerrainPipeline sodiumTerrainPipeline, ChunkVertexType chunkVertexType) { + try { + ((IrisChunkProgramOverridesExtension) this).createAllPipelinesShadersSodiumProcessing( + sodiumTerrainPipeline, + chunkVertexType, + instance.getClass().getMethod("createShaders", SodiumTerrainPipeline.class, ChunkVertexType.class) + ); + } catch (InvocationTargetException | IllegalAccessException | NoSuchMethodException e) { + // this shouldn't happen if everything went well + throw new RuntimeException(e); + } + } +} diff --git a/common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisHandRendererVRMixin.java b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisHandRendererVRMixin.java similarity index 78% rename from common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisHandRendererVRMixin.java rename to common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisHandRendererVRMixin.java index 0094f386c..6723cbfe8 100644 --- a/common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisHandRendererVRMixin.java +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisHandRendererVRMixin.java @@ -1,4 +1,4 @@ -package org.vivecraft.modCompatMixin.irisMixin; +package org.vivecraft.mod_compat_vr.iris.mixin; import com.mojang.blaze3d.vertex.PoseStack; import net.coderbot.iris.pipeline.HandRenderer; @@ -10,6 +10,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.client_xr.render_pass.RenderPassType; //TODO Move rendering to here @Pseudo @@ -18,16 +19,22 @@ public class IrisHandRendererVRMixin { @Inject(at = @At("HEAD"), method = "setupGlState", cancellable = true) public void glState(GameRenderer par1, Camera par2, PoseStack par3, float par4, CallbackInfo ci) { - ci.cancel(); + if (!RenderPassType.isVanilla()) { + ci.cancel(); + } } @Inject(at = @At("HEAD"), method = "renderSolid", cancellable = true) public void rendersolid(PoseStack par1, float par2, Camera par3, GameRenderer par4, WorldRenderingPipeline par5, CallbackInfo ci) { - ci.cancel(); + if (!RenderPassType.isVanilla()) { + ci.cancel(); + } } @Inject(at = @At("HEAD"), method = "renderTranslucent", cancellable = true) public void rendertranslucent(PoseStack par1, float par2, Camera par3, GameRenderer par4, WorldRenderingPipeline par5, CallbackInfo ci) { - ci.cancel(); + if (!RenderPassType.isVanilla()) { + ci.cancel(); + } } } diff --git a/common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisNewWorldRenderingPipelineVRMixin.java b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisNewWorldRenderingPipelineVRMixin.java similarity index 64% rename from common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisNewWorldRenderingPipelineVRMixin.java rename to common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisNewWorldRenderingPipelineVRMixin.java index cc9b2f041..a80bc5007 100644 --- a/common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisNewWorldRenderingPipelineVRMixin.java +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisNewWorldRenderingPipelineVRMixin.java @@ -1,19 +1,20 @@ -package org.vivecraft.modCompatMixin.irisMixin; +package org.vivecraft.mod_compat_vr.iris.mixin; import net.coderbot.iris.Iris; import net.coderbot.iris.pipeline.ShadowRenderer; +import net.coderbot.iris.pipeline.newshader.NewWorldRenderingPipeline; import net.coderbot.iris.shaderpack.PackShadowDirectives; import net.coderbot.iris.shaderpack.ProgramSet; import net.coderbot.iris.shadows.ShadowRenderTargets; import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.*; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import net.coderbot.iris.pipeline.newshader.NewWorldRenderingPipeline; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.extensions.iris.PipelineManagerExtension; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.vivecraft.client_xr.render_pass.RenderPassType; +import org.vivecraft.mod_compat_vr.iris.extensions.PipelineManagerExtension; import java.util.Objects; @@ -39,21 +40,29 @@ private void storeShadowTargets(ProgramSet par1, CallbackInfo ci) { @Group(name = "one shadowRenderTargets", min = 1, max = 1) @Inject(target = @Desc(value = "lambda$new$1", owner = NewWorldRenderingPipeline.class, ret = ShadowRenderTargets.class, args = PackShadowDirectives.class), at = @At("HEAD"), cancellable = true, remap = false, expect = 0) private void onlyOneShadowTargetSupplier131(CallbackInfoReturnable cir) { - if (((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets() != null) { + if (!RenderPassType.isVanilla() && ((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets() != null) { cir.setReturnValue(((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets()); } } @Group(name = "one shadowRenderTargets", min = 1, max = 1) @Inject(target = @Desc(value = "lambda$new$0", owner = NewWorldRenderingPipeline.class, ret = ShadowRenderTargets.class, args = PackShadowDirectives.class), at = @At("HEAD"), cancellable = true, remap = false, expect = 0) private void onlyOneShadowTargetSupplier140(CallbackInfoReturnable cir) { - if (((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets() != null) { + if (!RenderPassType.isVanilla() && ((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets() != null) { cir.setReturnValue(((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets()); } } @Group(name = "one shadowRenderTargets", min = 1, max = 1) @Inject(target = @Desc(value = "lambda$new$3", owner = NewWorldRenderingPipeline.class, ret = ShadowRenderTargets.class, args = PackShadowDirectives.class), at = @At("HEAD"), cancellable = true, remap = false, expect = 0) private void onlyOneShadowTargetSupplier150(CallbackInfoReturnable cir) { - if (((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets() != null) { + if (!RenderPassType.isVanilla() && ((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets() != null) { + cir.setReturnValue(((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets()); + } + } + + @Group(name = "one shadowRenderTargets", min = 1, max = 1) + @Inject(target = @Desc(value = "lambda$new$4", owner = NewWorldRenderingPipeline.class, ret = ShadowRenderTargets.class, args = PackShadowDirectives.class), at = @At("HEAD"), cancellable = true, remap = false, expect = 0) + private void onlyOneShadowTargetSupplier160(CallbackInfoReturnable cir) { + if (!RenderPassType.isVanilla() && ((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets() != null) { cir.setReturnValue(((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets()); } } @@ -62,14 +71,14 @@ private void onlyOneShadowTargetSupplier150(CallbackInfoReturnable cir) { - if (((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets() != null) { + if (!RenderPassType.isVanilla() && ((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets() != null) { cir.setReturnValue(((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets()); } } @Inject(method = "shouldDisableVanillaEntityShadows()Z", at = @At("HEAD"), cancellable = true, remap = false) private void shouldDisableEntityShadows(CallbackInfoReturnable cir) { - if (shadowRenderer != null || ((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets() != null) { + if (!RenderPassType.isVanilla() && (shadowRenderer != null || ((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets() != null)) { cir.setReturnValue(true); } } @@ -81,8 +90,12 @@ private void shouldDisableEntityShadows(CallbackInfoReturnable cir) { @Group(name = "reroute shadowRenderTargets", min = 6, max = 6) @Redirect(method = "addGbufferOrShadowSamplers", at = @At(value = "INVOKE", target = "Ljava/util/Objects;requireNonNull(Ljava/lang/Object;)Ljava/lang/Object;"), remap = false, expect = 0, slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/coderbot/iris/samplers/IrisSamplers;hasShadowSamplers(Lnet/coderbot/iris/gl/sampler/SamplerHolder;)Z"))) private Object rerouteShadowTarget(Object obj) { - ShadowRenderTargets targets = ((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets(); - return Objects.requireNonNull(targets != null ? targets : obj); + if (!RenderPassType.isVanilla()) { + ShadowRenderTargets targets = ((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets(); + return Objects.requireNonNull(targets != null ? targets : obj); + } else { + return Objects.requireNonNull(obj); + } } // iris 1.3.1 and before @@ -94,8 +107,12 @@ private Object rerouteShadowTarget(Object obj) { @Desc(value = "lambda$new$8", owner = NewWorldRenderingPipeline.class, ret = net.coderbot.iris.gl.program.ProgramImages.class, args = int.class) }, at = @At(value = "INVOKE", target = "Ljava/util/Objects;requireNonNull(Ljava/lang/Object;)Ljava/lang/Object;"), remap = false, expect = 0) private Object rerouteShadowTarget131(Object obj) { - ShadowRenderTargets targets = ((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets(); - return Objects.requireNonNull(targets != null ? targets : obj); + if (!RenderPassType.isVanilla()) { + ShadowRenderTargets targets = ((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets(); + return Objects.requireNonNull(targets != null ? targets : obj); + } else { + return Objects.requireNonNull(obj); + } } // iris 1.4.0+ @@ -107,8 +124,12 @@ private Object rerouteShadowTarget131(Object obj) { @Desc(value = "lambda$new$7", owner = NewWorldRenderingPipeline.class, ret = net.coderbot.iris.gl.program.ProgramImages.class, args = int.class) }, at = @At(value = "INVOKE", target = "Ljava/util/Objects;requireNonNull(Ljava/lang/Object;)Ljava/lang/Object;"), remap = false, expect = 0) private Object rerouteShadowTarget140(Object obj) { - ShadowRenderTargets targets = ((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets(); - return Objects.requireNonNull(targets != null ? targets : obj); + if (!RenderPassType.isVanilla()) { + ShadowRenderTargets targets = ((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets(); + return Objects.requireNonNull(targets != null ? targets : obj); + } else { + return Objects.requireNonNull(obj); + } } // iris 1.5.0+ @@ -120,8 +141,29 @@ private Object rerouteShadowTarget140(Object obj) { @Desc(value = "lambda$new$10", owner = NewWorldRenderingPipeline.class, ret = net.coderbot.iris.gl.program.ProgramImages.class, args = int.class) }, at = @At(value = "INVOKE", target = "Ljava/util/Objects;requireNonNull(Ljava/lang/Object;)Ljava/lang/Object;"), remap = false, expect = 0) private Object rerouteShadowTarget150(Object obj) { - ShadowRenderTargets targets = ((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets(); - return Objects.requireNonNull(targets != null ? targets : obj); + if (!RenderPassType.isVanilla()) { + ShadowRenderTargets targets = ((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets(); + return Objects.requireNonNull(targets != null ? targets : obj); + } else { + return Objects.requireNonNull(obj); + } + } + + // iris 1.6.0+ + @Group(name = "reroute shadowRenderTargets", min = 6, max = 6) + @Redirect(target = { + @Desc(value = "lambda$new$6", owner = NewWorldRenderingPipeline.class, ret = net.coderbot.iris.gl.program.ProgramSamplers.class, args = {java.util.function.Supplier.class, int.class}), + @Desc(value = "lambda$new$7", owner = NewWorldRenderingPipeline.class, ret = net.coderbot.iris.gl.program.ProgramImages.class, args = {java.util.function.Supplier.class, int.class}), + @Desc(value = "lambda$new$9", owner = NewWorldRenderingPipeline.class, ret = net.coderbot.iris.gl.program.ProgramSamplers.class, args = int.class), + @Desc(value = "lambda$new$11", owner = NewWorldRenderingPipeline.class, ret = net.coderbot.iris.gl.program.ProgramImages.class, args = int.class) + }, at = @At(value = "INVOKE", target = "Ljava/util/Objects;requireNonNull(Ljava/lang/Object;)Ljava/lang/Object;"), remap = false, expect = 0) + private Object rerouteShadowTarget160(Object obj) { + if (!RenderPassType.isVanilla()) { + ShadowRenderTargets targets = ((PipelineManagerExtension) Iris.getPipelineManager()).getShadowRenderTargets(); + return Objects.requireNonNull(targets != null ? targets : obj); + } else { + return Objects.requireNonNull(obj); + } } } diff --git a/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisPipelineManagerVRMixin.java b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisPipelineManagerVRMixin.java new file mode 100644 index 000000000..873fd10ff --- /dev/null +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisPipelineManagerVRMixin.java @@ -0,0 +1,180 @@ +package org.vivecraft.mod_compat_vr.iris.mixin; + +import net.coderbot.iris.Iris; +import net.coderbot.iris.pipeline.PipelineManager; +import net.coderbot.iris.pipeline.WorldRenderingPipeline; +import net.coderbot.iris.shaderpack.DimensionId; +import net.coderbot.iris.shaderpack.materialmap.NamespacedId; +import net.coderbot.iris.shadows.ShadowRenderTargets; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Desc; +import org.spongepowered.asm.mixin.injection.Group; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client_xr.render_pass.RenderPassManager; +import org.vivecraft.client_xr.render_pass.RenderPassType; +import org.vivecraft.client_xr.render_pass.WorldRenderPass; +import org.vivecraft.mod_compat_vr.iris.extensions.PipelineManagerExtension; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +@Pseudo +@Mixin(net.coderbot.iris.pipeline.PipelineManager.class) +public class IrisPipelineManagerVRMixin implements PipelineManagerExtension { + + @Shadow(remap = false) + private void resetTextureState(){} + @Shadow(remap = false) + private WorldRenderingPipeline pipeline; + @Shadow(remap = false) + @Final + private Function pipelineFactory; + + private ShadowRenderTargets shadowRenderTargets; + public ShadowRenderTargets getShadowRenderTargets() { + return shadowRenderTargets; + } + + public void setShadowRenderTargets(ShadowRenderTargets targets) { + shadowRenderTargets = targets; + } + + private final Map> vrPipelinesPerDimension = new HashMap<>(); + private WorldRenderingPipeline vanillaPipeline; + private Map vrPipelinesCurrentDimension; + + private WorldRenderPass currentWorldRenderPass = null; + @Inject(method = "preparePipeline", at = @At(value = "INVOKE", target = "Ljava/util/function/Function;apply(Ljava/lang/Object;)Ljava/lang/Object;", shift = At.Shift.BEFORE), remap = false) + private void generateVanillaPipeline(CallbackInfoReturnable cir) { + // this also runs on game startup, when the renderpassManager isn't initialized yet + if (VRState.vrInitialized && RenderPassManager.INSTANCE != null) { + currentWorldRenderPass = RenderPassManager.wrp; + RenderPass currentRenderPass = ClientDataHolderVR.getInstance().currentPass; + RenderPassManager.setVanillaRenderPass(); + ClientDataHolderVR.getInstance().currentPass = currentRenderPass; + } + } + + @Group(name = "generateVRPipelines", min = 1, max = 1) + @Inject(target = @Desc(value = "preparePipeline", owner = PipelineManager.class, ret = WorldRenderingPipeline.class, args = DimensionId.class), at = @At(value = "INVOKE", target = "Ljava/util/Map;put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", shift = At.Shift.AFTER), remap = false, expect = 0) + private void generateVRPipelines164(DimensionId newDimension, CallbackInfoReturnable cir) { + generateVRPipelines(newDimension); + } + + @Group(name = "generateVRPipelines", min = 1, max = 1) + @Inject(target = @Desc(value = "preparePipeline", owner = PipelineManager.class, ret = WorldRenderingPipeline.class, args = NamespacedId.class), at = @At(value = "INVOKE", target = "Ljava/util/Map;put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", shift = At.Shift.AFTER), remap = false, expect = 0) + private void generateVRPipelines165(NamespacedId newDimension, CallbackInfoReturnable cir) { + generateVRPipelines(newDimension); + } + + @Unique + private void generateVRPipelines(Object newDimension) { + if (VRState.vrInitialized) { + vanillaPipeline = pipeline; + if (!this.vrPipelinesPerDimension.containsKey(newDimension)) { + vrPipelinesPerDimension.put(newDimension, new HashMap<>()); + vrPipelinesCurrentDimension = vrPipelinesPerDimension.get(newDimension); + // main pipeline also sets this, but we don't want that, since it is unused + shadowRenderTargets = null; + + for (RenderPass renderPass : RenderPass.values()) { + Iris.logger.info("Creating VR pipeline for dimension {}, RenderPass {}", newDimension, renderPass); + WorldRenderPass worldRenderPass = null; + switch (renderPass) { + case LEFT, RIGHT -> worldRenderPass = WorldRenderPass.stereoXR; + case CENTER -> worldRenderPass = WorldRenderPass.center; + case THIRD -> worldRenderPass = WorldRenderPass.mixedReality; + case SCOPEL -> worldRenderPass = WorldRenderPass.leftTelescope; + case SCOPER -> worldRenderPass = WorldRenderPass.rightTelescope; + case CAMERA -> worldRenderPass = WorldRenderPass.camera; + default -> { + Iris.logger.info("skipped VR pipeline for dimension {}, RenderPass {}, not used", newDimension, renderPass); + continue; + } + } + + if (worldRenderPass != null) { + RenderPassManager.setWorldRenderPass(worldRenderPass); + } else { + continue; + } + + WorldRenderingPipeline pipe = pipelineFactory.apply(newDimension); + vrPipelinesPerDimension.get(newDimension).put(renderPass, pipe); + } + // set to currently needed renderpass again + if (currentWorldRenderPass != null) { + RenderPassManager.setWorldRenderPass(currentWorldRenderPass); + } else if (ClientDataHolderVR.getInstance().currentPass == RenderPass.GUI) { + RenderPassManager.setGUIRenderPass(); + } else { + RenderPassManager.setVanillaRenderPass(); + } + } + vrPipelinesCurrentDimension = vrPipelinesPerDimension.get(newDimension); + + if (!RenderPassType.isVanilla()) { + if (ClientDataHolderVR.getInstance().currentPass != null) { + pipeline = vrPipelinesCurrentDimension.get(ClientDataHolderVR.getInstance().currentPass); + } else { + pipeline = vrPipelinesCurrentDimension.get(RenderPass.LEFT); + } + } + } + } + + @Group(name = "returnCurrentVRPipeline", min = 1, max = 1) + @Inject(target = @Desc(value = "preparePipeline", owner = PipelineManager.class, ret = WorldRenderingPipeline.class, args = DimensionId.class), at = @At(value = "INVOKE", target = "Ljava/util/Map;get(Ljava/lang/Object;)Ljava/lang/Object;"), remap = false, cancellable = true, expect = 0) + private void returnCurrentVRPipeline164(DimensionId newDimension, CallbackInfoReturnable cir) { + if (!RenderPassType.isVanilla()) { + pipeline = getCurrentVRPipeline(newDimension); + cir.setReturnValue(pipeline); + } + } + + @Group(name = "returnCurrentVRPipeline", min = 1, max = 1) + @Inject(target = @Desc(value = "preparePipeline", owner = PipelineManager.class, ret = WorldRenderingPipeline.class, args = NamespacedId.class), at = @At(value = "INVOKE", target = "Ljava/util/Map;get(Ljava/lang/Object;)Ljava/lang/Object;"), remap = false, cancellable = true, expect = 0) + private void returnCurrentVRPipeline165(NamespacedId newDimension, CallbackInfoReturnable cir) { + if (!RenderPassType.isVanilla()) { + pipeline = getCurrentVRPipeline(newDimension); + cir.setReturnValue(pipeline); + } + } + + @Unique + private WorldRenderingPipeline getCurrentVRPipeline(Object key) { + return vrPipelinesPerDimension.get(key).get(ClientDataHolderVR.getInstance().currentPass); + } + + @Inject(method = "destroyPipeline", at = @At(value = "INVOKE", target = "Ljava/util/Map;clear()V"), remap = false) + private void destroyVRPipelines(CallbackInfo ci) { + if (VRState.vrInitialized) { + vrPipelinesPerDimension.forEach((dimID, map) -> { + map.forEach((renderPass, pipeline) -> { + Iris.logger.info("Destroying VR pipeline {}", renderPass); + resetTextureState(); + pipeline.destroy(); + }); + map.clear(); + }); + shadowRenderTargets = null; + vrPipelinesPerDimension.clear(); + vanillaPipeline = null; + } + } + + public WorldRenderingPipeline getVRPipeline(RenderPass pass){ + return vrPipelinesCurrentDimension.get(pass); + } + + public WorldRenderingPipeline getVanillaPipeline(){ + return vanillaPipeline; + } +} diff --git a/common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisProgramUniformsMixin.java b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisProgramUniformsMixin.java similarity index 57% rename from common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisProgramUniformsMixin.java rename to common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisProgramUniformsMixin.java index 6aa4d6cfe..1c7172165 100644 --- a/common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisProgramUniformsMixin.java +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisProgramUniformsMixin.java @@ -1,4 +1,4 @@ -package org.vivecraft.modCompatMixin.irisMixin; +package org.vivecraft.mod_compat_vr.iris.mixin; import net.coderbot.iris.gl.program.ProgramUniforms; import org.spongepowered.asm.mixin.Mixin; @@ -6,8 +6,9 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.render.RenderPass; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client_xr.render_pass.RenderPassType; @Pseudo @Mixin(ProgramUniforms.class) @@ -22,17 +23,24 @@ public class IrisProgramUniformsMixin { // modify the frame counter on RenderPasChange, so perFrame Uniforms are recalculated @ModifyVariable(method = "update", at = @At(value = "STORE"), remap = false) private int checkNewFrame(int currentFrame) { - actualFrame = currentFrame; - if (lastFrame == currentFrame && lastPass != ClientDataHolder.getInstance().currentPass) { - currentFrame--; + if (!RenderPassType.isVanilla()) { + actualFrame = currentFrame; + if (lastFrame == currentFrame && lastPass != ClientDataHolderVR.getInstance().currentPass) { + currentFrame--; + } + lastPass = ClientDataHolderVR.getInstance().currentPass; } - lastPass = ClientDataHolder.getInstance().currentPass; return currentFrame; } // restore actual frame counter, so stuff doesn't get messed up @ModifyVariable(method = "update", at = @At(value = "LOAD", ordinal = 1), remap = false) private int restoreFrame(int currentFrame) { - return actualFrame; + if (!RenderPassType.isVanilla()){ + return actualFrame; + }else { + return currentFrame; + } + //return !RenderPassType.isVanilla() ? actualFrame : currentFrame; } } diff --git a/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisRenderSystemVRMixin.java b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisRenderSystemVRMixin.java new file mode 100644 index 000000000..251f44f9b --- /dev/null +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisRenderSystemVRMixin.java @@ -0,0 +1,23 @@ +package org.vivecraft.mod_compat_vr.iris.mixin; + +import net.coderbot.iris.gl.IrisRenderSystem; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.vivecraft.client_xr.render_pass.RenderPassType; + +@Pseudo +@Mixin(IrisRenderSystem.class) +public class IrisRenderSystemVRMixin { + // expect 0 since this is only for iris 1.6+ + // disable SSBOS since I didn't get to find a good way to share them between passes yet + @Inject(at = @At("HEAD"), method = "supportsSSBO", remap = false, cancellable = true, expect = 0) + private static void noSSBOInVR(CallbackInfoReturnable cir) { + if (!RenderPassType.isVanilla()) { + cir.setReturnValue(false); + } + } + +} diff --git a/common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisShadowMatricesMixin.java b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisShadowMatricesMixin.java similarity index 66% rename from common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisShadowMatricesMixin.java rename to common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisShadowMatricesMixin.java index f206a5741..ce960e4fc 100644 --- a/common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisShadowMatricesMixin.java +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisShadowMatricesMixin.java @@ -1,4 +1,4 @@ -package org.vivecraft.modCompatMixin.irisMixin; +package org.vivecraft.mod_compat_vr.iris.mixin; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Matrix4f; @@ -7,8 +7,9 @@ import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.render.RenderPass; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client_xr.render_pass.RenderPassType; @Pseudo @Mixin(targets = {"net.coderbot.iris.shadow.ShadowMatrices", "net.coderbot.iris.shadows.ShadowMatrices"}) @@ -36,18 +37,30 @@ private static void cacheInterval143(PoseStack target, float shadowIntervalSize, // offset camera pos, to be in the equal grid as left eye, but with correct offset @ModifyVariable( method = "snapModelViewToGrid", at = @At(value = "STORE"), ordinal = 1, remap = false) private static float modifyOffsetX(float original){ - currentPass = ClientDataHolder.getInstance().vrPlayer.getVRDataWorld().getEye(ClientDataHolder.getInstance().currentPass).getPosition(); - if (ClientDataHolder.getInstance().currentPass == RenderPass.LEFT) { - leftPass = currentPass; + if (!RenderPassType.isVanilla()) { + currentPass = ClientDataHolderVR.getInstance().vrPlayer.getVRDataWorld().getEye(ClientDataHolderVR.getInstance().currentPass).getPosition(); + if (ClientDataHolderVR.getInstance().currentPass == RenderPass.LEFT) { + leftPass = currentPass; + } + return (float) (leftPass.x % cachedShadowIntervalSize - (leftPass.x - currentPass.x)); + } else { + return original; } - return (float) (leftPass.x % cachedShadowIntervalSize - (leftPass.x - currentPass.x)); } @ModifyVariable( method = "snapModelViewToGrid", at = @At(value = "STORE"), ordinal = 2, remap = false) private static float modifyOffsetY(float original){ - return (float) (leftPass.y % cachedShadowIntervalSize - (leftPass.y - currentPass.y)); + if (!RenderPassType.isVanilla()) { + return (float) (leftPass.y % cachedShadowIntervalSize - (leftPass.y - currentPass.y)); + } else { + return original; + } } @ModifyVariable( method = "snapModelViewToGrid", at = @At(value = "STORE"), ordinal = 3, remap = false) private static float modifyOffsetZ(float original){ - return (float) (leftPass.z % cachedShadowIntervalSize - (leftPass.z - currentPass.z)); + if (!RenderPassType.isVanilla()) { + return (float) (leftPass.z % cachedShadowIntervalSize - (leftPass.z - currentPass.z)); + } else { + return original; + } } } diff --git a/common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisShadowRendererMixin.java b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisShadowRendererMixin.java similarity index 70% rename from common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisShadowRendererMixin.java rename to common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisShadowRendererMixin.java index c03c294cf..b5aa90b5a 100644 --- a/common/src/main/java/org/vivecraft/modCompatMixin/irisMixin/IrisShadowRendererMixin.java +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisShadowRendererMixin.java @@ -1,13 +1,9 @@ -package org.vivecraft.modCompatMixin.irisMixin; +package org.vivecraft.mod_compat_vr.iris.mixin; -import net.minecraft.client.Camera; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.extensions.GameRendererExtension; import com.mojang.blaze3d.vertex.PoseStack; import net.coderbot.iris.mixin.LevelRendererAccessor; import net.coderbot.iris.pipeline.ShadowRenderer; +import net.minecraft.client.Camera; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.culling.Frustum; @@ -15,36 +11,49 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.extensions.GameRendererExtension; +import org.vivecraft.client_xr.render_pass.RenderPassType; @Pseudo @Mixin(ShadowRenderer.class) public class IrisShadowRendererMixin { @Inject(method = "renderPlayerEntity", at = @At(value = "INVOKE", target = "Lnet/coderbot/iris/mixin/LevelRendererAccessor;invokeRenderEntity(Lnet/minecraft/world/entity/Entity;DDDFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;)V", ordinal = 2)) private void setRVE(LevelRendererAccessor par1, EntityRenderDispatcher par2, MultiBufferSource.BufferSource par3, PoseStack par4, float par5, Frustum par6, double par7, double par8, double par9, CallbackInfoReturnable cir) { - ((GameRendererExtension) Minecraft.getInstance().gameRenderer).restoreRVEPos(Minecraft.getInstance().player); + if (!RenderPassType.isVanilla()) { + ((GameRendererExtension) Minecraft.getInstance().gameRenderer).restoreRVEPos(Minecraft.getInstance().player); + } } @Inject(method = "renderPlayerEntity", at = @At(value = "INVOKE", target = "Lnet/coderbot/iris/mixin/LevelRendererAccessor;invokeRenderEntity(Lnet/minecraft/world/entity/Entity;DDDFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;)V", ordinal = 2, shift = At.Shift.AFTER)) private void resetRVE(LevelRendererAccessor par1, EntityRenderDispatcher par2, MultiBufferSource.BufferSource par3, PoseStack par4, float par5, Frustum par6, double par7, double par8, double par9, CallbackInfoReturnable cir) { - ((GameRendererExtension) Minecraft.getInstance().gameRenderer).cacheRVEPos(Minecraft.getInstance().player); - ((GameRendererExtension) Minecraft.getInstance().gameRenderer).setupRVE(); + if (!RenderPassType.isVanilla()) { + ((GameRendererExtension) Minecraft.getInstance().gameRenderer).cacheRVEPos(Minecraft.getInstance().player); + ((GameRendererExtension) Minecraft.getInstance().gameRenderer).setupRVE(); + } } @Redirect(method = "renderEntities", at = @At(value = "INVOKE", target = "Lnet/coderbot/iris/mixin/LevelRendererAccessor;invokeRenderEntity(Lnet/minecraft/world/entity/Entity;DDDFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;)V")) private void setRVE2(LevelRendererAccessor instance, Entity entity, double x, double y, double z, float f, PoseStack poseStack, MultiBufferSource multiBufferSource) { - if (entity == Minecraft.getInstance().getCameraEntity()) { - ((GameRendererExtension) Minecraft.getInstance().gameRenderer).restoreRVEPos((LivingEntity) entity); - } + if (!RenderPassType.isVanilla()) { + if (entity == Minecraft.getInstance().getCameraEntity()) { + ((GameRendererExtension) Minecraft.getInstance().gameRenderer).restoreRVEPos((LivingEntity) entity); + } - instance.invokeRenderEntity(entity, x, y, z, f, poseStack, multiBufferSource); + instance.invokeRenderEntity(entity, x, y, z, f, poseStack, multiBufferSource); - if (entity == Minecraft.getInstance().getCameraEntity()) { - ((GameRendererExtension) Minecraft.getInstance().gameRenderer).cacheRVEPos((LivingEntity) entity); - ((GameRendererExtension) Minecraft.getInstance().gameRenderer).setupRVE(); + if (entity == Minecraft.getInstance().getCameraEntity()) { + ((GameRendererExtension) Minecraft.getInstance().gameRenderer).cacheRVEPos((LivingEntity) entity); + ((GameRendererExtension) Minecraft.getInstance().gameRenderer).setupRVE(); + } + } else { + instance.invokeRenderEntity(entity, x, y, z, f, poseStack, multiBufferSource); } } @@ -52,7 +61,7 @@ private void setRVE2(LevelRendererAccessor instance, Entity entity, double x, do // cancel them here, or we would also cancel prepare shaders @Inject(method = "renderShadows", at = @At("HEAD"), cancellable = true) private void onlyOneShadow(LevelRendererAccessor par1, Camera par2, CallbackInfo ci) { - if (!ClientDataHolder.getInstance().isFirstPass) { + if (!RenderPassType.isVanilla() && !ClientDataHolderVR.getInstance().isFirstPass) { ci.cancel(); } } diff --git a/common/src/main/java/org/vivecraft/mod_compat_vr/optifine/OptifineHelper.java b/common/src/main/java/org/vivecraft/mod_compat_vr/optifine/OptifineHelper.java new file mode 100644 index 000000000..8a4ad5ab7 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/optifine/OptifineHelper.java @@ -0,0 +1,303 @@ +package org.vivecraft.mod_compat_vr.optifine; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.Options; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.phys.Vec3; +import org.vivecraft.client_vr.settings.VRSettings; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +public class OptifineHelper { + + private static boolean checkedForOptifine = false; + private static boolean optifineLoaded = false; + + private static Class optifineConfig; + private static Method optifineConfigIsShadersMethod; + private static Method optifineConfigIsRenderRegionsMethod; + private static Method optifineConfigIsSkyEnabledMethod; + private static Method optifineConfigIsSunMoonEnabledMethod; + private static Method optifineConfigIsStarsEnabledMethod; + private static Method optifineConfigIsCustomColorsMethod; + private static Method optifineConfigIsAntialiasingMethod; + private static Method optifineConfigIsAntialiasingConfiguredMethod; + + private static Class smartAnimations; + private static Method smartAnimationsSpriteRenderedMethod; + + private static Class customColors; + private static Method customColorsGetSkyColorMethod; + private static Method customColorsGetSkyColoEndMethod; + private static Method customColorsGetUnderwaterColorMethod; + private static Method customColorsGetUnderlavaColorMethod; + private static Method customColorsGetFogColorMethod; + private static Method customColorsGetFogColorEndMethod; + private static Method customColorsGetFogColorNetherMethod; + + private static Class shadersRender; + private static Method shadersRenderBeginOutlineMethod; + private static Method shadersRenderEndOutlineMethod; + + private static Field optionsOfRenderRegions; + private static Field optionsOfCloudHeight; + private static Field vertexRenderPositions; + + public static boolean isOptifineLoaded() { + if (!checkedForOptifine) { + checkedForOptifine = true; + // check for optifine with a class search + try { + Class.forName("net.optifine.Config"); + VRSettings.logger.info("Vivecraft: Optifine detected"); + optifineLoaded = true; + } catch (ClassNotFoundException ignore) { + VRSettings.logger.info("Vivecraft: Optifine not detected"); + optifineLoaded = false; + } + if (optifineLoaded) { + init(); + } + } + return optifineLoaded; + } + + public static boolean isShaderActive() { + try { + return (boolean)optifineConfigIsShadersMethod.invoke(optifineConfig); + } catch (InvocationTargetException | IllegalAccessException e) { + e.printStackTrace(); + return false; + } + } + + public static void beginOutlineShader() { + try { + shadersRenderBeginOutlineMethod.invoke(shadersRender); + } catch (InvocationTargetException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + public static void endOutlineShader() { + try { + shadersRenderEndOutlineMethod.invoke(shadersRender); + } catch (InvocationTargetException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + public static boolean isSunMoonEnabled() { + try { + return (boolean)optifineConfigIsSunMoonEnabledMethod.invoke(optifineConfig); + } catch (InvocationTargetException | IllegalAccessException e) { + e.printStackTrace(); + return false; + } + } + + public static boolean isSkyEnabled() { + try { + return (boolean)optifineConfigIsSkyEnabledMethod.invoke(optifineConfig); + } catch (InvocationTargetException | IllegalAccessException e) { + e.printStackTrace(); + return false; + } + } + public static boolean isStarsEnabled() { + try { + return (boolean)optifineConfigIsStarsEnabledMethod.invoke(optifineConfig); + } catch (InvocationTargetException | IllegalAccessException e) { + e.printStackTrace(); + return false; + } + } + + public static boolean isCustomColors() { + try { + return (boolean)optifineConfigIsCustomColorsMethod.invoke(optifineConfig); + } catch (InvocationTargetException | IllegalAccessException e) { + e.printStackTrace(); + return false; + } + } + + public static boolean isRenderRegions() { + try { + return (boolean)optifineConfigIsRenderRegionsMethod.invoke(optifineConfig); + } catch (InvocationTargetException | IllegalAccessException e) { + e.printStackTrace(); + return false; + } + } + + public static boolean isAntialiasing() { + try { + return (boolean)optifineConfigIsAntialiasingMethod.invoke(optifineConfig) + || (boolean)optifineConfigIsAntialiasingConfiguredMethod.invoke(optifineConfig); + } catch (InvocationTargetException | IllegalAccessException e) { + e.printStackTrace(); + return false; + } + } + + public static void setRenderRegions(boolean active) { + try { + optionsOfRenderRegions.set(Minecraft.getInstance().options, active); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + + public static Vec3 getCustomSkyColor(Vec3 skyColor, BlockAndTintGetter blockAccess, double x, double y, double z) { + try { + return (Vec3)customColorsGetSkyColorMethod.invoke(customColors, skyColor, blockAccess, x, y, z); + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + return skyColor; + } + } + + public static Vec3 getCustomSkyColorEnd(Vec3 skyColor) { + try { + return (Vec3)customColorsGetSkyColoEndMethod.invoke(customColors, skyColor); + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + return skyColor; + } + } + + + public static Vec3 getCustomUnderwaterColor(BlockAndTintGetter blockAccess, double x, double y, double z) { + try { + return (Vec3)customColorsGetUnderwaterColorMethod.invoke(customColors, blockAccess, x, y, z); + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + return null; + } + } + + public static Vec3 getCustomUnderlavaColor(BlockAndTintGetter blockAccess, double x, double y, double z) { + try { + return (Vec3)customColorsGetUnderlavaColorMethod.invoke(customColors, blockAccess, x, y, z); + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + return null; + } + } + + public static Vec3 getCustomFogColor(Vec3 fogColor, BlockAndTintGetter blockAccess, double x, double y, double z) { + try { + return (Vec3)customColorsGetFogColorMethod.invoke(customColors, fogColor, blockAccess, x, y, z); + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + return fogColor; + } + } + + public static Vec3 getCustomFogColorEnd(Vec3 fogColor) { + try { + return (Vec3)customColorsGetFogColorEndMethod.invoke(customColors, fogColor); + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + return fogColor; + } + } + + public static Vec3 getCustomFogColorNether(Vec3 fogColor) { + try { + return (Vec3)customColorsGetFogColorNetherMethod.invoke(customColors, fogColor); + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + return fogColor; + } + } + + public static double getCloudHeight() { + try { + return (double)optionsOfCloudHeight.get(Minecraft.getInstance().options); + } catch (IllegalAccessException e) { + e.printStackTrace(); + return 0; + } + } + + public static void markTextureAsActive(TextureAtlasSprite sprite) { + try { + smartAnimationsSpriteRenderedMethod.invoke(smartAnimations, sprite); + } catch (InvocationTargetException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + public static void copyRenderPositions(ModelPart.Vertex source, ModelPart.Vertex dest) { + if (vertexRenderPositions != null) { + try { + vertexRenderPositions.set(dest, vertexRenderPositions.get(source)); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + } + + private static void init() { + try { + optifineConfig = Class.forName("net.optifine.Config"); + optifineConfigIsShadersMethod = optifineConfig.getMethod("isShaders"); + optifineConfigIsRenderRegionsMethod = optifineConfig.getMethod("isRenderRegions"); + optifineConfigIsSkyEnabledMethod = optifineConfig.getMethod("isSkyEnabled"); + optifineConfigIsSunMoonEnabledMethod = optifineConfig.getMethod("isSunMoonEnabled"); + optifineConfigIsStarsEnabledMethod = optifineConfig.getMethod("isStarsEnabled"); + optifineConfigIsCustomColorsMethod = optifineConfig.getMethod("isCustomColors"); + optifineConfigIsAntialiasingMethod = optifineConfig.getMethod("isAntialiasing"); + optifineConfigIsAntialiasingConfiguredMethod = optifineConfig.getMethod("isAntialiasingConfigured"); + + smartAnimations = Class.forName("net.optifine.SmartAnimations"); + smartAnimationsSpriteRenderedMethod = smartAnimations.getMethod("spriteRendered", TextureAtlasSprite.class); + + optionsOfRenderRegions = Options.class.getField("ofRenderRegions"); + optionsOfCloudHeight = Options.class.getField("ofCloudsHeight"); + + customColors = Class.forName("net.optifine.CustomColors"); + customColorsGetSkyColorMethod = customColors.getMethod("getSkyColor", Vec3.class, BlockAndTintGetter.class, double.class, double.class, double.class); + + customColorsGetUnderwaterColorMethod = customColors.getMethod("getUnderwaterColor", BlockAndTintGetter.class, double.class, double.class, double.class); + customColorsGetUnderlavaColorMethod = customColors.getMethod("getUnderlavaColor", BlockAndTintGetter.class, double.class, double.class, double.class); + + shadersRender = Class.forName("net.optifine.shaders.ShadersRender"); + shadersRenderBeginOutlineMethod = shadersRender.getMethod("beginOutline"); + shadersRenderEndOutlineMethod = shadersRender.getMethod("endOutline"); + + // private methods + customColorsGetSkyColoEndMethod = customColors.getDeclaredMethod("getSkyColorEnd", Vec3.class); + customColorsGetSkyColoEndMethod.setAccessible(true); + customColorsGetFogColorMethod = customColors.getDeclaredMethod("getFogColor", Vec3.class, BlockAndTintGetter.class, double.class, double.class, double.class); + customColorsGetFogColorMethod.setAccessible(true); + customColorsGetFogColorEndMethod = customColors.getDeclaredMethod("getFogColorEnd", Vec3.class); + customColorsGetFogColorEndMethod.setAccessible(true); + customColorsGetFogColorNetherMethod = customColors.getDeclaredMethod("getFogColorNether", Vec3.class); + customColorsGetFogColorNetherMethod.setAccessible(true); + + try { + vertexRenderPositions = ModelPart.Vertex.class.getField("renderPositions"); + } catch (NoSuchFieldException e) { + // this version doesn't have the entity render improvements + vertexRenderPositions = null; + } + + } catch (ClassNotFoundException e) { + VRSettings.logger.error("Optifine detected, but couldn't load class: {}", e.getMessage()); + optifineLoaded = false; + } catch (NoSuchMethodException e) { + VRSettings.logger.error("Optifine detected, but couldn't load Method: {}", e.getMessage()); + optifineLoaded = false; + } catch (NoSuchFieldException e) { + VRSettings.logger.error("Optifine detected, but couldn't load Field: {}", e.getMessage()); + } + } + +} diff --git a/common/src/main/java/org/vivecraft/mod_compat_vr/optifine/mixin/ShadersRenderVRMixin.java b/common/src/main/java/org/vivecraft/mod_compat_vr/optifine/mixin/ShadersRenderVRMixin.java new file mode 100644 index 000000000..93699a74c --- /dev/null +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/optifine/mixin/ShadersRenderVRMixin.java @@ -0,0 +1,84 @@ +package org.vivecraft.mod_compat_vr.optifine.mixin; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.extensions.GameRendererExtension; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client_xr.render_pass.RenderPassType; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +@Pseudo +@Mixin(targets = "net.optifine.shaders.ShadersRender") +public class ShadersRenderVRMixin { + + @Shadow + public static void updateActiveRenderInfo(Camera activeRenderInfo, Minecraft mc, float partialTicks){}; + + @Unique + private static Method setCameraShadow = null; + + @Inject(at = @At("HEAD"), method = "renderHand0", remap = false, cancellable = true) + private static void noTranslucentHandsInVR (CallbackInfo ci){ + if (!RenderPassType.isVanilla()) { + ci.cancel(); + } + } + + @Inject(at = @At("HEAD"), method = "renderHand1", remap = false, cancellable = true) + private static void noSolidHandsInVR (CallbackInfo ci){ + if (!RenderPassType.isVanilla()) { + ci.cancel(); + } + } + + @Inject(at = @At(value = "INVOKE",target = "Lnet/minecraft/client/Minecraft;getInstance()Lnet/minecraft/client/Minecraft;", remap = true), method = "renderShadowMap", remap = false, cancellable = true) + private static void shadowsOnlyOnce(GameRenderer gameRenderer, Camera activeRenderInfo, int pass, float partialTicks, long finishTimeNano, CallbackInfo ci){ + if (!RenderPassType.isVanilla() && ClientDataHolderVR.getInstance().currentPass != RenderPass.LEFT) { + if (setCameraShadow == null) { + try { + setCameraShadow = Class.forName("net.optifine.shaders.Shaders").getMethod("setCameraShadow", PoseStack.class, Camera.class, float.class); + + } catch (NoSuchMethodException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + try { + updateActiveRenderInfo(activeRenderInfo, Minecraft.getInstance(), partialTicks); + setCameraShadow.invoke(null, new PoseStack(), activeRenderInfo, partialTicks); + } catch (IllegalAccessException | InvocationTargetException ignored) { + } + ci.cancel(); + } + } + + @ModifyVariable(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;renderEntity(Lnet/minecraft/world/entity/Entity;DDDFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;)V", remap = true, shift = At.Shift.BEFORE), ordinal = 0, method = "renderShadowMap", remap = false) + private static Entity fixPlayerPos(Entity entity, GameRenderer gameRenderer, Camera activeRenderInfo){ + if (!RenderPassType.isVanilla() && entity == activeRenderInfo.entity) { + ((GameRendererExtension)gameRenderer).restoreRVEPos((LivingEntity)entity); + } + return entity; + } + @ModifyVariable(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;renderEntity(Lnet/minecraft/world/entity/Entity;DDDFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;)V", remap = true, shift = At.Shift.AFTER), ordinal = 0, method = "renderShadowMap", remap = false) + private static Entity restorePlayerPos(Entity entity, GameRenderer gameRenderer, Camera activeRenderInfo){ + if (!RenderPassType.isVanilla() && entity == activeRenderInfo.entity) { + ((GameRendererExtension)gameRenderer).cacheRVEPos((LivingEntity)entity); + ((GameRendererExtension)gameRenderer).setupRVE(); + } + return entity; + } +} diff --git a/common/src/main/java/org/vivecraft/mod_compat_vr/optifine/mixin/ShadersVRMixin.java b/common/src/main/java/org/vivecraft/mod_compat_vr/optifine/mixin/ShadersVRMixin.java new file mode 100644 index 000000000..a46a5569c --- /dev/null +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/optifine/mixin/ShadersVRMixin.java @@ -0,0 +1,60 @@ +package org.vivecraft.mod_compat_vr.optifine.mixin; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Camera; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client_xr.render_pass.RenderPassType; + +@Pseudo +@Mixin(targets = "net.optifine.shaders.Shaders") +public class ShadersVRMixin { + @Inject(at = @At("TAIL"), method = "beginRender", remap = false) + private static void resetBlend(CallbackInfo ci){ + // somehow the blend state is wrong here after shadows, when a spider gets rendered? + RenderSystem.defaultBlendFunc(); + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;getPosition()Lnet/minecraft/world/phys/Vec3;", remap = true), method = "setCameraShadow", remap = false) + private static Vec3 positionCameraForShadows(Camera camera){ + if (RenderPassType.isVanilla()) { + return camera.getPosition(); + } else { + return ClientDataHolderVR.getInstance().vrPlayer.getVRDataWorld().getEye(RenderPass.CENTER).getPosition(); + } + } + + @ModifyVariable(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack$Pose;pose()Lcom/mojang/math/Matrix4f;", shift = At.Shift.AFTER, remap = true), method = "setCameraShadow", remap = false) + private static PoseStack offsetShadow(PoseStack shadowModelViewMat){ + if (!RenderPassType.isVanilla()) { + Vec3 offset = ClientDataHolderVR.getInstance().vrPlayer.getVRDataWorld().getEye(ClientDataHolderVR.getInstance().currentPass).getPosition().subtract(ClientDataHolderVR.getInstance().vrPlayer.getVRDataWorld().getEye(RenderPass.CENTER).getPosition()); + shadowModelViewMat.translate((float) offset.x, (float) offset.y, (float) offset.z); + } + return shadowModelViewMat; + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getX()D", remap = true), method = "setCameraOffset", remap = false) + private static double sameX(Entity entity) { + if (RenderPassType.isVanilla()) { + return entity.getX(); + } else { + return ClientDataHolderVR.getInstance().vrPlayer.getVRDataWorld().getEye(RenderPass.CENTER).getPosition().x; + } + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getZ()D", remap = true), method = "setCameraOffset", remap = false) + private static double sameZ(Entity entity) { + if (RenderPassType.isVanilla()) { + return entity.getZ(); + } else { + return ClientDataHolderVR.getInstance().vrPlayer.getVRDataWorld().getEye(RenderPass.CENTER).getPosition().z; + } + } +} diff --git a/common/src/main/java/org/vivecraft/PehkuiHelper.java b/common/src/main/java/org/vivecraft/mod_compat_vr/pehkui/PehkuiHelper.java similarity index 86% rename from common/src/main/java/org/vivecraft/PehkuiHelper.java rename to common/src/main/java/org/vivecraft/mod_compat_vr/pehkui/PehkuiHelper.java index 569bd87c6..1212755dc 100644 --- a/common/src/main/java/org/vivecraft/PehkuiHelper.java +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/pehkui/PehkuiHelper.java @@ -1,4 +1,4 @@ -package org.vivecraft; +package org.vivecraft.mod_compat_vr.pehkui; import net.minecraft.world.entity.Entity; diff --git a/common/src/main/java/org/vivecraft/mod_compat_vr/physicsmod/mixin/OptionsScreenMixin.java b/common/src/main/java/org/vivecraft/mod_compat_vr/physicsmod/mixin/OptionsScreenMixin.java new file mode 100644 index 000000000..bc851f65d --- /dev/null +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/physicsmod/mixin/OptionsScreenMixin.java @@ -0,0 +1,36 @@ +package org.vivecraft.mod_compat_vr.physicsmod.mixin; + +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.events.GuiEventListener; +import net.minecraft.client.gui.screens.OptionsScreen; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TranslatableComponent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +// priority 1100 so we inject after physics mod +@Mixin(value = OptionsScreen.class, priority = 1100) +public abstract class OptionsScreenMixin extends Screen { + + protected OptionsScreenMixin(Component component) { + super(component); + } + + @Inject(at = @At("TAIL"), method = "init") + private void reducePhysicsmodButtonSize(CallbackInfo ci) { + for (GuiEventListener guiEventListener : children()) { + if (guiEventListener instanceof Button button) { + if (button.getMessage() instanceof TranslatableComponent contents && "physicsmod.menu.main.title".equals(contents.getKey())) { + // physics mods button would collide with ours, so make it half size to the right + button.x = button.x + button.getWidth()/2 + 5; + button.setWidth(button.getWidth()/2 - 5); + // move it up, so it aligns with ours + button.y = button.y - 6; + } + } + } + } +} diff --git a/common/src/main/java/org/vivecraft/modCompatMixin/reiMixin/reiTextFieldWidgetMixin.java b/common/src/main/java/org/vivecraft/mod_compat_vr/rei/mixin/reiTextFieldWidgetMixin.java similarity index 66% rename from common/src/main/java/org/vivecraft/modCompatMixin/reiMixin/reiTextFieldWidgetMixin.java rename to common/src/main/java/org/vivecraft/mod_compat_vr/rei/mixin/reiTextFieldWidgetMixin.java index 5becbe7ff..4b7e0bb46 100644 --- a/common/src/main/java/org/vivecraft/modCompatMixin/reiMixin/reiTextFieldWidgetMixin.java +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/rei/mixin/reiTextFieldWidgetMixin.java @@ -1,12 +1,13 @@ -package org.vivecraft.modCompatMixin.reiMixin; +package org.vivecraft.mod_compat_vr.rei.mixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler; @Pseudo @Mixin(targets = {"me.shedaniel.rei.impl.client.gui.widget.basewidgets.TextFieldWidget"}) @@ -14,7 +15,7 @@ public class reiTextFieldWidgetMixin { @Inject(method = "setFocused(Z)V", at = @At("HEAD")) private void openKeyboard(boolean focused, CallbackInfo ci) { - if (!ClientDataHolder.getInstance().vrSettings.seated) { + if (VRState.vrRunning && !ClientDataHolderVR.getInstance().vrSettings.seated) { KeyboardHandler.setOverlayShowing(focused); } } diff --git a/common/src/main/java/org/vivecraft/mod_compat_vr/sodium/SodiumHelper.java b/common/src/main/java/org/vivecraft/mod_compat_vr/sodium/SodiumHelper.java new file mode 100644 index 000000000..816677511 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/sodium/SodiumHelper.java @@ -0,0 +1,52 @@ +package org.vivecraft.mod_compat_vr.sodium; + +import it.unimi.dsi.fastutil.longs.LongArrayFIFOQueue; +import me.jellysquid.mods.sodium.client.SodiumClientMod; +import me.jellysquid.mods.sodium.client.render.texture.SpriteUtil; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import org.lwjgl.opengl.GL32C; +import org.vivecraft.client.Xplat; + +public class SodiumHelper { + static final LongArrayFIFOQueue fences = new LongArrayFIFOQueue(); + + public static void preRenderMinecraft() { + while (fences.size() > SodiumClientMod.options().advanced.cpuRenderAheadLimit) { + var fence = fences.dequeueLong(); + GL32C.glClientWaitSync(fence, GL32C.GL_SYNC_FLUSH_COMMANDS_BIT, Long.MAX_VALUE); + GL32C.glDeleteSync(fence); + } + } + + public static void postRenderMinecraft() { + var fence = GL32C.glFenceSync(GL32C.GL_SYNC_GPU_COMMANDS_COMPLETE, 0); + + if (fence == 0) { + throw new RuntimeException("Failed to create fence object"); + } + + fences.enqueue(fence); + } + + public static boolean isLoaded() { + return Xplat.isModLoaded("sodium") || Xplat.isModLoaded("rubidium"); + } + + public static boolean hasIssuesWithParallelBlockBuilding() { + try { + Class.forName("me.jellysquid.mods.sodium.client.render.immediate.model.BakedModelEncoder"); + return true; + } catch (ClassNotFoundException ignored) { + return false; + } + } + + public static void markTextureAsActive(TextureAtlasSprite sprite){ + SpriteUtil.markSpriteActive(sprite); + } + +// NotFixed +// public static void vignette(boolean b) { +// SodiumClientMod.options().quality.enableVignette = b; +// } +} diff --git a/common/src/main/java/org/vivecraft/modCompatMixin/sodiumMixin/FabricSodiumGameOptionPagesVRMixin.java b/common/src/main/java/org/vivecraft/mod_compat_vr/sodium/mixin/FabricSodiumGameOptionPagesVRMixin.java similarity index 70% rename from common/src/main/java/org/vivecraft/modCompatMixin/sodiumMixin/FabricSodiumGameOptionPagesVRMixin.java rename to common/src/main/java/org/vivecraft/mod_compat_vr/sodium/mixin/FabricSodiumGameOptionPagesVRMixin.java index 879847390..828209c54 100644 --- a/common/src/main/java/org/vivecraft/modCompatMixin/sodiumMixin/FabricSodiumGameOptionPagesVRMixin.java +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/sodium/mixin/FabricSodiumGameOptionPagesVRMixin.java @@ -1,6 +1,6 @@ -package org.vivecraft.modCompatMixin.sodiumMixin; +package org.vivecraft.mod_compat_vr.sodium.mixin; -import org.vivecraft.ClientDataHolder; +import org.vivecraft.client_vr.ClientDataHolderVR; import me.jellysquid.mods.sodium.client.gui.SodiumGameOptionPages; import net.minecraft.client.GraphicsStatus; import net.minecraft.client.Options; @@ -9,6 +9,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.client_vr.VRState; @Pseudo @Mixin(SodiumGameOptionPages.class) @@ -16,6 +17,8 @@ public class FabricSodiumGameOptionPagesVRMixin { @Inject(at = @At("HEAD"), method = "lambda$quality$23", remap = false) private static void initframe(Options opts, GraphicsStatus value, CallbackInfo ci) { - ClientDataHolder.getInstance().vrRenderer.reinitFrameBuffers("gfx setting change"); + if (VRState.vrInitialized) { + ClientDataHolderVR.getInstance().vrRenderer.reinitFrameBuffers("gfx setting change"); + } } } diff --git a/common/src/main/java/org/vivecraft/modCompatMixin/sodiumMixin/ForgeSodiumGameOptionPagesVRMixin.java b/common/src/main/java/org/vivecraft/mod_compat_vr/sodium/mixin/ForgeSodiumGameOptionPagesVRMixin.java similarity index 60% rename from common/src/main/java/org/vivecraft/modCompatMixin/sodiumMixin/ForgeSodiumGameOptionPagesVRMixin.java rename to common/src/main/java/org/vivecraft/mod_compat_vr/sodium/mixin/ForgeSodiumGameOptionPagesVRMixin.java index b4d188453..052f56fe1 100644 --- a/common/src/main/java/org/vivecraft/modCompatMixin/sodiumMixin/ForgeSodiumGameOptionPagesVRMixin.java +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/sodium/mixin/ForgeSodiumGameOptionPagesVRMixin.java @@ -1,7 +1,6 @@ -package org.vivecraft.modCompatMixin.sodiumMixin; +package org.vivecraft.mod_compat_vr.sodium.mixin; import me.jellysquid.mods.sodium.client.gui.SodiumGameOptionPages; -import me.jellysquid.mods.sodium.client.gui.misc.GraphicsMode; import net.minecraft.client.GraphicsStatus; import net.minecraft.client.Options; import org.spongepowered.asm.mixin.Mixin; @@ -9,14 +8,17 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.ClientDataHolder; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.VRState; @Pseudo @Mixin(SodiumGameOptionPages.class) public class ForgeSodiumGameOptionPagesVRMixin { @Inject(at = @At("HEAD"), method = "lambda$quality$23", remap = false) - private static void initframe(Options opts, GraphicsMode value, CallbackInfo ci) { - ClientDataHolder.getInstance().vrRenderer.reinitFrameBuffers("gfx setting change"); + private static void initframe(Options opts, GraphicsStatus value, CallbackInfo ci) { + if (VRState.vrInitialized) { + ClientDataHolderVR.getInstance().vrRenderer.reinitFrameBuffers("gfx setting change"); + } } } diff --git a/common/src/main/java/org/vivecraft/mod_compat_vr/sodium/mixin/RenderSectionManagerVRMixin.java b/common/src/main/java/org/vivecraft/mod_compat_vr/sodium/mixin/RenderSectionManagerVRMixin.java new file mode 100644 index 000000000..5583eec08 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/sodium/mixin/RenderSectionManagerVRMixin.java @@ -0,0 +1,23 @@ +package org.vivecraft.mod_compat_vr.sodium.mixin; + +import me.jellysquid.mods.sodium.client.render.chunk.RenderSectionManager; +import me.jellysquid.mods.sodium.client.render.chunk.lists.ChunkRenderList; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(RenderSectionManager.class) +public class RenderSectionManagerVRMixin { + + @Shadow(remap = false) + private ChunkRenderList chunkRenderList; + + @Inject(at = @At("HEAD"), method = "getVisibleChunkCount", cancellable = true, remap = false) + private void preventNullpointerException(CallbackInfoReturnable cir){ + if (chunkRenderList == null) { + cir.setReturnValue(-1); + } + } +} diff --git a/common/src/main/java/org/vivecraft/modCompatMixin/sodiumMixin/SodiumWorldRendererVRMixin.java b/common/src/main/java/org/vivecraft/mod_compat_vr/sodium/mixin/SodiumWorldRendererVRMixin.java similarity index 55% rename from common/src/main/java/org/vivecraft/modCompatMixin/sodiumMixin/SodiumWorldRendererVRMixin.java rename to common/src/main/java/org/vivecraft/mod_compat_vr/sodium/mixin/SodiumWorldRendererVRMixin.java index 211d8a8e7..fc26bda8f 100644 --- a/common/src/main/java/org/vivecraft/modCompatMixin/sodiumMixin/SodiumWorldRendererVRMixin.java +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/sodium/mixin/SodiumWorldRendererVRMixin.java @@ -1,19 +1,21 @@ -package org.vivecraft.modCompatMixin.sodiumMixin; +package org.vivecraft.mod_compat_vr.sodium.mixin; import me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.vivecraft.client_xr.render_pass.RenderPassType; @Pseudo @Mixin(SodiumWorldRenderer.class) public class SodiumWorldRendererVRMixin { - @ModifyVariable(at = @At("STORE"), ordinal = 1, method = "updateChunks") + @ModifyVariable(at = @At("STORE"), ordinal = 1, method = {"updateChunks", "setupTerrain"}) public boolean RenderUpdate(boolean b) { - return true; + // always update chunk graph in VR to prevent missing chunks + return !RenderPassType.isVanilla() || b; } } diff --git a/common/src/main/java/org/vivecraft/physicalinventory/ExtendedModelManager.java b/common/src/main/java/org/vivecraft/physicalinventory/ExtendedModelManager.java deleted file mode 100644 index 94b5faa6a..000000000 --- a/common/src/main/java/org/vivecraft/physicalinventory/ExtendedModelManager.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.vivecraft.physicalinventory; - -import java.util.ArrayList; -import net.minecraft.client.resources.model.ModelBakery; -import net.minecraft.resources.ResourceLocation; - -public class ExtendedModelManager -{ - ArrayList models = new ArrayList<>(); - - private void putModels(ModelBakery bakery) - { - for (String s : this.models) - { - new ResourceLocation(s); - } - } - - public void registerModel(String baseId) - { - this.models.add(baseId); - } -} diff --git a/common/src/main/java/org/vivecraft/physicalinventory/Semaphore.java b/common/src/main/java/org/vivecraft/physicalinventory/Semaphore.java deleted file mode 100644 index 08ae95f46..000000000 --- a/common/src/main/java/org/vivecraft/physicalinventory/Semaphore.java +++ /dev/null @@ -1,101 +0,0 @@ -package org.vivecraft.physicalinventory; - -public class Semaphore -{ - private boolean locked = true; - private final Object lock = new Object(); - long timeout = -1L; - - public Semaphore() - { - } - - public Semaphore(long timeout) - { - this.timeout = timeout; - } - - public void waitFor() - { - synchronized (this.lock) - { - if (this.locked) - { - Thread thread = null; - - if (this.timeout != -1L) - { - thread = new Thread(new Runnable() - { - public void run() - { - try - { - Thread.sleep(Semaphore.this.timeout); - Semaphore.this.wakeUp(); - } - catch (InterruptedException interruptedexception1) - { - } - } - }); - thread.start(); - } - - try - { - this.lock.wait(); - - if (thread != null) - { - thread.interrupt(); - } - } - catch (InterruptedException interruptedexception) - { - } - } - } - } - - public void wakeUp() - { - synchronized (this.lock) - { - if (this.locked) - { - this.locked = false; - this.lock.notifyAll(); - } - } - } - - public void reactivate() - { - synchronized (this.lock) - { - this.locked = true; - } - } - - public boolean isActive() - { - return this.locked; - } - - public long getTimeout() - { - synchronized (this.lock) - { - return this.timeout; - } - } - - public void setTimeout(long timeout) - { - synchronized (this.lock) - { - this.timeout = timeout; - } - } -} diff --git a/common/src/main/java/org/vivecraft/physicalinventory/TransactionMutex.java b/common/src/main/java/org/vivecraft/physicalinventory/TransactionMutex.java deleted file mode 100644 index 0527942d6..000000000 --- a/common/src/main/java/org/vivecraft/physicalinventory/TransactionMutex.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.vivecraft.physicalinventory; - -public class TransactionMutex -{ - public boolean approved; - public Thread watchdog; - public boolean consumed; -} diff --git a/common/src/main/java/org/vivecraft/provider/VRRenderer.java b/common/src/main/java/org/vivecraft/provider/VRRenderer.java deleted file mode 100644 index 603e89189..000000000 --- a/common/src/main/java/org/vivecraft/provider/VRRenderer.java +++ /dev/null @@ -1,846 +0,0 @@ -package org.vivecraft.provider; - -import com.google.gson.JsonSyntaxException; -import com.mojang.blaze3d.pipeline.RenderTarget; -import com.mojang.blaze3d.platform.GlStateManager; -import com.mojang.blaze3d.platform.GlUtil; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.BufferUploader; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; -import com.mojang.blaze3d.vertex.Tesselator; -import com.mojang.blaze3d.vertex.VertexFormat; -import com.mojang.math.Matrix4f; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.client.renderer.PostChain; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.Tuple; -import net.minecraft.world.level.dimension.DimensionType; -import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL30; -import org.lwjgl.opengl.GL43; -import org.lwjgl.system.MemoryUtil; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.GlStateHelper; -import org.vivecraft.IrisHelper; -import org.vivecraft.VRTextureTarget; -import org.vivecraft.extensions.GameRendererExtension; -import org.vivecraft.extensions.RenderTargetExtension; -import org.vivecraft.settings.VRSettings; -import org.vivecraft.gameplay.screenhandlers.GuiHandler; -import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; -import org.vivecraft.gameplay.screenhandlers.RadialHandler; -import org.vivecraft.gameplay.trackers.TelescopeTracker; -import org.vivecraft.mixin.blaze3d.systems.RenderSystemAccessor; -import org.vivecraft.render.RenderConfigException; -import org.vivecraft.render.RenderPass; -import org.vivecraft.render.ShaderHelper; -import org.vivecraft.render.VRShaders; -import org.vivecraft.utils.LangHelper; -import org.vivecraft.Xplat; - -import java.io.IOException; -import java.nio.FloatBuffer; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public abstract class VRRenderer -{ - public static final String RENDER_SETUP_FAILURE_MESSAGE = "Failed to initialise stereo rendering plugin: "; - public Map alphaShaders = new HashMap<>(); - public RenderTarget cameraFramebuffer; - public RenderTarget cameraRenderFramebuffer; - protected int dispLastWidth; - protected int dispLastHeight; - public Map entityShaders = new HashMap<>(); - public Matrix4f[] eyeproj = new Matrix4f[2]; - public RenderTarget framebufferEye0; - public RenderTarget framebufferEye1; - public RenderTarget framebufferMR; - public RenderTarget framebufferUndistorted; - public RenderTarget framebufferVrRender; - public RenderTarget fsaaFirstPassResultFBO; - public RenderTarget fsaaLastPassResultFBO; - protected float[][] hiddenMesheVertecies = new float[2][]; - public ResourceKey lastDimensionId = DimensionType.OVERWORLD_LOCATION; - public int lastDisplayFBHeight = 0; - public int lastDisplayFBWidth = 0; - public boolean lastEnableVsync = true; - public boolean lastFogFancy = true; - public boolean lastFogFast = false; - public int lastGuiScale = 0; - protected VRSettings.MirrorMode lastMirror; - public int lastRenderDistanceChunks = -1; - public long lastWindow = 0L; - public float lastWorldScale = 0.0F; - protected int LeftEyeTextureId = -1; - protected int RightEyeTextureId = -1; - public int mirrorFBHeight; - public int mirrorFBWidth; - protected boolean reinitFramebuffers = true; - public boolean reinitShadersFlag = false; - public float renderScale; - protected Tuple resolution; - public float ss = -1.0F; - public RenderTarget telescopeFramebufferL; - public RenderTarget telescopeFramebufferR; - protected MCVR vr; - - public VRRenderer(MCVR vr) - { - this.vr = vr; - } - - protected void checkGLError(String message) - { - //Config.checkGlError(message); TODO - if (GlStateManager._getError() != 0) { - System.err.println(message); - } - } - - public boolean clipPlanesChanged() - { - return false; - } - - public abstract void createRenderTexture(int var1, int var2); - - public abstract Matrix4f getProjectionMatrix(int var1, float var2, float var3); - - public abstract void endFrame() throws RenderConfigException; - - public abstract boolean providesStencilMask(); - - protected PostChain createShaderGroup(ResourceLocation resource, RenderTarget fb) throws JsonSyntaxException, IOException - { - Minecraft minecraft = Minecraft.getInstance(); - PostChain postchain = new PostChain(minecraft.getTextureManager(), minecraft.getResourceManager(), fb, resource); - postchain.resize(fb.viewWidth, fb.viewHeight); - return postchain; - } - - public void deleteRenderTextures() - { - if (this.LeftEyeTextureId > 0) - { - GL11.glDeleteTextures(this.LeftEyeTextureId); - } - - if (this.RightEyeTextureId > 0) - { - GL11.glDeleteTextures(this.RightEyeTextureId); - } - - this.LeftEyeTextureId = this.RightEyeTextureId = -1; - } - - public void doStencil(boolean inverse) - { - Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); - - //setup stencil for writing - GL11.glEnable(GL11.GL_STENCIL_TEST); - GL11.glStencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_REPLACE); - GL11.glStencilMask(0xFF); // Write to stencil buffer - - if(inverse) { - //clear whole image for total mask in color, stencil, depth - GL11.glClearStencil(0xFF); - GL43.glClearDepthf(0); - - GL11.glStencilFunc(GL11.GL_ALWAYS, 0, 0xFF); // Set any stencil to 0 - RenderSystem.colorMask(false, false, false, true); - - } else { - //clear whole image for total transparency - GL11.glClearStencil(0); - GL43.glClearDepthf(1); - - GL11.glStencilFunc(GL11.GL_ALWAYS, 0xFF, 0xFF); // Set any stencil to 1 - RenderSystem.colorMask(true, true, true, true); - } - - GlStateHelper.clear(GL11.GL_DEPTH_BUFFER_BIT | GL11.GL_STENCIL_BUFFER_BIT); - - GL11.glClearStencil(0); - GL43.glClearDepthf(1); - - RenderSystem.depthMask(true); - RenderSystem.enableDepthTest(); - RenderSystem.depthFunc(GL11.GL_ALWAYS); - RenderSystem.disableTexture(); - RenderSystem.disableCull(); - - RenderSystem.setShaderColor(0F, 0F, 0F, 1.0F); - - - RenderTarget fb = minecraft.getMainRenderTarget(); - RenderSystem.viewport(0, 0, fb.viewWidth, fb.viewHeight); - RenderSystem.backupProjectionMatrix(); - RenderSystem.setProjectionMatrix(Matrix4f.orthographic(0.0F, fb.viewWidth, 0.0F, fb.viewHeight, 0.0F, 20.0F)); - RenderSystem.getModelViewStack().pushPose(); - RenderSystem.getModelViewStack().setIdentity(); - if(inverse) //draw on far clip - RenderSystem.getModelViewStack().translate(0, 0, -20); - RenderSystem.applyModelViewMatrix(); - int s= GL43.glGetInteger(GL43.GL_CURRENT_PROGRAM); - - if(dataholder.currentPass == RenderPass.SCOPEL || dataholder.currentPass == RenderPass.SCOPER){ - drawCircle(fb.viewWidth, fb.viewHeight); - } else if(dataholder.currentPass == RenderPass.LEFT||dataholder.currentPass == RenderPass.RIGHT) { - drawMask(); - } - - RenderSystem.restoreProjectionMatrix(); - RenderSystem.getModelViewStack().popPose(); - - RenderSystem.depthMask(true); // Do write to depth buffer - RenderSystem.colorMask(true, true, true, true); - RenderSystem.enableDepthTest(); - - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.enableTexture(); - RenderSystem.enableCull(); - GL30.glUseProgram(s); - GL11.glStencilFunc(GL11.GL_NOTEQUAL, 255, 1); - GL11.glStencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_KEEP); - GL11.glStencilMask(0); // Dont Write to stencil buffer - RenderSystem.depthFunc(GL11.GL_LEQUAL); - } - FloatBuffer buffer = MemoryUtil.memAllocFloat(16); - FloatBuffer buffer2 = MemoryUtil.memAllocFloat(16); - - public void doFSAA(RenderPass eye, boolean hasShaders) - { - if (this.fsaaFirstPassResultFBO == null) - { - this.reinitFrameBuffers("FSAA Setting Changed"); - } - else { - GlStateManager._disableBlend(); - RenderSystem.backupProjectionMatrix(); - Matrix4f matrix4f = new Matrix4f(); - matrix4f.setIdentity(); - RenderSystem.setProjectionMatrix(matrix4f); - RenderSystem.getModelViewStack().pushPose(); - RenderSystem.getModelViewStack().translate(0, 0, -0.7F); - RenderSystem.applyModelViewMatrix(); - DefaultVertexFormat.POSITION_TEX.setupBufferState(); - this.fsaaFirstPassResultFBO.clear(Minecraft.ON_OSX); - this.fsaaFirstPassResultFBO.bindWrite(false); - RenderSystem.setShaderTexture(0, framebufferVrRender.getColorTextureId()); - RenderSystem.setShaderTexture(1, framebufferVrRender.getDepthTextureId()); - - GlStateManager._activeTexture(33985); - this.framebufferVrRender.bindRead(); - GlStateManager._activeTexture(33986); - GlStateManager._bindTexture(((RenderTargetExtension) this.framebufferVrRender).getDepthBufferId()); - - GlStateManager._activeTexture(33984); - GlStateManager._clearColor(1.0F, 1.0F, 1.0F, 1.0F); - GlStateManager._clearDepth(1.0D); - this.fsaaFirstPassResultFBO.bindRead(); - GlStateHelper.clear(16640); - GlStateManager._viewport(0, 0, this.fsaaFirstPassResultFBO.viewWidth, this.fsaaFirstPassResultFBO.viewHeight); - VRShaders._Lanczos_texelWidthOffsetUniform.set(1.0F / (3.0F * (float) this.fsaaFirstPassResultFBO.viewWidth)); - VRShaders._Lanczos_texelHeightOffsetUniform.set(0.0F); - VRShaders._Lanczos_modelViewUniform.set(RenderSystem.getModelViewMatrix()); - VRShaders._Lanczos_projectionUniform.set(RenderSystem.getProjectionMatrix()); - for (int k = 0; k < RenderSystemAccessor.getShaderTextures().length; ++k) { - int l = RenderSystem.getShaderTexture(k); - VRShaders.lanczosShader.setSampler("Sampler" + k, l); - } - VRShaders.lanczosShader.apply(); - GlStateHelper.clear(16384); - this.drawQuad(); - this.fsaaLastPassResultFBO.clear(Minecraft.ON_OSX); - this.fsaaLastPassResultFBO.bindWrite(false); - GlStateManager._activeTexture(33985); - this.fsaaFirstPassResultFBO.bindRead(); - RenderSystem.setShaderTexture(0, this.fsaaFirstPassResultFBO.getColorTextureId()); - GlStateManager._activeTexture(33986); - RenderSystem.setShaderTexture(1, this.fsaaFirstPassResultFBO.getDepthTextureId()); - GlStateManager._bindTexture(((RenderTargetExtension) this.fsaaFirstPassResultFBO).getDepthBufferId()); - - GlStateManager._activeTexture(33984); - this.checkGLError("posttex"); - GlStateManager._viewport(0, 0, this.fsaaLastPassResultFBO.viewWidth, this.fsaaLastPassResultFBO.viewHeight); - GlStateManager._clearColor(1.0F, 1.0F, 1.0F, 1.0F); - GlStateManager._clearDepth(1.0D); - GlStateHelper.clear(16640); - this.checkGLError("postclear"); - GlStateManager._activeTexture(33984); - this.checkGLError("postact"); - for (int k = 0; k < RenderSystemAccessor.getShaderTextures().length; ++k) { - int l = RenderSystem.getShaderTexture(k); - VRShaders.lanczosShader.setSampler("Sampler" + k, l); - } - VRShaders._Lanczos_texelWidthOffsetUniform.set(0.0F); - VRShaders._Lanczos_texelHeightOffsetUniform.set(1.0F / (3.0F * (float) this.framebufferEye0.viewHeight)); - VRShaders.lanczosShader.apply(); - this.drawQuad(); - this.checkGLError("postdraw"); - RenderSystem.restoreProjectionMatrix(); - RenderSystem.getModelViewStack().popPose(); - // Clean up time - VRShaders.lanczosShader.clear(); - Minecraft.getInstance().getMainRenderTarget().bindWrite(true); - } - } - - private void drawCircle(float width, float height) { - BufferBuilder builder = Tesselator.getInstance().getBuilder(); - builder.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION); - int i = 32; - float f = (float)(width / 2); - builder.vertex((float)(width / 2), (float)(width / 2), 0.0F).endVertex(); - for (int j = 0; j < i + 1; ++j) - { - float f1 = (float)j / (float)i * (float)Math.PI * 2.0F; - float f2 = (float)((double)(width / 2) + Math.cos((double)f1) * (double)f); - float f3 = (float)((double)(width / 2) + Math.sin((double)f1) * (double)f); - builder.vertex(f2, f3, 0.0F).endVertex(); - } - builder.end(); - BufferUploader.end(builder); - } - - private void drawMask() { - Minecraft mc = Minecraft.getInstance(); - ClientDataHolder dh = ClientDataHolder.getInstance(); - float[] verts = getStencilMask(dh.currentPass); - if (verts == null) return; - - BufferBuilder builder = Tesselator.getInstance().getBuilder(); - builder.begin(VertexFormat.Mode.TRIANGLES, DefaultVertexFormat.POSITION); - - for (int i = 0; i < verts.length; i += 2) - { - builder.vertex(verts[i] * dh.vrRenderer.renderScale, verts[i + 1] * dh.vrRenderer.renderScale, 0.0F).endVertex(); - } - - builder.end(); - RenderSystem.setShader(GameRenderer::getPositionShader); - BufferUploader.end(builder); - } - - private void drawQuad() - { - RenderSystem.setShader(GameRenderer::getPositionTexShader); - BufferBuilder builder = Tesselator.getInstance().getBuilder(); - builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); - builder.vertex(-1.0F, -1.0F, 0.0F).uv(0.0F, 0.0F).endVertex(); - builder.vertex(1.0F, -1.0F, 0.0F).uv(1.0F, 0.0F).endVertex(); - builder.vertex(1.0F, 1.0F, 0.0F).uv(1.0F, 1.0F).endVertex(); - builder.vertex(-1.0F, 1.0F, 0.0F).uv(0.0F, 1.0F).endVertex(); - builder.end(); - BufferUploader._endInternal(builder); - } - - public double getCurrentTimeSecs() - { - return (double)System.nanoTime() / 1.0E9D; - } - - public double getFrameTiming() - { - return this.getCurrentTimeSecs(); - } - - public String getinitError() - { - return this.vr.initStatus; - } - - public String getLastError() - { - return ""; - } - - public String getName() - { - return "OpenVR"; - } - - public List getRenderPasses() - { - Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); - List list = new ArrayList<>(); - list.add(RenderPass.LEFT); - list.add(RenderPass.RIGHT); - - if (dataholder.vrSettings.displayMirrorMode == VRSettings.MirrorMode.FIRST_PERSON) - { - list.add(RenderPass.CENTER); - } - else if (dataholder.vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY) - { - if (dataholder.vrSettings.mixedRealityUndistorted && dataholder.vrSettings.mixedRealityUnityLike) - { - list.add(RenderPass.CENTER); - } - - list.add(RenderPass.THIRD); - } - else if (dataholder.vrSettings.displayMirrorMode == VRSettings.MirrorMode.THIRD_PERSON) - { - list.add(RenderPass.THIRD); - } - - if (minecraft.player != null) - { - if (TelescopeTracker.isTelescope(minecraft.player.getMainHandItem()) && TelescopeTracker.isViewing(0)) - { - list.add(RenderPass.SCOPER); - } - - if (TelescopeTracker.isTelescope(minecraft.player.getOffhandItem()) && TelescopeTracker.isViewing(1)) - { - list.add(RenderPass.SCOPEL); - } - - if (dataholder.cameraTracker.isVisible()) - { - list.add(RenderPass.CAMERA); - } - } - - return list; - } - - public abstract Tuple getRenderTextureSizes(); - - public float[] getStencilMask(RenderPass eye) - { - if (this.hiddenMesheVertecies != null && (eye == RenderPass.LEFT || eye == RenderPass.RIGHT)) - { - return eye == RenderPass.LEFT ? this.hiddenMesheVertecies[0] : this.hiddenMesheVertecies[1]; - } - else - { - return null; - } - } - - public boolean isInitialized() - { - return this.vr.initSuccess; - } - - public void reinitFrameBuffers(String cause) - { - this.reinitFramebuffers = true; - System.out.println("Reinit Render: " + cause); - } - - public void setupRenderConfiguration() throws Exception - { - Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); - boolean flag = false; - - if (this.clipPlanesChanged()) - { - this.reinitFrameBuffers("Clip Planes Changed"); - } - - if (minecraft.getWindow().getWindow() != this.lastWindow) - { - this.lastWindow = minecraft.getWindow().getWindow(); - this.reinitFrameBuffers("Window Handle Changed"); - } - - if (this.lastEnableVsync != minecraft.options.enableVsync) - { - this.reinitFrameBuffers("VSync Changed"); - this.lastEnableVsync = minecraft.options.enableVsync; - } - - if (this.lastMirror != dataholder.vrSettings.displayMirrorMode) { - if (!((Xplat.isModLoaded("iris") || Xplat.isModLoaded("oculus")) && IrisHelper.isShaderActive())) { - // don't reinit with shaders, not needed - this.reinitFrameBuffers("Mirror Changed"); - } - this.lastMirror = dataholder.vrSettings.displayMirrorMode; - } - - if ((framebufferMR == null || framebufferUndistorted == null) && ((Xplat.isModLoaded("iris") || Xplat.isModLoaded("oculus")) && IrisHelper.isShaderActive())) { - this.reinitFrameBuffers("Shaders on, but some buffers not initialized"); - } - - if (this.reinitFramebuffers) - { - this.reinitShadersFlag = true; - this.checkGLError("Start Init"); - int i = minecraft.getWindow().getScreenWidth() < 1 ? 1 : minecraft.getWindow().getScreenWidth(); - int j = minecraft.getWindow().getScreenHeight() < 1 ? 1 : minecraft.getWindow().getScreenHeight(); - - if(GlUtil.getRenderer().toLowerCase().contains("intel")) //Optifine - { - throw new RenderConfigException("Incompatible", LangHelper.get("vivecraft.messages.intelgraphics", GlUtil.getRenderer())); - } - - if (!this.isInitialized()) - { - throw new RenderConfigException("Failed to initialise stereo rendering plugin: " + this.getName(), LangHelper.get(this.getinitError())); - } - - Tuple tuple = this.getRenderTextureSizes(); - int eyew = tuple.getA(); - int eyeh = tuple.getB(); - - if (this.framebufferVrRender != null) - { - this.framebufferVrRender.destroyBuffers(); - this.framebufferVrRender = null; - } - - if (this.framebufferMR != null) - { - this.framebufferMR.destroyBuffers(); - this.framebufferMR = null; - } - - if (this.framebufferUndistorted != null) - { - this.framebufferUndistorted.destroyBuffers(); - this.framebufferUndistorted = null; - } - - if (GuiHandler.guiFramebuffer != null) - { - GuiHandler.guiFramebuffer.destroyBuffers(); - GuiHandler.guiFramebuffer = null; - } - - if (KeyboardHandler.Framebuffer != null) - { - KeyboardHandler.Framebuffer.destroyBuffers(); - KeyboardHandler.Framebuffer = null; - } - - if (RadialHandler.Framebuffer != null) - { - RadialHandler.Framebuffer.destroyBuffers(); - RadialHandler.Framebuffer = null; - } - - if (this.telescopeFramebufferL != null) - { - this.telescopeFramebufferL.destroyBuffers(); - this.telescopeFramebufferL = null; - } - - if (this.telescopeFramebufferR != null) - { - this.telescopeFramebufferR.destroyBuffers(); - this.telescopeFramebufferR = null; - } - - if (this.cameraFramebuffer != null) - { - this.cameraFramebuffer.destroyBuffers(); - this.cameraFramebuffer = null; - } - - if (this.cameraRenderFramebuffer != null) - { - this.cameraRenderFramebuffer.destroyBuffers(); - this.cameraRenderFramebuffer = null; - } - - if (this.fsaaFirstPassResultFBO != null) - { - this.fsaaFirstPassResultFBO.destroyBuffers(); - this.fsaaFirstPassResultFBO = null; - } - - if (this.fsaaLastPassResultFBO != null) - { - this.fsaaLastPassResultFBO.destroyBuffers(); - this.fsaaLastPassResultFBO = null; - } - - int i1 = 0; - boolean flag1 = i1 > 0; - - if (this.LeftEyeTextureId == -1) - { - this.createRenderTexture(eyew, eyeh); - - if (this.LeftEyeTextureId == -1) - { - throw new RenderConfigException("Failed to initialise stereo rendering plugin: " + this.getName(), this.getLastError()); - } - - dataholder.print("Provider supplied render texture IDs: " + this.LeftEyeTextureId + " " + this.RightEyeTextureId); - dataholder.print("Provider supplied texture resolution: " + eyew + " x " + eyeh); - } - - this.checkGLError("Render Texture setup"); - - if (this.framebufferEye0 == null) - { - this.framebufferEye0 = new VRTextureTarget("L Eye", eyew, eyeh, false, false, this.LeftEyeTextureId, false, true, false); - dataholder.print(this.framebufferEye0.toString()); - this.checkGLError("Left Eye framebuffer setup"); - } - - if (this.framebufferEye1 == null) - { - this.framebufferEye1 = new VRTextureTarget("R Eye", eyew, eyeh, false, false, this.RightEyeTextureId, false, true, false); - dataholder.print(this.framebufferEye1.toString()); - this.checkGLError("Right Eye framebuffer setup"); - } - - this.renderScale = (float)Math.sqrt((double)dataholder.vrSettings.renderScaleFactor); - i = (int)Math.ceil((double)((float)eyew * this.renderScale)); - j = (int)Math.ceil((double)((float)eyeh * this.renderScale)); - this.framebufferVrRender = new VRTextureTarget("3D Render", i, j, true, false, -1, true, true, dataholder.vrSettings.vrUseStencil); - dataholder.print(this.framebufferVrRender.toString()); - this.checkGLError("3D framebuffer setup"); - this.mirrorFBWidth = minecraft.getWindow().getScreenWidth(); - this.mirrorFBHeight = minecraft.getWindow().getScreenHeight(); - - if (dataholder.vrSettings.displayMirrorMode == VRSettings.MirrorMode.MIXED_REALITY) - { - this.mirrorFBWidth = minecraft.getWindow().getScreenWidth() / 2; - - if (dataholder.vrSettings.mixedRealityUnityLike) - { - this.mirrorFBHeight = minecraft.getWindow().getScreenHeight() / 2; - } - } - -// if (Config.isShaders()) //Optifine -// { -// this.mirrorFBWidth = i; -// this.mirrorFBHeight = j; -// } - - List list = this.getRenderPasses(); - - for (RenderPass renderpass : list) - { - System.out.println("Passes: " + renderpass.toString()); - } - - if (list.contains(RenderPass.THIRD) || ((Xplat.isModLoaded("iris") || Xplat.isModLoaded("oculus")) && IrisHelper.isShaderActive())) - { - this.framebufferMR = new VRTextureTarget("Mixed Reality Render", this.mirrorFBWidth, this.mirrorFBHeight, true, false, -1, true, false, false); - dataholder.print(this.framebufferMR.toString()); - this.checkGLError("Mixed reality framebuffer setup"); - } - - if (list.contains(RenderPass.CENTER) || ((Xplat.isModLoaded("iris") || Xplat.isModLoaded("oculus")) && IrisHelper.isShaderActive())) - { - this.framebufferUndistorted = new VRTextureTarget("Undistorted View Render", this.mirrorFBWidth, this.mirrorFBHeight, true, false, -1, false, false, false); - dataholder.print(this.framebufferUndistorted.toString()); - this.checkGLError("Undistorted view framebuffer setup"); - } - - GuiHandler.guiFramebuffer = new VRTextureTarget("GUI", minecraft.getWindow().getScreenWidth(), minecraft.getWindow().getScreenHeight(), true, false, -1, false, true, false); - dataholder.print(GuiHandler.guiFramebuffer.toString()); - this.checkGLError("GUI framebuffer setup"); - KeyboardHandler.Framebuffer = new VRTextureTarget("Keyboard", minecraft.getWindow().getScreenWidth(), minecraft.getWindow().getScreenHeight(), true, false, -1, false, true, false); - dataholder.print(KeyboardHandler.Framebuffer.toString()); - this.checkGLError("Keyboard framebuffer setup"); - RadialHandler.Framebuffer = new VRTextureTarget("Radial Menu", minecraft.getWindow().getScreenWidth(), minecraft.getWindow().getScreenHeight(), true, false, -1, false, true, false); - dataholder.print(RadialHandler.Framebuffer.toString()); - this.checkGLError("Radial framebuffer setup"); - int j2 = 720; - int k2 = 720; - -// if (Config.isShaders()) //Optifine -// { -// j2 = i; -// k2 = j; -// } - - this.checkGLError("Mirror framebuffer setup"); - this.telescopeFramebufferR = new VRTextureTarget("TelescopeR", j2, k2, true, false, -1, true, false, false); - dataholder.print(this.telescopeFramebufferR.toString()); - this.checkGLError("TelescopeR framebuffer setup"); - this.telescopeFramebufferR.setClearColor(0.0f, 0.0f, 0.0f, 1.0f); - this.telescopeFramebufferR.clear(Minecraft.ON_OSX); - this.telescopeFramebufferL = new VRTextureTarget("TelescopeL", j2, k2, true, false, -1, true, false, false); - dataholder.print(this.telescopeFramebufferL.toString()); - this.telescopeFramebufferL.setClearColor(0.0f, 0.0f, 0.0f, 1.0f); - this.telescopeFramebufferL.clear(Minecraft.ON_OSX); - this.checkGLError("TelescopeL framebuffer setup"); - int j1 = Math.round(1920.0F * dataholder.vrSettings.handCameraResScale); - int k1 = Math.round(1080.0F * dataholder.vrSettings.handCameraResScale); - int l1 = j1; - int i2 = k1; - -// if (Config.isShaders()) //Optifine -// { -// float f = (float)j1 / (float)k1; -// -// if (f > (float)(i / j)) -// { -// j1 = i; -// k1 = Math.round((float)i / f); -// } -// else -// { -// j1 = Math.round((float)j * f); -// k1 = j; -// } -// -// l1 = i; -// i2 = j; -// } - - this.cameraFramebuffer = new VRTextureTarget("Handheld Camera", j1, k1, true, false, -1, true, false, false); - dataholder.print(this.cameraFramebuffer.toString()); - this.checkGLError("Camera framebuffer setup"); - this.cameraRenderFramebuffer = new VRTextureTarget("Handheld Camera Render", l1, i2, true, false, -1, true, true, false); - dataholder.print(this.cameraRenderFramebuffer.toString()); - this.checkGLError("Camera render framebuffer setup"); - ((GameRendererExtension) minecraft.gameRenderer).setupClipPlanes(); - this.eyeproj[0] = this.getProjectionMatrix(0, ((GameRendererExtension) minecraft.gameRenderer).getMinClipDistance(), ((GameRendererExtension) minecraft.gameRenderer).getClipDistance()); - this.eyeproj[1] = this.getProjectionMatrix(1, ((GameRendererExtension) minecraft.gameRenderer).getMinClipDistance(), ((GameRendererExtension) minecraft.gameRenderer).getClipDistance()); - - if (dataholder.vrSettings.useFsaa) - { - try - { - this.checkGLError("pre FSAA FBO creation"); - this.fsaaFirstPassResultFBO = new VRTextureTarget("FSAA Pass1 FBO", eyew, j, true, false, -1, false, false, false); - this.fsaaLastPassResultFBO = new VRTextureTarget("FSAA Pass2 FBO", eyew, eyeh, true, false, -1, false, false, false); - dataholder.print(this.fsaaFirstPassResultFBO.toString()); - dataholder.print(this.fsaaLastPassResultFBO.toString()); - this.checkGLError("FSAA FBO creation"); - VRShaders.setupFSAA(); - ShaderHelper.checkGLError("FBO init fsaa shader"); - } - catch (Exception exception) - { - dataholder.vrSettings.useFsaa = false; - dataholder.vrSettings.saveOptions(); - System.out.println(exception.getMessage()); - this.reinitFramebuffers = true; - return; - } - } - - try - { - minecraft.mainRenderTarget = this.framebufferVrRender; - VRShaders.setupDepthMask(); - ShaderHelper.checkGLError("init depth shader"); - VRShaders.setupFOVReduction(); - ShaderHelper.checkGLError("init FOV shader"); - List list1 = new ArrayList<>(); - list1.addAll(this.entityShaders.values()); - this.entityShaders.clear(); - ResourceLocation resourcelocation = new ResourceLocation("shaders/post/entity_outline.json"); - this.entityShaders.put(((RenderTargetExtension) this.framebufferVrRender).getName(), this.createShaderGroup(resourcelocation, this.framebufferVrRender)); - - if (list.contains(RenderPass.THIRD)) - { - this.entityShaders.put(((RenderTargetExtension) this.framebufferMR).getName(), this.createShaderGroup(resourcelocation, this.framebufferMR)); - } - - if (list.contains(RenderPass.CENTER)) - { - this.entityShaders.put(((RenderTargetExtension) this.framebufferUndistorted).getName(), this.createShaderGroup(resourcelocation, this.framebufferUndistorted)); - } - - this.entityShaders.put(((RenderTargetExtension) this.telescopeFramebufferL).getName(), this.createShaderGroup(resourcelocation, this.telescopeFramebufferL)); - this.entityShaders.put(((RenderTargetExtension) this.telescopeFramebufferR).getName(), this.createShaderGroup(resourcelocation, this.telescopeFramebufferR)); - this.entityShaders.put(((RenderTargetExtension) this.cameraRenderFramebuffer).getName(), this.createShaderGroup(resourcelocation, this.cameraRenderFramebuffer)); - - for (PostChain postchain : list1) - { - postchain.close(); - } - - list1.clear(); - list1.addAll(this.alphaShaders.values()); - this.alphaShaders.clear(); - - if (Minecraft.useShaderTransparency()) - { - ResourceLocation resourcelocation1 = new ResourceLocation("shaders/post/vrtransparency.json"); - this.alphaShaders.put(((RenderTargetExtension) this.framebufferVrRender).getName(), this.createShaderGroup(resourcelocation1, this.framebufferVrRender)); - - if (list.contains(RenderPass.THIRD)) - { - this.alphaShaders.put(((RenderTargetExtension) this.framebufferMR).getName(), this.createShaderGroup(resourcelocation1, this.framebufferMR)); - } - - if (list.contains(RenderPass.CENTER)) - { - this.alphaShaders.put(((RenderTargetExtension) this.framebufferUndistorted).getName(), this.createShaderGroup(resourcelocation1, this.framebufferUndistorted)); - } - - this.alphaShaders.put(((RenderTargetExtension) this.telescopeFramebufferL).getName(), this.createShaderGroup(resourcelocation1, this.telescopeFramebufferL)); - this.alphaShaders.put(((RenderTargetExtension) this.telescopeFramebufferR).getName(), this.createShaderGroup(resourcelocation1, this.telescopeFramebufferR)); - this.alphaShaders.put(((RenderTargetExtension) this.cameraRenderFramebuffer).getName(), this.createShaderGroup(resourcelocation1, this.cameraRenderFramebuffer)); - } - - for (PostChain postchain1 : list1) - { - postchain1.close(); - } - - minecraft.gameRenderer.checkEntityPostEffect(minecraft.getCameraEntity()); - } - catch (Exception exception1) - { - System.out.println(exception1.getMessage()); - System.exit(-1); - } - - if (minecraft.screen != null) - { - int l2 = minecraft.getWindow().getGuiScaledWidth(); - int j3 = minecraft.getWindow().getGuiScaledHeight(); - minecraft.screen.init(minecraft, l2, j3); - } - - long i3 = (long)(minecraft.getWindow().getScreenWidth() * minecraft.getWindow().getScreenHeight()); - long k3 = (long)(i * j * 2); - - if (list.contains(RenderPass.CENTER)) - { - k3 += i3; - } - - if (list.contains(RenderPass.THIRD)) - { - k3 += i3; - } - - System.out.println("[Minecrift] New render config:\nOpenVR target width: " + eyew + ", height: " + eyeh + " [" + String.format("%.1f", (float)(eyew * eyeh) / 1000000.0F) + " MP]\nRender target width: " + i + ", height: " + j + " [Render scale: " + Math.round(dataholder.vrSettings.renderScaleFactor * 100.0F) + "%, " + String.format("%.1f", (float)(i * j) / 1000000.0F) + " MP]\nMain window width: " + minecraft.getWindow().getScreenWidth() + ", height: " + minecraft.getWindow().getScreenHeight() + " [" + String.format("%.1f", (float)i3 / 1000000.0F) + " MP]\nTotal shaded pixels per frame: " + String.format("%.1f", (float)k3 / 1000000.0F) + " MP (eye stencil not accounted for)"); - this.lastDisplayFBWidth = i; - this.lastDisplayFBHeight = j; - this.reinitFramebuffers = false; - - if (Xplat.isModLoaded("iris") || Xplat.isModLoaded("oculus")) { - IrisHelper.reload(); - } - - } - } - - public boolean wasDisplayResized() - { - Minecraft minecraft = Minecraft.getInstance(); - int i = minecraft.getWindow().getScreenHeight(); - int j = minecraft.getWindow().getScreenWidth(); - boolean flag = this.dispLastHeight != i || this.dispLastWidth != j; - this.dispLastHeight = i; - this.dispLastWidth = j; - return flag; - } -} diff --git a/common/src/main/java/org/vivecraft/provider/openvr_jna/MCOpenVR.java b/common/src/main/java/org/vivecraft/provider/openvr_jna/MCOpenVR.java deleted file mode 100644 index f14a6e2c5..000000000 --- a/common/src/main/java/org/vivecraft/provider/openvr_jna/MCOpenVR.java +++ /dev/null @@ -1,1768 +0,0 @@ -package org.vivecraft.provider.openvr_jna; - -import org.vivecraft.ClientDataHolder; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.sun.jna.Memory; -import com.sun.jna.NativeLibrary; -import com.sun.jna.Pointer; -import com.sun.jna.ptr.FloatByReference; -import com.sun.jna.ptr.IntByReference; -import com.sun.jna.ptr.LongByReference; -import jopenvr.*; -import net.minecraft.client.KeyMapping; -import net.minecraft.client.Minecraft; -import net.minecraft.network.chat.MutableComponent; -import net.minecraft.network.chat.TranslatableComponent; -import net.minecraft.world.phys.Vec3; -import org.vivecraft.settings.VRHotkeys; -import org.vivecraft.settings.VRSettings; -import org.vivecraft.gameplay.screenhandlers.GuiHandler; -import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; -import org.vivecraft.gameplay.screenhandlers.RadialHandler; -import org.vivecraft.provider.ControllerType; -import org.vivecraft.provider.HardwareType; -import org.vivecraft.provider.InputSimulator; -import org.vivecraft.provider.MCVR; -import org.vivecraft.provider.openvr_jna.control.TrackpadSwipeSampler; -import org.vivecraft.provider.openvr_jna.control.VRInputActionSet; -import org.vivecraft.utils.Utils; -import org.vivecraft.utils.external.jinfinadeck; -import org.vivecraft.utils.external.jkatvr; -import org.vivecraft.utils.math.Matrix4f; -import org.vivecraft.utils.math.Vector3; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.FileReader; -import java.io.OutputStreamWriter; -import java.lang.management.ManagementFactory; -import java.lang.reflect.Field; -import java.nio.IntBuffer; -import java.nio.charset.StandardCharsets; -import java.util.*; - -public class MCOpenVR extends MCVR -{ - public static final int LEFT_CONTROLLER = 1; - public static final int RIGHT_CONTROLLER = 0; - public static final int THIRD_CONTROLLER = 2; - protected static MCOpenVR ome; - private final String ACTION_EXTERNAL_CAMERA = "/actions/mixedreality/in/externalcamera"; - private final String ACTION_LEFT_HAND = "/actions/global/in/lefthand"; - private final String ACTION_LEFT_HAPTIC = "/actions/global/out/lefthaptic"; - private final String ACTION_RIGHT_HAND = "/actions/global/in/righthand"; - private final String ACTION_RIGHT_HAPTIC = "/actions/global/out/righthaptic"; - private Map actionSetHandles = new EnumMap<>(VRInputActionSet.class); - private VRActiveActionSet_t.ByReference activeActionSetsReference; - private Map controllerComponentNames; - private Map controllerComponentTransforms; - private boolean dbg = true; - private long externalCameraPoseHandle; - private int[] controllerDeviceIndex = new int[3]; - private boolean getXforms = true; - private final Gson GSON = (new GsonBuilder()).setPrettyPrinting().disableHtmlEscaping().create(); - private IntByReference hmdErrorStore = new IntByReference(); - private IntBuffer hmdErrorStoreBuf; - private TrackedDevicePose_t.ByReference hmdTrackedDevicePoseReference; - private TrackedDevicePose_t[] hmdTrackedDevicePoses; - private boolean inputInitialized; - private long leftControllerHandle; - private long leftHapticHandle; - private long leftPoseHandle; - private InputOriginInfo_t.ByReference originInfo; - private boolean paused = false; - private InputPoseActionData_t.ByReference poseData; - private long rightControllerHandle; - private long rightHapticHandle; - private long rightPoseHandle; - private final VRTextureBounds_t texBounds = new VRTextureBounds_t(); - private Map trackpadSwipeSamplers = new HashMap<>(); - private boolean tried; - private Queue vrEvents = new LinkedList<>(); - private VR_IVRApplications_FnTable vrApplications; - private VR_IVRChaperone_FnTable vrChaperone; - private VR_IVROCSystem_FnTable vrOpenComposite; - private VR_IVROverlay_FnTable vrOverlay; - private VR_IVRRenderModels_FnTable vrRenderModels; - private VR_IVRSettings_FnTable vrSettings; - VR_IVRCompositor_FnTable vrCompositor; - VR_IVRInput_FnTable vrInput; - VR_IVRSystem_FnTable vrsystem; - final Texture_t texType0 = new Texture_t(); - final Texture_t texType1 = new Texture_t(); - InputDigitalActionData_t digital = new InputDigitalActionData_t.ByReference(); - InputAnalogActionData_t analog = new InputAnalogActionData_t.ByReference(); - - public MCOpenVR(Minecraft mc, ClientDataHolder dh) - { - super(mc, dh); - ome = this; - this.hapticScheduler = new OpenVRHapticScheduler(); - - for (int i = 0; i < 3; ++i) - { - this.controllerDeviceIndex[i] = -1; - this.poseData = new InputPoseActionData_t.ByReference(); - this.poseData.setAutoRead(false); - this.poseData.setAutoWrite(false); - this.poseData.setAutoSynch(false); - this.originInfo = new InputOriginInfo_t.ByReference(); - this.originInfo.setAutoRead(false); - this.originInfo.setAutoWrite(false); - this.originInfo.setAutoSynch(false); - } - - this.digital.setAutoRead(false); - this.digital.setAutoWrite(false); - this.digital.setAutoSynch(false); - this.analog.setAutoRead(false); - this.analog.setAutoWrite(false); - this.analog.setAutoSynch(false); - } - - public static MCOpenVR get() - { - return ome; - } - - static String getInputErrorName(int code) - { - switch (code) - { - case 0: - return "wat"; - - case 1: - return "NameNotFound"; - - case 2: - return "WrongType"; - - case 3: - return "InvalidHandle"; - - case 4: - return "InvalidParam"; - - case 5: - return "NoSteam"; - - case 6: - return "MaxCapacityReached"; - - case 7: - return "IPCError"; - - case 8: - return "NoActiveActionSet"; - - case 9: - return "InvalidDevice"; - - case 10: - return "InvalidSkeleton"; - - case 11: - return "InvalidBoneCount"; - - case 12: - return "InvalidCompressedData"; - - case 13: - return "NoData"; - - case 14: - return "BufferTooSmall"; - - case 15: - return "MismatchedActionManifest"; - - case 16: - return "MissingSkeletonData"; - - case 17: - return "InvalidBoneIndex"; - - default: - return "Unknown"; - } - } - - public void destroy() - { - if (this.initialized) - { - try - { - JOpenVRLibrary.VR_ShutdownInternal(); - this.initialized = false; - - if (ClientDataHolder.katvr) - { - jkatvr.Halt(); - } - - if (ClientDataHolder.infinadeck) - { - jinfinadeck.Destroy(); - } - } - catch (Throwable throwable) - { - throwable.printStackTrace(); - } - } - } - - public String getID() - { - return "openvr_jna"; - } - - public String getName() - { - return "OpenVR_JNA"; - } - - public float[] getPlayAreaSize() - { - if (this.vrChaperone != null && this.vrChaperone.GetPlayAreaSize != null) - { - FloatByReference floatbyreference = new FloatByReference(); - FloatByReference floatbyreference1 = new FloatByReference(); - byte b0 = this.vrChaperone.GetPlayAreaSize.apply(floatbyreference1, floatbyreference); - return b0 == 1 ? new float[] {floatbyreference1.getValue() * this.dh.vrSettings.walkMultiplier, floatbyreference.getValue() * this.dh.vrSettings.walkMultiplier} : null; - } - else - { - return null; - } - } - - public boolean init() - { - if (this.initialized) - { - return true; - } - else if (this.tried) - { - return this.initialized; - } - else - { - this.tried = true; - this.mc = Minecraft.getInstance(); - try - { - this.initializeJOpenVR(); - this.initOpenVRCompositor(); - this.initOpenVRSettings(); - this.initOpenVRRenderModels(); - this.initOpenVRChaperone(); - this.initOpenVRApplications(); - this.initOpenVRInput(); - // this.initOpenComposite(); - } - catch (Exception exception2) - { - exception2.printStackTrace(); - this.initSuccess = false; - this.initStatus = exception2.getLocalizedMessage(); - return false; - } - - if (this.vrInput == null) - { - System.out.println("Controller input not available. Forcing seated mode."); - this.dh.vrSettings.seated = true; - } - - System.out.println("OpenVR initialized & VR connected."); - this.deviceVelocity = new Vec3[64]; - - for (int i = 0; i < this.poseMatrices.length; ++i) - { - this.poseMatrices[i] = new Matrix4f(); - this.deviceVelocity[i] = new Vec3(0.0D, 0.0D, 0.0D); - } - - this.initialized = true; - - if (ClientDataHolder.katvr) - { - try - { - System.out.println("Waiting for KATVR...."); - Utils.unpackNatives("katvr"); - NativeLibrary.addSearchPath("WalkerBase.dll", (new File("openvr/katvr")).getAbsolutePath()); - jkatvr.Init(1); - jkatvr.Launch(); - - if (jkatvr.CheckForLaunch()) - { - System.out.println("KATVR Loaded"); - } - else - { - System.out.println("KATVR Failed to load"); - } - } - catch (Exception exception1) - { - System.out.println("KATVR crashed: " + exception1.getMessage()); - } - } - - if (ClientDataHolder.infinadeck) - { - try - { - System.out.println("Waiting for Infinadeck...."); - Utils.unpackNatives("infinadeck"); - NativeLibrary.addSearchPath("InfinadeckAPI.dll", (new File("openvr/infinadeck")).getAbsolutePath()); - - if (jinfinadeck.InitConnection()) - { - jinfinadeck.CheckConnection(); - System.out.println("Infinadeck Loaded"); - } - else - { - System.out.println("Infinadeck Failed to load"); - } - } - catch (Exception exception) - { - System.out.println("Infinadeck crashed: " + exception.getMessage()); - } - } - - return true; - } - } - - public void poll(long frameIndex) - { - if (this.initialized) - { - this.paused = this.vrsystem.ShouldApplicationPause.apply() != 0; - this.mc.getProfiler().push("events"); - this.pollVREvents(); - - if (!this.dh.vrSettings.seated) - { - this.mc.getProfiler().popPush("controllers"); - this.mc.getProfiler().push("gui"); - - if (this.mc.screen == null && this.dh.vrSettings.vrTouchHotbar) - { - VRSettings vrsettings = this.dh.vrSettings; - - if (this.dh.vrSettings.vrHudLockMode != VRSettings.HUDLock.HEAD && this.hudPopup) - { - this.processHotbar(); - } - } - - this.mc.getProfiler().pop(); - } - - this.mc.getProfiler().popPush("processEvents"); - this.processVREvents(); - this.mc.getProfiler().popPush("updatePose/Vsync"); - this.updatePose(); - this.mc.getProfiler().popPush("processInputs"); - this.processInputs(); - this.mc.getProfiler().popPush("hmdSampling"); - this.hmdSampling(); - this.mc.getProfiler().pop(); - } - } - - public void processInputs() - { - if (!this.dh.vrSettings.seated && !ClientDataHolder.viewonly && this.inputInitialized) - { - for (VRInputAction vrinputaction : this.inputActions.values()) - { - if (vrinputaction.isHanded()) - { - for (ControllerType controllertype : ControllerType.values()) - { - vrinputaction.setCurrentHand(controllertype); - this.processInputAction(vrinputaction); - } - } - else - { - this.processInputAction(vrinputaction); - } - } - - this.processScrollInput(GuiHandler.keyScrollAxis, () -> - { - InputSimulator.scrollMouse(0.0D, 1.0D); - }, () -> - { - InputSimulator.scrollMouse(0.0D, -1.0D); - }); - this.processScrollInput(this.keyHotbarScroll, () -> - { - this.changeHotbar(-1); - }, () -> - { - this.changeHotbar(1); - }); - this.processSwipeInput(this.keyHotbarSwipeX, () -> - { - this.changeHotbar(1); - }, () -> - { - this.changeHotbar(-1); - }, (Runnable)null, (Runnable)null); - this.processSwipeInput(this.keyHotbarSwipeY, (Runnable)null, (Runnable)null, () -> - { - this.changeHotbar(-1); - }, () -> - { - this.changeHotbar(1); - }); - this.ignorePressesNextFrame = false; - } - } - - @Deprecated - protected void triggerBindingHapticPulse(KeyMapping binding, int duration) - { - ControllerType controllertype = this.findActiveBindingControllerType(binding); - - if (controllertype != null) - { - this.triggerHapticPulse(controllertype, duration); - } - } - - private boolean isError() - { - return this.hmdErrorStore.getValue() != 0 || this.hmdErrorStoreBuf.get(0) != 0; - } - - private void debugOut(int deviceindex) - { - System.out.println("******************* VR DEVICE: " + deviceindex + " *************************"); - - for (Field field : JOpenVRLibrary.ETrackedDeviceProperty.class.getDeclaredFields()) - { - try - { - String[] astring = field.getName().split("_"); - String s = astring[astring.length - 1]; - String s1 = ""; - - if (s.equals("Float")) - { - s1 = s1 + field.getName() + " " + this.vrsystem.GetFloatTrackedDeviceProperty.apply(deviceindex, field.getInt((Object)null), this.hmdErrorStore); - } - else if (s.equals("String")) - { - Pointer pointer = new Memory(32768L); - this.vrsystem.GetStringTrackedDeviceProperty.apply(deviceindex, field.getInt((Object)null), pointer, 32767, this.hmdErrorStore); - s1 = s1 + field.getName() + " " + pointer.getString(0L); - } - else if (s.equals("Bool")) - { - s1 = s1 + field.getName() + " " + this.vrsystem.GetBoolTrackedDeviceProperty.apply(deviceindex, field.getInt((Object)null), this.hmdErrorStore); - } - else if (s.equals("Int32")) - { - s1 = s1 + field.getName() + " " + this.vrsystem.GetInt32TrackedDeviceProperty.apply(deviceindex, field.getInt((Object)null), this.hmdErrorStore); - } - else if (s.equals("Uint64")) - { - s1 = s1 + field.getName() + " " + this.vrsystem.GetUint64TrackedDeviceProperty.apply(deviceindex, field.getInt((Object)null), this.hmdErrorStore); - } - else - { - s1 = s1 + field.getName() + " (skipped)"; - } - - System.out.println(s1.replace("ETrackedDeviceProperty_Prop_", "")); - } - catch (IllegalAccessException illegalaccessexception) - { - illegalaccessexception.printStackTrace(); - } - } - - System.out.println("******************* END VR DEVICE: " + deviceindex + " *************************"); - } - - protected ControllerType findActiveBindingControllerType(KeyMapping binding) - { - if (!this.inputInitialized) - { - return null; - } - else - { - long i = this.getInputAction(binding).getLastOrigin(); - return i != 0L ? this.getOriginControllerType(i) : null; - } - } - - private String findEvent(int eventcode) - { - Field[] afield = JOpenVRLibrary.EVREventType.class.getFields(); - - for (Field field : afield) - { - if (field.getType() == Integer.TYPE) - { - String s = field.getName(); - - try - { - int i = field.getInt((Object)null); - - if (i == eventcode) - { - return s; - } - } - catch (IllegalArgumentException illegalargumentexception) - { - illegalargumentexception.printStackTrace(); - } - catch (IllegalAccessException illegalaccessexception) - { - illegalaccessexception.printStackTrace(); - } - } - } - - return ""; - } - - private void generateActionManifest() - { - Map map = new HashMap<>(); - List> list = new ArrayList<>(); - - for (VRInputActionSet vrinputactionset : VRInputActionSet.values()) - { - String s = vrinputactionset.usage; - - if (vrinputactionset.advanced && !this.dh.vrSettings.allowAdvancedBindings) - { - s = "hidden"; - } - - list.add(ImmutableMap.builder().put("name", vrinputactionset.name).put("usage", s).build()); - } - - map.put("action_sets", list); - List list1 = new ArrayList<>(this.inputActions.values()); - list1.sort(Comparator.comparing((action) -> - { - return action.keyBinding; - })); - List> list2 = new ArrayList<>(); - - for (VRInputAction vrinputaction : list1) - { - list2.add(ImmutableMap.builder().put("name", vrinputaction.name).put("requirement", vrinputaction.requirement).put("type", vrinputaction.type).build()); - } - - list2.add(ImmutableMap.builder().put("name", "/actions/global/in/lefthand").put("requirement", "suggested").put("type", "pose").build()); - list2.add(ImmutableMap.builder().put("name", "/actions/global/in/righthand").put("requirement", "suggested").put("type", "pose").build()); - list2.add(ImmutableMap.builder().put("name", "/actions/mixedreality/in/externalcamera").put("requirement", "optional").put("type", "pose").build()); - list2.add(ImmutableMap.builder().put("name", "/actions/global/out/lefthaptic").put("requirement", "suggested").put("type", "vibration").build()); - list2.add(ImmutableMap.builder().put("name", "/actions/global/out/righthaptic").put("requirement", "suggested").put("type", "vibration").build()); - map.put("actions", list2); - Map map1 = new HashMap<>(); - - for (VRInputAction vrinputaction1 : list1) - { - MutableComponent component = new TranslatableComponent(vrinputaction1.keyBinding.getCategory()).append(" - ").append(new TranslatableComponent(vrinputaction1.keyBinding.getName())); - map1.put(vrinputaction1.name, component.getString()); - } - - for (VRInputActionSet vrinputactionset1 : VRInputActionSet.values()) - { - TranslatableComponent component = new TranslatableComponent(vrinputactionset1.localizedName); - map1.put(vrinputactionset1.name, component.getString()); - } - - map1.put("/actions/global/in/lefthand", "Left Hand Pose"); - map1.put("/actions/global/in/righthand", "Right Hand Pose"); - map1.put("/actions/mixedreality/in/externalcamera", "External Camera"); - map1.put("/actions/global/out/lefthaptic", "Left Hand Haptic"); - map1.put("/actions/global/out/righthaptic", "Right Hand Haptic"); - map1.put("language_tag", "en_US"); - map.put("localization", ImmutableList.>builder().add(map1).build()); - List> list3 = new ArrayList<>(); - list3.add(ImmutableMap.builder().put("controller_type", "vive_controller").put("binding_url", "vive_defaults.json").build()); - list3.add(ImmutableMap.builder().put("controller_type", "oculus_touch").put("binding_url", "oculus_defaults.json").build()); - list3.add(ImmutableMap.builder().put("controller_type", "holographic_controller").put("binding_url", "wmr_defaults.json").build()); - list3.add(ImmutableMap.builder().put("controller_type", "knuckles").put("binding_url", "knuckles_defaults.json").build()); - list3.add(ImmutableMap.builder().put("controller_type", "vive_cosmos_controller").put("binding_url", "cosmos_defaults.json").build()); - list3.add(ImmutableMap.builder().put("controller_type", "vive_tracker_camera").put("binding_url", "tracker_defaults.json").build()); - map.put("default_bindings", list3); - - try - { - (new File("openvr/input")).mkdirs(); - - try (OutputStreamWriter outputstreamwriter = new OutputStreamWriter(new FileOutputStream("openvr/input/action_manifest.json"), StandardCharsets.UTF_8)) - { - this.GSON.toJson(map, outputstreamwriter); - } - } - catch (Exception exception) - { - throw new RuntimeException("Failed to write action manifest", exception); - } - - String s1 = this.dh.vrSettings.reverseHands ? "_reversed" : ""; - Utils.loadAssetToFile("input/vive_defaults" + s1 + ".json", new File("openvr/input/vive_defaults.json"), false); - Utils.loadAssetToFile("input/oculus_defaults" + s1 + ".json", new File("openvr/input/oculus_defaults.json"), false); - Utils.loadAssetToFile("input/wmr_defaults" + s1 + ".json", new File("openvr/input/wmr_defaults.json"), false); - Utils.loadAssetToFile("input/knuckles_defaults" + s1 + ".json", new File("openvr/input/knuckles_defaults.json"), false); - Utils.loadAssetToFile("input/cosmos_defaults" + s1 + ".json", new File("openvr/input/cosmos_defaults.json"), false); - Utils.loadAssetToFile("input/tracker_defaults.json", new File("openvr/input/tracker_defaults.json"), false); - } - - private long getActionHandle(String name) - { - LongByReference longbyreference = new LongByReference(); - int i = this.vrInput.GetActionHandle.apply(this.ptrFomrString(name), longbyreference); - - if (i != 0) - { - throw new RuntimeException("Error getting action handle for '" + name + "': " + getInputErrorName(i)); - } - else - { - return longbyreference.getValue(); - } - } - - private VRActiveActionSet_t[] getActiveActionSets() - { - ArrayList arraylist = new ArrayList<>(); - arraylist.add(VRInputActionSet.GLOBAL); - - // we are always modded - arraylist.add(VRInputActionSet.MOD); - - arraylist.add(VRInputActionSet.MIXED_REALITY); - arraylist.add(VRInputActionSet.TECHNICAL); - - if (this.mc.screen == null) - { - arraylist.add(VRInputActionSet.INGAME); - arraylist.add(VRInputActionSet.CONTEXTUAL); - } - else - { - arraylist.add(VRInputActionSet.GUI); - } - - if (KeyboardHandler.Showing || RadialHandler.isShowing()) - { - arraylist.add(VRInputActionSet.KEYBOARD); - } - - this.activeActionSetsReference = new VRActiveActionSet_t.ByReference(); - this.activeActionSetsReference.setAutoRead(false); - this.activeActionSetsReference.setAutoWrite(false); - this.activeActionSetsReference.setAutoSynch(false); - VRActiveActionSet_t[] avractiveactionset_t = (VRActiveActionSet_t[])this.activeActionSetsReference.toArray(arraylist.size()); - - for (int i = 0; i < arraylist.size(); ++i) - { - VRInputActionSet vrinputactionset = arraylist.get(i); - avractiveactionset_t[i].ulActionSet = this.getActionSetHandle(vrinputactionset); - avractiveactionset_t[i].ulRestrictedToDevice = 0L; - avractiveactionset_t[i].nPriority = 0; - avractiveactionset_t[i].setAutoRead(false); - avractiveactionset_t[i].setAutoWrite(false); - avractiveactionset_t[i].setAutoSynch(false); - avractiveactionset_t[i].write(); - } - - this.activeActionSetsReference.write(); - return avractiveactionset_t; - } - - public Matrix4f getControllerComponentTransform(int controllerIndex, String componenetName) - { - return this.controllerComponentTransforms != null && this.controllerComponentTransforms.containsKey(componenetName) && ((Matrix4f[])this.controllerComponentTransforms.get(componenetName))[controllerIndex] != null ? (this.controllerComponentTransforms.get(componenetName))[controllerIndex] : Utils.Matrix4fSetIdentity(new Matrix4f()); - } - - private Matrix4f getControllerComponentTransformFromButton(int controllerIndex, long button) - { - return this.controllerComponentNames != null && this.controllerComponentNames.containsKey(button) ? this.getControllerComponentTransform(controllerIndex, this.controllerComponentNames.get(button)) : new Matrix4f(); - } - - private int getError() - { - return this.hmdErrorStore.getValue() != 0 ? this.hmdErrorStore.getValue() : this.hmdErrorStoreBuf.get(0); - } - - long getHapticHandle(ControllerType hand) - { - return hand == ControllerType.RIGHT ? this.rightHapticHandle : this.leftHapticHandle; - } - - private InputOriginInfo_t getOriginInfo(long inputValueHandle) - { - InputOriginInfo_t inputorigininfo_t = new InputOriginInfo_t(); - this.readOriginInfo(inputValueHandle); - inputorigininfo_t.devicePath = this.originInfo.devicePath; - inputorigininfo_t.trackedDeviceIndex = this.originInfo.trackedDeviceIndex; - inputorigininfo_t.rchRenderModelComponentName = this.originInfo.rchRenderModelComponentName; - return inputorigininfo_t; - } - - private String getOriginName(long handle) - { - Pointer pointer = new Memory(32769L); - int i = this.vrInput.GetOriginLocalizedName.apply(handle, pointer, 32768, -1); - - if (i != 0) - { - throw new RuntimeException("Error getting origin name: " + getInputErrorName(i)); - } - else - { - return pointer.getString(0L); - } - } - - float getSuperSampling() - { - return this.vrSettings == null ? -1.0F : this.vrSettings.GetFloat.apply(this.ptrFomrString("steamvr"), this.ptrFomrString("supersampleScale"), this.hmdErrorStore); - } - - private void getTransforms() - { - if (this.vrRenderModels != null) - { - if (this.getXforms) - { - this.controllerComponentTransforms = new HashMap<>(); - } - - if (this.controllerComponentNames == null) - { - this.controllerComponentNames = new HashMap<>(); - } - - int i = this.vrRenderModels.GetRenderModelCount.apply(); - Pointer pointer = new Memory(32768L); - List list = new ArrayList<>(); - list.add("tip"); - list.add("handgrip"); - boolean flag = false; - - for (String s : list) - { - this.controllerComponentTransforms.put(s, new Matrix4f[2]); - - for (int j = 0; j < 2; ++j) - { - if (this.controllerDeviceIndex[j] == -1) - { - flag = true; - } - else - { - this.vrsystem.GetStringTrackedDeviceProperty.apply(this.controllerDeviceIndex[j], 1003, pointer, 32767, this.hmdErrorStore); - String s1 = pointer.getString(0L); - Pointer pointer1 = this.ptrFomrString(s); - Pointer pointer2 = new Memory(32768L); - this.vrsystem.GetStringTrackedDeviceProperty.apply(this.controllerDeviceIndex[j], 1037, pointer2, 32767, this.hmdErrorStore); - String s2 = pointer2.getString(0L); - boolean flag1 = s2.contains("holographic"); - boolean flag2 = s2.contains("rifts"); - - if (flag1 && s.equals("handgrip")) - { - pointer1 = this.ptrFomrString("body"); - } - - long k = this.vrRenderModels.GetComponentButtonMask.apply(pointer, pointer1); - - if (k > 0L) - { - this.controllerComponentNames.put(k, s); - } - - long l = j == 0 ? this.rightControllerHandle : this.leftControllerHandle; - - if (l == 0L) - { - flag = true; - } - else - { - RenderModel_ControllerMode_State_t.ByReference rendermodel_controllermode_state_t$byreference = new RenderModel_ControllerMode_State_t.ByReference(); - RenderModel_ComponentState_t.ByReference rendermodel_componentstate_t$byreference = new RenderModel_ComponentState_t.ByReference(); - byte b0 = this.vrRenderModels.GetComponentStateForDevicePath.apply(pointer, pointer1, l, rendermodel_controllermode_state_t$byreference, rendermodel_componentstate_t$byreference); - - if (b0 == 0) - { - flag = true; - } - else - { - Matrix4f matrix4f = new Matrix4f(); - OpenVRUtil.convertSteamVRMatrix3ToMatrix4f(rendermodel_componentstate_t$byreference.mTrackingToComponentLocal, matrix4f); - (this.controllerComponentTransforms.get(s))[j] = matrix4f; - - if (j == 1 && flag2 && s.equals("handgrip")) - { - (this.controllerComponentTransforms.get(s))[1] = (this.controllerComponentTransforms.get(s))[0]; - } - - if (!flag && j == 0) - { - try - { - Matrix4f matrix4f1 = this.getControllerComponentTransform(0, "tip"); - Matrix4f matrix4f2 = this.getControllerComponentTransform(0, "handgrip"); - Vector3 vector3 = matrix4f1.transform(this.forward); - Vector3 vector31 = matrix4f2.transform(this.forward); - double d0 = (double)Math.abs(vector3.normalized().dot(vector31.normalized())); - double d1 = Math.acos(d0); - double d2 = Math.toDegrees(d1); - double d3 = Math.acos((double)vector3.normalized().dot(this.forward.normalized())); - double d4 = Math.toDegrees(d3); - this.gunStyle = d2 > 10.0D; - this.gunAngle = d2; - } - catch (Exception exception) - { - flag = true; - } - } - } - } - } - } - } - - this.getXforms = flag; - } - } - - private boolean hasOpenComposite() - { - return this.vrOpenComposite != null; - } - - private void initializeJOpenVR() - { - this.hmdErrorStoreBuf = IntBuffer.allocate(1); - this.vrsystem = null; - JOpenVRLibrary.VR_InitInternal(this.hmdErrorStoreBuf, 1); - - if (!this.isError()) - { - this.vrsystem = new VR_IVRSystem_FnTable(JOpenVRLibrary.VR_GetGenericInterface(JOpenVRLibrary.IVRSystem_Version, this.hmdErrorStoreBuf)); - } - - if (this.vrsystem != null && !this.isError()) - { - this.vrsystem.setAutoSynch(false); - this.vrsystem.read(); - System.out.println("OpenVR System Initialized OK."); - this.hmdTrackedDevicePoseReference = new TrackedDevicePose_t.ByReference(); - this.hmdTrackedDevicePoses = (TrackedDevicePose_t[])this.hmdTrackedDevicePoseReference.toArray(64); - this.poseMatrices = new Matrix4f[64]; - - for (int i = 0; i < this.poseMatrices.length; ++i) - { - this.poseMatrices[i] = new Matrix4f(); - } - - this.hmdTrackedDevicePoseReference.setAutoRead(false); - this.hmdTrackedDevicePoseReference.setAutoWrite(false); - this.hmdTrackedDevicePoseReference.setAutoSynch(false); - - for (int j = 0; j < 64; ++j) - { - this.hmdTrackedDevicePoses[j].setAutoRead(false); - this.hmdTrackedDevicePoses[j].setAutoWrite(false); - this.hmdTrackedDevicePoses[j].setAutoSynch(false); - } - - this.initSuccess = true; - } - else - { - throw new RuntimeException(JOpenVRLibrary.VR_GetVRInitErrorAsEnglishDescription(this.getError()).getString(0L)); - } - } - - public boolean postinit() - { - this.initInputAndApplication(); - return this.inputInitialized; - } - - private void initInputAndApplication() - { - this.populateInputActions(); - - if (this.vrInput != null) - { - this.generateActionManifest(); - this.loadActionManifest(); - this.loadActionHandles(); - this.installApplicationManifest(false); - this.inputInitialized = true; - } - } - - private void initOpenComposite() - { - this.vrOpenComposite = new VR_IVROCSystem_FnTable(JOpenVRLibrary.VR_GetGenericInterface("FnTable:IVROCSystem_001", this.hmdErrorStoreBuf)); - - if (!this.isError()) - { - this.vrOpenComposite.setAutoSynch(false); - this.vrOpenComposite.read(); - System.out.println("OpenComposite initialized."); - } - else - { - System.out.println("OpenComposite not found: " + JOpenVRLibrary.VR_GetVRInitErrorAsEnglishDescription(this.getError()).getString(0L)); - this.vrOpenComposite = null; - } - } - - private void initOpenVRApplications() - { - this.vrApplications = new VR_IVRApplications_FnTable(JOpenVRLibrary.VR_GetGenericInterface(JOpenVRLibrary.IVRApplications_Version, this.hmdErrorStoreBuf)); - - if (!this.isError()) - { - this.vrApplications.setAutoSynch(false); - this.vrApplications.read(); - System.out.println("OpenVR Applications initialized OK"); - } - else - { - System.out.println("VRApplications init failed: " + JOpenVRLibrary.VR_GetVRInitErrorAsEnglishDescription(this.getError()).getString(0L)); - this.vrApplications = null; - } - } - - private void initOpenVRChaperone() - { - this.vrChaperone = new VR_IVRChaperone_FnTable(JOpenVRLibrary.VR_GetGenericInterface(JOpenVRLibrary.IVRChaperone_Version, this.hmdErrorStoreBuf)); - - if (!this.isError()) - { - this.vrChaperone.setAutoSynch(false); - this.vrChaperone.read(); - System.out.println("OpenVR chaperone initialized."); - } - else - { - System.out.println("VRChaperone init failed: " + JOpenVRLibrary.VR_GetVRInitErrorAsEnglishDescription(this.getError()).getString(0L)); - this.vrChaperone = null; - } - } - - private void initOpenVRCompositor() throws Exception - { - if (this.vrsystem != null) - { - this.vrCompositor = new VR_IVRCompositor_FnTable(JOpenVRLibrary.VR_GetGenericInterface(JOpenVRLibrary.IVRCompositor_Version, this.hmdErrorStoreBuf)); - - if (this.vrCompositor == null || this.isError()) - { - throw new Exception(JOpenVRLibrary.VR_GetVRInitErrorAsEnglishDescription(this.getError()).getString(0L)); - } - - System.out.println("OpenVR Compositor initialized OK."); - this.vrCompositor.setAutoSynch(false); - this.vrCompositor.read(); - this.vrCompositor.SetTrackingSpace.apply(1); - int i = 20; - Pointer pointer = new Memory((long)i); - System.out.println("TrackingSpace: " + this.vrCompositor.GetTrackingSpace.apply()); - this.vrsystem.GetStringTrackedDeviceProperty.apply(0, 1005, pointer, i, this.hmdErrorStore); - String s = pointer.getString(0L); - System.out.println("Device manufacturer is: " + s); - this.detectedHardware = HardwareType.fromManufacturer(s); - this.dh.vrSettings.loadOptions(); - VRHotkeys.loadExternalCameraConfig(); - } - - if (this.vrCompositor == null) - { - System.out.println("Skipping VR Compositor..."); - } - - this.texBounds.uMax = 1.0F; - this.texBounds.uMin = 0.0F; - this.texBounds.vMax = 1.0F; - this.texBounds.vMin = 0.0F; - this.texBounds.setAutoSynch(false); - this.texBounds.setAutoRead(false); - this.texBounds.setAutoWrite(false); - this.texBounds.write(); - this.texType0.eColorSpace = 1; - this.texType0.eType = 1; - this.texType0.handle = Pointer.createConstant(-1); - this.texType0.setAutoSynch(false); - this.texType0.setAutoRead(false); - this.texType0.setAutoWrite(false); - this.texType0.write(); - this.texType1.eColorSpace = 1; - this.texType1.eType = 1; - this.texType1.handle = Pointer.createConstant(-1); - this.texType1.setAutoSynch(false); - this.texType1.setAutoRead(false); - this.texType1.setAutoWrite(false); - this.texType1.write(); - System.out.println("OpenVR Compositor initialized OK."); - } - - private boolean initOpenVRControlPanel() - { - return true; - } - - private void initOpenVRInput() - { - this.vrInput = new VR_IVRInput_FnTable(JOpenVRLibrary.VR_GetGenericInterface(JOpenVRLibrary.IVRInput_Version, this.hmdErrorStoreBuf)); - - if (!this.isError()) - { - this.vrInput.setAutoSynch(false); - this.vrInput.read(); - System.out.println("OpenVR Input initialized OK"); - } - else - { - System.out.println("VRInput init failed: " + JOpenVRLibrary.VR_GetVRInitErrorAsEnglishDescription(this.getError()).getString(0L)); - this.vrInput = null; - } - } - - private void initOpenVRRenderModels() - { - this.vrRenderModels = new VR_IVRRenderModels_FnTable(JOpenVRLibrary.VR_GetGenericInterface(JOpenVRLibrary.IVRRenderModels_Version, this.hmdErrorStoreBuf)); - - if (!this.isError()) - { - this.vrRenderModels.setAutoSynch(false); - this.vrRenderModels.read(); - System.out.println("OpenVR RenderModels initialized OK"); - } - else - { - System.out.println("VRRenderModels init failed: " + JOpenVRLibrary.VR_GetVRInitErrorAsEnglishDescription(this.getError()).getString(0L)); - this.vrRenderModels = null; - } - } - - private void initOpenVRSettings() - { - this.vrSettings = new VR_IVRSettings_FnTable(JOpenVRLibrary.VR_GetGenericInterface(JOpenVRLibrary.IVRSettings_Version, this.hmdErrorStoreBuf)); - - if (!this.isError()) - { - this.vrSettings.setAutoSynch(false); - this.vrSettings.read(); - System.out.println("OpenVR Settings initialized OK"); - } - else - { - System.out.println("VRSettings init failed: " + JOpenVRLibrary.VR_GetVRInitErrorAsEnglishDescription(this.getError()).getString(0L)); - this.vrSettings = null; - } - } - - private void installApplicationManifest(boolean force) - { - File file1 = new File("openvr/vivecraft.vrmanifest"); - Utils.loadAssetToFile("vivecraft.vrmanifest", file1, true); - File file2 = new File("openvr/custom.vrmanifest"); - - if (file2.exists()) - { - file1 = file2; - } - - if (this.vrApplications != null) - { - String s; - - try - { - Map map = (new Gson()).fromJson(new FileReader(file1), Map.class); - s = ((Map)((List)map.get("applications")).get(0)).get("app_key").toString(); - } - catch (Exception exception1) - { - System.out.println("Error reading appkey from manifest"); - exception1.printStackTrace(); - return; - } - - System.out.println("Appkey: " + s); - - if (!force && this.vrApplications.IsApplicationInstalled.apply(this.ptrFomrString(s)) != 0) - { - System.out.println("Application manifest already installed"); - } - else - { - int i = this.vrApplications.AddApplicationManifest.apply(this.ptrFomrString(file1.getAbsolutePath()), (byte)1); - - if (i != 0) - { - System.out.println("Failed to install application manifest: " + this.vrApplications.GetApplicationsErrorNameFromEnum.apply(i).getString(0L)); - return; - } - - System.out.println("Application manifest installed successfully"); - } - - int j; - - try - { - String s1 = ManagementFactory.getRuntimeMXBean().getName(); - j = Integer.parseInt(s1.split("@")[0]); - } - catch (Exception exception) - { - System.out.println("Error getting process id"); - exception.printStackTrace(); - return; - } - - int k = this.vrApplications.IdentifyApplication.apply(j, this.ptrFomrString(s)); - - if (k != 0) - { - System.out.println("Failed to identify application: " + this.vrApplications.GetApplicationsErrorNameFromEnum.apply(k).getString(0L)); - } - else - { - System.out.println("Application identified successfully"); - } - } - } - - private void loadActionHandles() - { - LongByReference longbyreference = new LongByReference(); - - for (VRInputAction vrinputaction : this.inputActions.values()) - { - int i = this.vrInput.GetActionHandle.apply(this.ptrFomrString(vrinputaction.name), longbyreference); - - if (i != 0) - { - throw new RuntimeException("Error getting action handle for '" + vrinputaction.name + "': " + getInputErrorName(i)); - } - - vrinputaction.setHandle(longbyreference.getValue()); - } - - this.leftPoseHandle = this.getActionHandle("/actions/global/in/lefthand"); - this.rightPoseHandle = this.getActionHandle("/actions/global/in/righthand"); - this.leftHapticHandle = this.getActionHandle("/actions/global/out/lefthaptic"); - this.rightHapticHandle = this.getActionHandle("/actions/global/out/righthaptic"); - this.externalCameraPoseHandle = this.getActionHandle("/actions/mixedreality/in/externalcamera"); - - for (VRInputActionSet vrinputactionset : VRInputActionSet.values()) - { - int j = this.vrInput.GetActionSetHandle.apply(this.ptrFomrString(vrinputactionset.name), longbyreference); - - if (j != 0) - { - throw new RuntimeException("Error getting action set handle for '" + vrinputactionset.name + "': " + getInputErrorName(j)); - } - - this.actionSetHandles.put(vrinputactionset, longbyreference.getValue()); - } - - this.leftControllerHandle = this.getInputSourceHandle("/user/hand/left"); - this.rightControllerHandle = this.getInputSourceHandle("/user/hand/right"); - } - - private void loadActionManifest() - { - int i = this.vrInput.SetActionManifestPath.apply(this.ptrFomrString((new File("openvr/input/action_manifest.json")).getAbsolutePath())); - - if (i != 0) - { - throw new RuntimeException("Failed to load action manifest: " + getInputErrorName(i)); - } - } - - private void pollVREvents() - { - if (this.vrsystem != null) - { - for (VREvent_t vrevent_t = new VREvent_t(); this.vrsystem.PollNextEvent.apply(vrevent_t, vrevent_t.size()) > 0; vrevent_t = new VREvent_t()) - { - this.vrEvents.add(vrevent_t); - } - } - } - - private void processInputAction(VRInputAction action) - { - if (action.isActive() && action.isEnabledRaw()) - { - if (action.isButtonChanged()) - { - if (action.isButtonPressed() && action.isEnabled()) - { - if (!this.ignorePressesNextFrame) - { - action.pressBinding(); - } - } - else - { - action.unpressBinding(); - } - } - } - else - { - action.unpressBinding(); - } - } - - private void processScrollInput(KeyMapping keyBinding, Runnable upCallback, Runnable downCallback) - { - VRInputAction vrinputaction = this.getInputAction(keyBinding); - - if (vrinputaction.isEnabled() && vrinputaction.getLastOrigin() != 0L && vrinputaction.getAxis2D(true).getY() != 0.0F) - { - float f = vrinputaction.getAxis2D(false).getY(); - - if (f > 0.0F) - { - upCallback.run(); - } - else if (f < 0.0F) - { - downCallback.run(); - } - } - } - - private void processSwipeInput(KeyMapping keyBinding, Runnable leftCallback, Runnable rightCallback, Runnable upCallback, Runnable downCallback) - { - VRInputAction vrinputaction = this.getInputAction(keyBinding); - - if (vrinputaction.isEnabled() && vrinputaction.getLastOrigin() != 0L) - { - ControllerType controllertype = this.findActiveBindingControllerType(keyBinding); - - if (controllertype != null) - { - if (!this.trackpadSwipeSamplers.containsKey(keyBinding.getName())) - { - this.trackpadSwipeSamplers.put(keyBinding.getName(), new TrackpadSwipeSampler()); - } - - TrackpadSwipeSampler trackpadswipesampler = this.trackpadSwipeSamplers.get(keyBinding.getName()); - trackpadswipesampler.update(controllertype, vrinputaction.getAxis2D(false)); - - if (trackpadswipesampler.isSwipedUp() && upCallback != null) - { - this.triggerHapticPulse(controllertype, 0.001F, 400.0F, 0.5F); - upCallback.run(); - } - - if (trackpadswipesampler.isSwipedDown() && downCallback != null) - { - this.triggerHapticPulse(controllertype, 0.001F, 400.0F, 0.5F); - downCallback.run(); - } - - if (trackpadswipesampler.isSwipedLeft() && leftCallback != null) - { - this.triggerHapticPulse(controllertype, 0.001F, 400.0F, 0.5F); - leftCallback.run(); - } - - if (trackpadswipesampler.isSwipedRight() && rightCallback != null) - { - this.triggerHapticPulse(controllertype, 0.001F, 400.0F, 0.5F); - rightCallback.run(); - } - } - } - } - - private void processVREvents() - { - while (!this.vrEvents.isEmpty()) - { - VREvent_t vrevent_t = this.vrEvents.poll(); - - switch (vrevent_t.eventType) - { - case 100: - case 101: - case 102: - case 108: - case 853: - this.getXforms = true; - break; - - case 700: - this.mc.stop(); - } - } - } - - private Pointer ptrFomrString(String in) - { - Pointer pointer = new Memory((long)(in.getBytes(StandardCharsets.UTF_8).length + 1)); - pointer.setString(0L, in, StandardCharsets.UTF_8.name()); - return pointer; - } - - private void readOriginInfo(long inputValueHandle) - { - int i = this.vrInput.GetOriginTrackedDeviceInfo.apply(inputValueHandle, this.originInfo, this.originInfo.size()); - - if (i != 0) - { - throw new RuntimeException("Error reading origin info: " + getInputErrorName(i)); - } - else - { - this.originInfo.read(); - } - } - - private void readPoseData(long actionHandle) - { - int i = this.vrInput.GetPoseActionDataForNextFrame.apply(actionHandle, 1, this.poseData, this.poseData.size(), 0L); - - if (i != 0) - { - throw new RuntimeException("Error reading pose data: " + getInputErrorName(i)); - } - else - { - this.poseData.read(); - } - } - - private void unpackPlatformNatives() - { - String s = System.getProperty("os.name").toLowerCase(); - String s1 = System.getProperty("os.arch").toLowerCase(); - String s2 = "win"; - - if (s.contains("linux")) - { - s2 = "linux"; - } - else if (s.contains("mac")) - { - s2 = "osx"; - } - - if (!s.contains("mac")) - { - if (s1.contains("64")) - { - s2 = s2 + "64"; - } - else - { - s2 = s2 + "32"; - } - } - - try - { - Utils.unpackNatives(s2); - } - catch (Exception exception) - { - System.out.println("Native path not found"); - return; - } - - String s3 = (new File("openvr/" + s2)).getAbsolutePath(); - System.out.println("Adding OpenVR search path: " + s3); - NativeLibrary.addSearchPath("openvr_api", s3); - } - - private void updateControllerPose(int controller, long actionHandle) - { - if (this.TPose) - { - if (controller == 0) - { - Utils.Matrix4fCopy(this.TPose_Right, this.controllerPose[controller]); - } - else if (controller == 1) - { - Utils.Matrix4fCopy(this.TPose_Left, this.controllerPose[controller]); - } - - this.controllerTracking[controller] = true; - } - else - { - this.readPoseData(actionHandle); - - if (this.poseData.activeOrigin != 0L) - { - this.readOriginInfo(this.poseData.activeOrigin); - int i = this.originInfo.trackedDeviceIndex; - - if (i != this.controllerDeviceIndex[controller]) - { - this.getXforms = true; - } - - this.controllerDeviceIndex[controller] = i; - - if (i != -1) - { - TrackedDevicePose_t trackeddevicepose_t = this.poseData.pose; - - if (trackeddevicepose_t.bPoseIsValid != 0) - { - OpenVRUtil.convertSteamVRMatrix3ToMatrix4f(trackeddevicepose_t.mDeviceToAbsoluteTracking, this.poseMatrices[i]); - this.deviceVelocity[i] = new Vec3((double)trackeddevicepose_t.vVelocity.v[0], (double)trackeddevicepose_t.vVelocity.v[1], (double)trackeddevicepose_t.vVelocity.v[2]); - Utils.Matrix4fCopy(this.poseMatrices[i], this.controllerPose[controller]); - this.controllerTracking[controller] = true; - return; - } - } - } - else - { - this.controllerDeviceIndex[controller] = -1; - } - - this.controllerTracking[controller] = false; - } - } - - private void updatePose() - { - if (this.vrsystem != null && this.vrCompositor != null) - { - int i = this.vrCompositor.WaitGetPoses.apply(this.hmdTrackedDevicePoseReference, 64, (TrackedDevicePose_t)null, 0); - - if (i > 0) - { - System.out.println("Compositor Error: GetPoseError " + OpenVRStereoRenderer.getCompostiorError(i)); - } - - if (i == 101) - { - this.triggerHapticPulse(0, 500); - this.triggerHapticPulse(1, 500); - } - - if (this.getXforms) - { - this.getTransforms(); - } - else if (this.dbg) - { - this.dbg = false; - } - - HmdMatrix34_t hmdmatrix34_t = this.vrsystem.GetEyeToHeadTransform.apply(0); - OpenVRUtil.convertSteamVRMatrix3ToMatrix4f(hmdmatrix34_t, this.hmdPoseLeftEye); - HmdMatrix34_t hmdmatrix34_t1 = this.vrsystem.GetEyeToHeadTransform.apply(1); - OpenVRUtil.convertSteamVRMatrix3ToMatrix4f(hmdmatrix34_t1, this.hmdPoseRightEye); - - for (int j = 0; j < 64; ++j) - { - this.hmdTrackedDevicePoses[j].read(); - - if (this.hmdTrackedDevicePoses[j].bPoseIsValid != 0) - { - OpenVRUtil.convertSteamVRMatrix3ToMatrix4f(this.hmdTrackedDevicePoses[j].mDeviceToAbsoluteTracking, this.poseMatrices[j]); - this.deviceVelocity[j] = new Vec3((double)this.hmdTrackedDevicePoses[j].vVelocity.v[0], (double)this.hmdTrackedDevicePoses[j].vVelocity.v[1], (double)this.hmdTrackedDevicePoses[j].vVelocity.v[2]); - } - } - - if (this.hmdTrackedDevicePoses[0].bPoseIsValid != 0) - { - Utils.Matrix4fCopy(this.poseMatrices[0], this.hmdPose); - this.headIsTracking = true; - } - else - { - this.headIsTracking = false; - Utils.Matrix4fSetIdentity(this.hmdPose); - this.hmdPose.M[1][3] = 1.62F; - } - - this.TPose = false; - - if (this.TPose) - { - this.TPose_Right.M[0][3] = 0.0F; - this.TPose_Right.M[1][3] = 0.0F; - this.TPose_Right.M[2][3] = 0.0F; - Matrix4f matrix4f = this.TPose_Right; - Utils.Matrix4fCopy(Matrix4f.rotationY(-120.0F), this.TPose_Right); - this.TPose_Right.M[0][3] = 0.5F; - this.TPose_Right.M[1][3] = 1.0F; - this.TPose_Right.M[2][3] = -0.5F; - this.TPose_Left.M[0][3] = 0.0F; - this.TPose_Left.M[1][3] = 0.0F; - this.TPose_Left.M[2][3] = 0.0F; - matrix4f = this.TPose_Left; - Utils.Matrix4fCopy(Matrix4f.rotationY(120.0F), this.TPose_Left); - this.TPose_Left.M[0][3] = -0.5F; - this.TPose_Left.M[1][3] = 1.0F; - this.TPose_Left.M[2][3] = -0.5F; - this.Neutral_HMD.M[0][3] = 0.0F; - this.Neutral_HMD.M[1][3] = 1.8F; - Utils.Matrix4fCopy(this.Neutral_HMD, this.hmdPose); - this.headIsTracking = true; - } - - if (this.inputInitialized) - { - this.mc.getProfiler().push("updateActionState"); - VRActiveActionSet_t[] avractiveactionset_t = this.getActiveActionSets(); - - if (avractiveactionset_t.length > 0) - { - int k = this.vrInput.UpdateActionState.apply(this.activeActionSetsReference, avractiveactionset_t[0].size(), avractiveactionset_t.length); - - if (k != 0) - { - throw new RuntimeException("Error updating action state: code " + getInputErrorName(k)); - } - } - - this.inputActions.values().forEach(this::readNewData); - this.mc.getProfiler().pop(); - - if (this.dh.vrSettings.reverseHands) - { - this.updateControllerPose(0, this.leftPoseHandle); - this.updateControllerPose(1, this.rightPoseHandle); - } - else - { - this.updateControllerPose(0, this.rightPoseHandle); - this.updateControllerPose(1, this.leftPoseHandle); - } - - this.updateControllerPose(2, this.externalCameraPoseHandle); - } - - this.updateAim(); - } - } - - long getActionSetHandle(VRInputActionSet actionSet) - { - return this.actionSetHandles.get(actionSet); - } - - long getControllerHandle(ControllerType hand) - { - if (this.dh.vrSettings.reverseHands) - { - return hand == ControllerType.RIGHT ? this.leftControllerHandle : this.rightControllerHandle; - } - else - { - return hand == ControllerType.RIGHT ? this.rightControllerHandle : this.leftControllerHandle; - } - } - - long getInputSourceHandle(String path) - { - LongByReference longbyreference = new LongByReference(); - int i = this.vrInput.GetInputSourceHandle.apply(this.ptrFomrString(path), longbyreference); - - if (i != 0) - { - throw new RuntimeException("Error getting input source handle for '" + path + "': " + getInputErrorName(i)); - } - else - { - return longbyreference.getValue(); - } - } - - ControllerType getOriginControllerType(long inputValueHandle) - { - if (inputValueHandle == 0L) - { - return null; - } - else - { - this.readOriginInfo(inputValueHandle); - - if (this.originInfo.trackedDeviceIndex != -1) - { - if (this.originInfo.trackedDeviceIndex == this.controllerDeviceIndex[0]) - { - return ControllerType.RIGHT; - } - - if (this.originInfo.trackedDeviceIndex == this.controllerDeviceIndex[1]) - { - return ControllerType.LEFT; - } - } - - return null; - } - } - - public void readNewData(VRInputAction action) - { - String s = action.type; - - switch (s) - { - case "boolean": - if (action.isHanded()) - { - for (ControllerType controllertype1 : ControllerType.values()) - { - this.readDigitalData(action, controllertype1); - } - } - else - { - this.readDigitalData(action, (ControllerType)null); - } - - break; - - case "vector1": - case "vector2": - case "vector3": - if (action.isHanded()) - { - for (ControllerType controllertype : ControllerType.values()) - { - this.readAnalogData(action, controllertype); - } - } - else - { - this.readAnalogData(action, (ControllerType)null); - } - } - } - - private void readDigitalData(VRInputAction action, ControllerType hand) - { - int i = 0; - - if (hand != null) - { - i = hand.ordinal(); - } - - int j = this.vrInput.GetDigitalActionData.apply(action.handle, this.digital, this.digital.size(), hand != null ? this.getControllerHandle(hand) : 0L); - - if (j != 0) - { - throw new RuntimeException("Error reading digital data for '" + action.name + "': " + getInputErrorName(j)); - } - else - { - this.digital.read(); - action.digitalData[i].activeOrigin = this.digital.activeOrigin; - action.digitalData[i].isActive = this.digital.bActive != 0; - action.digitalData[i].state = this.digital.bState != 0; - action.digitalData[i].isChanged = this.digital.bChanged != 0; - } - } - - private void readAnalogData(VRInputAction action, ControllerType hand) - { - int i = 0; - - if (hand != null) - { - i = hand.ordinal(); - } - - int j = this.vrInput.GetAnalogActionData.apply(action.handle, this.analog, this.analog.size(), hand != null ? this.getControllerHandle(hand) : 0L); - - if (j != 0) - { - throw new RuntimeException("Error reading analog data for '" + action.name + "': " + getInputErrorName(j)); - } - else - { - this.analog.read(); - action.analogData[i].x = this.analog.x; - action.analogData[i].y = this.analog.y; - action.analogData[i].z = this.analog.z; - action.analogData[i].deltaX = this.analog.deltaX; - action.analogData[i].deltaY = this.analog.deltaY; - action.analogData[i].deltaZ = this.analog.deltaZ; - action.analogData[i].activeOrigin = this.analog.activeOrigin; - action.analogData[i].isActive = this.analog.bActive != 0; - } - } - - public boolean hasThirdController() - { - return this.controllerDeviceIndex[2] != -1; - } - - public List getOrigins(VRInputAction action) - { - Pointer pointer = new Memory(128L); - LongByReference longbyreference = new LongByReference(); - longbyreference.setPointer(pointer); - int i = get().vrInput.GetActionOrigins.apply(this.getActionSetHandle(action.actionSet), action.handle, longbyreference, 16); - - if (i != 0) - { - throw new RuntimeException("Error getting action origins for '" + action.name + "': " + getInputErrorName(i)); - } - else - { - List list = new ArrayList<>(); - - for (long j : pointer.getLongArray(0L, 16)) - { - if (j != 0L) - { - list.add(j); - } - } - - return list; - } - } -} diff --git a/common/src/main/java/org/vivecraft/provider/openvr_jna/OpenVRHapticScheduler.java b/common/src/main/java/org/vivecraft/provider/openvr_jna/OpenVRHapticScheduler.java deleted file mode 100644 index a2107cad8..000000000 --- a/common/src/main/java/org/vivecraft/provider/openvr_jna/OpenVRHapticScheduler.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.vivecraft.provider.openvr_jna; - -import java.util.concurrent.TimeUnit; - -import org.vivecraft.provider.ControllerType; -import org.vivecraft.provider.HapticScheduler; - -public class OpenVRHapticScheduler extends HapticScheduler -{ - private void triggerHapticPulse(ControllerType controller, float durationSeconds, float frequency, float amplitude) - { - int i = MCOpenVR.get().vrInput.TriggerHapticVibrationAction.apply(MCOpenVR.get().getHapticHandle(controller), 0.0F, durationSeconds, frequency, amplitude, 0L); - - if (i != 0) - { - System.out.println("Error triggering haptic: " + MCOpenVR.getInputErrorName(i)); - } - } - - public void queueHapticPulse(ControllerType controller, float durationSeconds, float frequency, float amplitude, float delaySeconds) - { - this.executor.schedule(() -> - { - this.triggerHapticPulse(controller, durationSeconds, frequency, amplitude); - }, (long)(delaySeconds * 1000000.0F), TimeUnit.MICROSECONDS); - } -} diff --git a/common/src/main/java/org/vivecraft/provider/openvr_jna/OpenVRStereoRenderer.java b/common/src/main/java/org/vivecraft/provider/openvr_jna/OpenVRStereoRenderer.java deleted file mode 100644 index db552e38c..000000000 --- a/common/src/main/java/org/vivecraft/provider/openvr_jna/OpenVRStereoRenderer.java +++ /dev/null @@ -1,214 +0,0 @@ -package org.vivecraft.provider.openvr_jna; - -import com.mojang.math.Matrix4f; -import com.sun.jna.Memory; -import com.sun.jna.Pointer; -import com.sun.jna.ptr.IntByReference; -import java.nio.ByteBuffer; -import jopenvr.HiddenAreaMesh_t; -import jopenvr.HmdMatrix44_t; -import jopenvr.VRTextureBounds_t; -import net.minecraft.util.Tuple; -import org.lwjgl.opengl.GL11; -import org.vivecraft.provider.VRRenderer; -import org.vivecraft.provider.MCVR; -import org.vivecraft.render.RenderConfigException; -import org.vivecraft.render.RenderPass; -import org.vivecraft.utils.Utils; - -public class OpenVRStereoRenderer extends VRRenderer -{ - private HiddenAreaMesh_t[] hiddenMeshes = new HiddenAreaMesh_t[2]; - private MCOpenVR openvr; - - public OpenVRStereoRenderer(MCVR vr) - { - super(vr); - this.openvr = (MCOpenVR)vr; - } - - public Tuple getRenderTextureSizes() - { - if (this.resolution != null) - { - return this.resolution; - } - else - { - IntByReference intbyreference = new IntByReference(); - IntByReference intbyreference1 = new IntByReference(); - this.openvr.vrsystem.GetRecommendedRenderTargetSize.apply(intbyreference, intbyreference1); - this.resolution = new Tuple<>(intbyreference.getValue(), intbyreference1.getValue()); - System.out.println("OpenVR Render Res " + this.resolution.getA() + " x " + this.resolution.getB()); - this.ss = this.openvr.getSuperSampling(); - System.out.println("OpenVR Supersampling: " + this.ss); - - for (int i = 0; i < 2; ++i) - { - this.hiddenMeshes[i] = this.openvr.vrsystem.GetHiddenAreaMesh.apply(i, 0); - this.hiddenMeshes[i].read(); - int j = this.hiddenMeshes[i].unTriangleCount; - - if (j <= 0) - { - System.out.println("No stencil mesh found for eye " + i); - } - else - { - this.hiddenMesheVertecies[i] = new float[this.hiddenMeshes[i].unTriangleCount * 3 * 2]; - new Memory((long)(this.hiddenMeshes[i].unTriangleCount * 3 * 2)); - this.hiddenMeshes[i].pVertexData.getPointer().read(0L, this.hiddenMesheVertecies[i], 0, this.hiddenMesheVertecies[i].length); - - for (int k = 0; k < this.hiddenMesheVertecies[i].length; k += 2) - { - this.hiddenMesheVertecies[i][k] *= (float)this.resolution.getA().intValue(); - this.hiddenMesheVertecies[i][k + 1] *= (float)this.resolution.getB().intValue(); - } - - System.out.println("Stencil mesh loaded for eye " + i); - } - } - - return this.resolution; - } - } - - public Matrix4f getProjectionMatrix(int eyeType, float nearClip, float farClip) - { - if (eyeType == 0) - { - HmdMatrix44_t hmdmatrix44_t1 = this.openvr.vrsystem.GetProjectionMatrix.apply(0, nearClip, farClip); - return Utils.Matrix4fFromOpenVR(hmdmatrix44_t1); - } - else - { - HmdMatrix44_t hmdmatrix44_t = this.openvr.vrsystem.GetProjectionMatrix.apply(1, nearClip, farClip); - return Utils.Matrix4fFromOpenVR(hmdmatrix44_t); - } - } - - public String getLastError() - { - return ""; - } - - public void createRenderTexture(int lwidth, int lheight) - { - this.LeftEyeTextureId = GL11.glGenTextures(); - int i = GL11.glGetInteger(GL11.GL_TEXTURE_BINDING_2D); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.LeftEyeTextureId); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, 9729.0F); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, 9729.0F); - GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGB10_A2, lwidth, lheight, 0, GL11.GL_RGBA, GL11.GL_INT, (ByteBuffer)null); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, i); - this.openvr.texType0.handle = Pointer.createConstant(this.LeftEyeTextureId); - this.openvr.texType0.eColorSpace = 1; - this.openvr.texType0.eType = 1; - this.openvr.texType0.write(); - this.RightEyeTextureId = GL11.glGenTextures(); - i = GL11.glGetInteger(GL11.GL_TEXTURE_BINDING_2D); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.RightEyeTextureId); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, 9729.0F); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, 9729.0F); - GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGB10_A2, lwidth, lheight, 0, GL11.GL_RGBA, GL11.GL_INT, (ByteBuffer)null); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, i); - this.openvr.texType1.handle = Pointer.createConstant(this.RightEyeTextureId); - this.openvr.texType1.eColorSpace = 1; - this.openvr.texType1.eType = 1; - this.openvr.texType1.write(); - } - - public boolean endFrame(RenderPass eye) - { - return true; - } - - public void endFrame() throws RenderConfigException - { - if (this.openvr.vrCompositor.Submit != null) - { - int i = this.openvr.vrCompositor.Submit.apply(0, this.openvr.texType0, (VRTextureBounds_t)null, 0); - int j = this.openvr.vrCompositor.Submit.apply(1, this.openvr.texType1, (VRTextureBounds_t)null, 0); - this.openvr.vrCompositor.PostPresentHandoff.apply(); - - if (i + j > 0) - { - throw new RenderConfigException("Compositor Error", "Texture submission error: Left/Right " + getCompostiorError(i) + "/" + getCompostiorError(j)); - } - } - } - - public static String getCompostiorError(int code) - { - switch (code) - { - case 0: - return "None:"; - - case 1: - return "RequestFailed"; - - case 100: - return "IncompatibleVersion"; - - case 101: - return "DoesNotHaveFocus"; - - case 102: - return "InvalidTexture"; - - case 103: - return "IsNotSceneApplication"; - - case 104: - return "TextureIsOnWrongDevice"; - - case 105: - return "TextureUsesUnsupportedFormat:"; - - case 106: - return "SharedTexturesNotSupported"; - - case 107: - return "IndexOutOfRange"; - - case 108: - return "AlreadySubmitted:"; - - default: - return "Unknown"; - } - } - - public boolean providesStencilMask() - { - return true; - } - - public float[] getStencilMask(RenderPass eye) - { - if (this.hiddenMesheVertecies != null && (eye == RenderPass.LEFT || eye == RenderPass.RIGHT)) - { - return eye == RenderPass.LEFT ? this.hiddenMesheVertecies[0] : this.hiddenMesheVertecies[1]; - } - else - { - return null; - } - } - - public String getName() - { - return "OpenVR"; - } - - public boolean isInitialized() - { - return this.vr.initSuccess; - } - - public String getinitError() - { - return this.vr.initStatus; - } -} diff --git a/common/src/main/java/org/vivecraft/provider/openvr_jna/OpenVRUtil.java b/common/src/main/java/org/vivecraft/provider/openvr_jna/OpenVRUtil.java deleted file mode 100644 index 0752201b6..000000000 --- a/common/src/main/java/org/vivecraft/provider/openvr_jna/OpenVRUtil.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.vivecraft.provider.openvr_jna; - -import jopenvr.HmdMatrix34_t; -import jopenvr.HmdMatrix44_t; -import org.vivecraft.utils.Utils; -import org.vivecraft.utils.math.Matrix4f; -import org.vivecraft.utils.math.Quaternion; - -public class OpenVRUtil -{ - public static Matrix4f convertSteamVRMatrix3ToMatrix4f(HmdMatrix34_t hmdMatrix, Matrix4f mat) - { - Utils.Matrix4fSet(mat, hmdMatrix.m[0], hmdMatrix.m[1], hmdMatrix.m[2], hmdMatrix.m[3], hmdMatrix.m[4], hmdMatrix.m[5], hmdMatrix.m[6], hmdMatrix.m[7], hmdMatrix.m[8], hmdMatrix.m[9], hmdMatrix.m[10], hmdMatrix.m[11], 0.0F, 0.0F, 0.0F, 1.0F); - return mat; - } - - public static Matrix4f convertSteamVRMatrix4ToMatrix4f(HmdMatrix44_t hmdMatrix, Matrix4f mat) - { - Utils.Matrix4fSet(mat, hmdMatrix.m[0], hmdMatrix.m[1], hmdMatrix.m[2], hmdMatrix.m[3], hmdMatrix.m[4], hmdMatrix.m[5], hmdMatrix.m[6], hmdMatrix.m[7], hmdMatrix.m[8], hmdMatrix.m[9], hmdMatrix.m[10], hmdMatrix.m[11], hmdMatrix.m[12], hmdMatrix.m[13], hmdMatrix.m[14], hmdMatrix.m[15]); - return mat; - } - - public static Quaternion convertMatrix4ftoRotationQuat(Matrix4f mat) - { - return Utils.convertMatrix4ftoRotationQuat(mat.M[0][0], mat.M[0][1], mat.M[0][2], mat.M[1][0], mat.M[1][1], mat.M[1][2], mat.M[2][0], mat.M[2][1], mat.M[2][2]); - } - - public static HmdMatrix34_t convertToMatrix34(com.mojang.math.Matrix4f matrix) - { - HmdMatrix34_t hmdmatrix34_t = new HmdMatrix34_t(); - hmdmatrix34_t.m[0] = matrix.m00; - hmdmatrix34_t.m[1] = matrix.m10; - hmdmatrix34_t.m[2] = matrix.m20; - hmdmatrix34_t.m[3] = matrix.m30; - hmdmatrix34_t.m[4] = matrix.m01; - hmdmatrix34_t.m[5] = matrix.m11; - hmdmatrix34_t.m[6] = matrix.m21; - hmdmatrix34_t.m[7] = matrix.m31; - hmdmatrix34_t.m[8] = matrix.m02; - hmdmatrix34_t.m[9] = matrix.m12; - hmdmatrix34_t.m[10] = matrix.m22; - hmdmatrix34_t.m[11] = matrix.m32; - return hmdmatrix34_t; - } -} diff --git a/common/src/main/java/org/vivecraft/provider/openvr_jna/control/VivecraftMovementInput.java b/common/src/main/java/org/vivecraft/provider/openvr_jna/control/VivecraftMovementInput.java deleted file mode 100644 index cddb291a9..000000000 --- a/common/src/main/java/org/vivecraft/provider/openvr_jna/control/VivecraftMovementInput.java +++ /dev/null @@ -1,219 +0,0 @@ -package org.vivecraft.provider.openvr_jna.control; - -import org.vivecraft.ClientDataHolder; -import org.vivecraft.gameplay.screenhandlers.KeyboardHandler; -import org.vivecraft.provider.MCVR; -import org.vivecraft.provider.openvr_jna.VRInputAction; -import org.vivecraft.utils.Utils; -import org.vivecraft.utils.math.Vector2; - -import net.minecraft.client.KeyMapping; -import net.minecraft.client.Minecraft; -import net.minecraft.client.Options; -import net.minecraft.client.player.Input; - -public class VivecraftMovementInput extends Input -{ - private final Options gameSettings; - private boolean autoSprintActive = false; - private boolean movementSetByAnalog = false; - - public VivecraftMovementInput(Options gameSettings) - { - this.gameSettings = gameSettings; - } - - public static float getMovementAxisValue(KeyMapping keyBinding) - { - VRInputAction vrinputaction = MCVR.get().getInputAction(keyBinding); - return Math.abs(vrinputaction.getAxis1DUseTracked()); - } - - private float axisToDigitalMovement(float value) - { - if (value > 0.5F) - { - return 1.0F; - } - else - { - return value < -0.5F ? -1.0F : 0.0F; - } - } - - public void tick(boolean p_108576_) - { - this.leftImpulse = 0.0F; - this.forwardImpulse = 0.0F; - Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); - boolean flag = false; - - if (dataholder.climbTracker.isClimbeyClimb() && !minecraft.player.isInWater() && dataholder.climbTracker.isGrabbingLadder()) - { - flag = true; - } - - if (flag || !this.gameSettings.keyUp.isDown() && !dataholder.vr.keyTeleportFallback.isDown()) - { - this.up = false; - } - else - { - ++this.forwardImpulse; - this.up = true; - } - - if (!flag && this.gameSettings.keyDown.isDown()) - { - --this.forwardImpulse; - this.down = true; - } - else - { - this.down = false; - } - - if (!flag && this.gameSettings.keyLeft.isDown()) - { - ++this.leftImpulse; - this.left = true; - } - else - { - this.left = false; - } - - if (!flag && this.gameSettings.keyRight.isDown()) - { - --this.leftImpulse; - this.right = true; - } - else - { - this.right = false; - } - - boolean flag1 = false; - float f = 0.0F; - - if (!flag && !dataholder.vrSettings.seated && minecraft.screen == null && !KeyboardHandler.Showing) - { - VRInputAction vrinputaction = dataholder.vr.getInputAction(dataholder.vr.keyFreeMoveStrafe); - VRInputAction vrinputaction1 = dataholder.vr.getInputAction(dataholder.vr.keyFreeMoveRotate); - Vector2 vector2 = vrinputaction.getAxis2DUseTracked(); - Vector2 vector21 = vrinputaction1.getAxis2DUseTracked(); - - if (vector2.getX() == 0.0F && vector2.getY() == 0.0F) - { - if (vector21.getY() != 0.0F) - { - flag1 = true; - f = vector21.getY(); - - if (dataholder.vrSettings.analogMovement) - { - this.forwardImpulse = vector21.getY(); - this.leftImpulse = 0.0F; - this.leftImpulse -= getMovementAxisValue(this.gameSettings.keyRight); - this.leftImpulse += getMovementAxisValue(this.gameSettings.keyLeft); - } - else - { - this.forwardImpulse = this.axisToDigitalMovement(vector21.getY()); - } - } - else if (dataholder.vrSettings.analogMovement) - { - flag1 = true; - this.forwardImpulse = 0.0F; - this.leftImpulse = 0.0F; - float f1 = getMovementAxisValue(this.gameSettings.keyUp); - - if (f1 == 0.0F) - { - f1 = getMovementAxisValue(dataholder.vr.keyTeleportFallback); - } - - f = f1; - this.forwardImpulse += f1; - this.forwardImpulse -= getMovementAxisValue(this.gameSettings.keyDown); - this.leftImpulse -= getMovementAxisValue(this.gameSettings.keyRight); - this.leftImpulse += getMovementAxisValue(this.gameSettings.keyLeft); - float f2 = 0.05F; - this.forwardImpulse = Utils.applyDeadzone(this.forwardImpulse, f2); - this.leftImpulse = Utils.applyDeadzone(this.leftImpulse, f2); - } - } - else - { - flag1 = true; - f = vector2.getY(); - - if (dataholder.vrSettings.analogMovement) - { - this.forwardImpulse = vector2.getY(); - this.leftImpulse = -vector2.getX(); - } - else - { - this.forwardImpulse = this.axisToDigitalMovement(vector2.getY()); - this.leftImpulse = this.axisToDigitalMovement(-vector2.getX()); - } - } - - if (flag1) - { - this.movementSetByAnalog = true; - this.up = this.forwardImpulse > 0.0F; - this.down = this.forwardImpulse < 0.0F; - this.left = this.leftImpulse > 0.0F; - this.right = this.leftImpulse < 0.0F; - VRInputAction.setKeyBindState(this.gameSettings.keyUp, this.up); - VRInputAction.setKeyBindState(this.gameSettings.keyDown, this.down); - VRInputAction.setKeyBindState(this.gameSettings.keyLeft, this.left); - VRInputAction.setKeyBindState(this.gameSettings.keyRight, this.right); - - if (dataholder.vrSettings.autoSprint) - { - if (f >= dataholder.vrSettings.autoSprintThreshold) - { - minecraft.player.setSprinting(true); - this.autoSprintActive = true; - this.forwardImpulse = 1.0F; - } - else if (this.forwardImpulse > 0.0F && dataholder.vrSettings.analogMovement) - { - this.forwardImpulse = this.forwardImpulse / dataholder.vrSettings.autoSprintThreshold * 1.0F; - } - } - } - } - - if (!flag1 && this.movementSetByAnalog) - { - VRInputAction.setKeyBindState(this.gameSettings.keyUp, false); - VRInputAction.setKeyBindState(this.gameSettings.keyDown, false); - VRInputAction.setKeyBindState(this.gameSettings.keyLeft, false); - VRInputAction.setKeyBindState(this.gameSettings.keyRight, false); - } - - this.movementSetByAnalog = flag1; - - if (this.autoSprintActive && f < dataholder.vrSettings.autoSprintThreshold) - { - minecraft.player.setSprinting(false); - this.autoSprintActive = false; - } - - boolean flag2 = minecraft.screen == null && (dataholder.vrPlayer.getFreeMove() || dataholder.vrSettings.simulateFalling) && !flag; - this.jumping = this.gameSettings.keyJump.isDown() && flag2; - this.shiftKeyDown = (dataholder.sneakTracker.sneakCounter > 0 || dataholder.sneakTracker.sneakOverride || this.gameSettings.keyShift.isDown()) && minecraft.screen == null; - - if (p_108576_) - { - this.leftImpulse = (float)((double)this.leftImpulse * 0.3D); - this.forwardImpulse = (float)((double)this.forwardImpulse * 0.3D); - } - } -} diff --git a/common/src/main/java/org/vivecraft/reflection/MCReflection.java b/common/src/main/java/org/vivecraft/reflection/MCReflection.java deleted file mode 100644 index 53268ee29..000000000 --- a/common/src/main/java/org/vivecraft/reflection/MCReflection.java +++ /dev/null @@ -1,264 +0,0 @@ -package org.vivecraft.reflection;//package org.vivecraft.reflection; -// -//import java.lang.reflect.Constructor; -//import java.lang.reflect.Field; -//import java.lang.reflect.Method; -//import java.util.Arrays; -//import java.util.stream.Collectors; -// -//import org.vivecraft.asm.ObfNames; -// -//import net.minecraft.client.KeyMapping; -//import net.minecraft.client.multiplayer.ClientLevel; -//import net.minecraft.client.multiplayer.MultiPlayerGameMode; -//import net.minecraft.client.player.AbstractClientPlayer; -//import net.minecraft.client.renderer.entity.player.PlayerRenderer; -//import net.minecraft.network.Connection; -//import net.minecraft.network.protocol.game.ServerboundCustomPayloadPacket; -//import net.minecraft.world.entity.Entity; -//import net.minecraft.world.level.biome.BiomeManager; -//import net.minecraft.world.level.block.state.StateHolder; -// -//public class MCReflection -//{ -// -// //soundEngine -// // public static final MCReflection.ReflectionField SoundHandler_sndManager = new MCReflection.ReflectionField(SoundManager.class, "field_5590"); -// -// //blocks for interact -// public static final String BlockBehavior_Use = "method_9534"; -// -// //destroyDelay -// public static final MCReflection.ReflectionField PlayerController_blockHitDelay = new MCReflection.ReflectionField(MultiPlayerGameMode.class, "field_3716"); -// //isDestroying -// public static final MCReflection.ReflectionField PlayerController_isHittingBlock = new MCReflection.ReflectionField(MultiPlayerGameMode.class, "field_3717"); -// //destroyTicks -// public static final MCReflection.ReflectionField PlayerController_blocknoise = new MCReflection.ReflectionField(MultiPlayerGameMode.class, "field_3713"); -// //isDown -// public static final MCReflection.ReflectionField KeyBinding_pressed = new MCReflection.ReflectionField(KeyMapping.class, "field_1653"); -// //clickCount -// public static final MCReflection.ReflectionField KeyBinding_pressTime = new MCReflection.ReflectionField(KeyMapping.class, "field_1661"); -// //release -// public static final MCReflection.ReflectionMethod KeyBinding_unpressKey = new MCReflection.ReflectionMethod(KeyMapping.class, "method_1425"); -// //key -// public static final MCReflection.ReflectionField KeyBinding_keyCode = new MCReflection.ReflectionField(KeyMapping.class, "field_1655"); -// //CATEGORY_SORT_ORDER -// public static final MCReflection.ReflectionField KeyBinding_CATEGORY_ORDER = new MCReflection.ReflectionField(KeyMapping.class, "field_1656"); -// public static final MCReflection.ReflectionField Entity_eyeHeight = new MCReflection.ReflectionField(Entity.class, "field_18066"); -// //setModelProperties -// public static final MCReflection.ReflectionMethod RenderPlayer_setModelVisibilities = new MCReflection.ReflectionMethod(PlayerRenderer.class, "method_4218", AbstractClientPlayer.class); -// //identifier -// public static final MCReflection.ReflectionField CCustomPayloadPacket_channel = new MCReflection.ReflectionField(ServerboundCustomPayloadPacket.class, "field_12830"); -// public static final MCReflection.ReflectionField CCustomPayloadPacket_data = new MCReflection.ReflectionField(ServerboundCustomPayloadPacket.class, "field_12832"); -// //propertiesCodec -// public static final MCReflection.ReflectionField StateHolder_mapCodec = new MCReflection.ReflectionField(StateHolder.class, "field_24740"); -// public static final MCReflection.ReflectionField ClientWorldInfo_isFlat = new MCReflection.ReflectionField(ClientLevel.ClientLevelData.class, "field_24607"); -// //biomeZoomSeed -// public static final MCReflection.ReflectionField BiomeManager_seed = new MCReflection.ReflectionField(BiomeManager.class, "field_20641"); -// public static final MCReflection.ReflectionField NetworkManager_channel = new MCReflection.ReflectionField(Connection.class, "field_11651"); -// -// public static class ReflectionConstructor -// { -// private final Class clazz; -// private final Class[] params; -// private Constructor constructor; -// -// public ReflectionConstructor(Class clazz, Class... params) -// { -// this.clazz = clazz; -// this.params = params; -// this.reflect(); -// } -// -// public Object newInstance(Object... args) -// { -// try -// { -// return this.constructor.newInstance(args); -// } -// catch (ReflectiveOperationException reflectiveoperationexception) -// { -// throw new RuntimeException(reflectiveoperationexception); -// } -// } -// -// private void reflect() -// { -// try -// { -// this.constructor = this.clazz.getDeclaredConstructor(this.params); -// } -// catch (NoSuchMethodException nosuchmethodexception) -// { -// StringBuilder stringbuilder = new StringBuilder(); -// -// if (this.params.length > 0) -// { -// stringbuilder.append(" with params "); -// stringbuilder.append(Arrays.stream(this.params).map(Class::getName).collect(Collectors.joining(","))); -// } -// -// throw new RuntimeException("reflecting constructor " + stringbuilder.toString() + " in " + this.clazz.toString(), nosuchmethodexception); -// } -// -// this.constructor.setAccessible(true); -// } -// } -// -// public static class ReflectionField -// { -// private final Class clazz; -// private final String srgName; -// private Field field; -// -// public ReflectionField(Class clazz, String srgName) -// { -// this.clazz = clazz; -// this.srgName = srgName; -// this.reflect(); -// } -// -// public Object get(Object obj) -// { -// try -// { -// return this.field.get(obj); -// } -// catch (ReflectiveOperationException reflectiveoperationexception) -// { -// throw new RuntimeException(reflectiveoperationexception); -// } -// } -// -// public void set(Object obj, Object value) -// { -// try -// { -// this.field.set(obj, value); -// } -// catch (ReflectiveOperationException reflectiveoperationexception) -// { -// throw new RuntimeException(reflectiveoperationexception); -// } -// } -// -// private void reflect() -// { -// try -// { -// this.field = this.clazz.getDeclaredField(this.srgName); -// } -// catch (NoSuchFieldException nosuchfieldexception2) -// { -// try -// { -// this.field = this.clazz.getDeclaredField(ObfNames.resolveField(this.srgName, true)); -// } -// catch (NoSuchFieldException nosuchfieldexception1) -// { -// try -// { -// this.field = this.clazz.getDeclaredField(ObfNames.getDevMapping(this.srgName)); -// } -// catch (NoSuchFieldException nosuchfieldexception) -// { -// StringBuilder stringbuilder = new StringBuilder(this.srgName); -// -// if (!this.srgName.equals(ObfNames.resolveField(this.srgName, true))) -// { -// stringbuilder.append(',').append(ObfNames.resolveField(this.srgName, true)); -// } -// -// if (!this.srgName.equals(ObfNames.getDevMapping(this.srgName))) -// { -// stringbuilder.append(',').append(ObfNames.getDevMapping(this.srgName)); -// } -// -// throw new RuntimeException("reflecting field " + stringbuilder.toString() + " in " + this.clazz.toString(), nosuchfieldexception2); -// } -// } -// } -// -// this.field.setAccessible(true); -// } -// } -// -// public static class ReflectionMethod -// { -// private final Class clazz; -// private final String srgName; -// private final Class[] params; -// private Method method; -// -// public ReflectionMethod(Class clazz, String srgName, Class... params) -// { -// this.clazz = clazz; -// this.srgName = srgName; -// this.params = params; -// this.reflect(); -// } -// -// public Method getMethod() -// { -// return this.method; -// } -// -// public Object invoke(Object obj, Object... args) -// { -// try -// { -// return this.method.invoke(obj, args); -// } -// catch (ReflectiveOperationException reflectiveoperationexception) -// { -// throw new RuntimeException(reflectiveoperationexception); -// } -// } -// -// private void reflect() -// { -// try -// { -// this.method = this.clazz.getDeclaredMethod(this.srgName, this.params); -// } -// catch (NoSuchMethodException nosuchmethodexception2) -// { -// try -// { -// this.method = this.clazz.getDeclaredMethod(ObfNames.resolveMethod(this.srgName, true), this.params); -// } -// catch (NoSuchMethodException nosuchmethodexception1) -// { -// try -// { -// this.method = this.clazz.getDeclaredMethod(ObfNames.getDevMapping(this.srgName), this.params); -// } -// catch (NoSuchMethodException nosuchmethodexception) -// { -// StringBuilder stringbuilder = new StringBuilder(this.srgName); -// -// if (!this.srgName.equals(ObfNames.resolveMethod(this.srgName, true))) -// { -// stringbuilder.append(',').append(ObfNames.resolveMethod(this.srgName, true)); -// } -// -// if (!this.srgName.equals(ObfNames.getDevMapping(this.srgName))) -// { -// stringbuilder.append(',').append(ObfNames.getDevMapping(this.srgName)); -// } -// -// if (this.params.length > 0) -// { -// stringbuilder.append(" with params "); -// stringbuilder.append(Arrays.stream(this.params).map(Class::getName).collect(Collectors.joining(","))); -// } -// -// throw new RuntimeException("reflecting method " + stringbuilder.toString() + " in " + this.clazz.toString(), nosuchmethodexception2); -// } -// } -// } -// -// this.method.setAccessible(true); -// } -// } -//} diff --git a/common/src/main/java/org/vivecraft/render/GLUtils.java b/common/src/main/java/org/vivecraft/render/GLUtils.java deleted file mode 100644 index 02a4b8bc5..000000000 --- a/common/src/main/java/org/vivecraft/render/GLUtils.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.vivecraft.render; - -import com.mojang.blaze3d.platform.GLX; -import com.mojang.blaze3d.platform.GlStateManager; -import com.mojang.blaze3d.platform.MemoryTracker; -import com.mojang.math.Matrix4f; -import java.nio.Buffer; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.FloatBuffer; -import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL12; - -public class GLUtils -{ - private static FloatBuffer matrixBuffer = MemoryTracker.create(16).asFloatBuffer(); - - public static synchronized ByteBuffer createByteBuffer(int size) - { - return ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder()); - } - - public static FloatBuffer createFloatBuffer(int size) - { - return createByteBuffer(size << 2).asFloatBuffer(); - } - - public static synchronized int generateDisplayLists(int range) - { - int i = GL12.glGenLists(range); - - if (i == 0) - { - int j = GlStateManager._getError(); - String s = "No error code reported"; - - if (j != 0) - { - s = "dunno";// GLX.getErrorString(j); - } - - throw new IllegalStateException("glGenLists returned an ID of 0 for a count of " + range + ", GL error (" + j + "): " + s); - } - else - { - return i; - } - } -} diff --git a/common/src/main/java/org/vivecraft/render/PlayerModelController.java b/common/src/main/java/org/vivecraft/render/PlayerModelController.java deleted file mode 100644 index bbd910508..000000000 --- a/common/src/main/java/org/vivecraft/render/PlayerModelController.java +++ /dev/null @@ -1,380 +0,0 @@ -package org.vivecraft.render; - -import java.io.ByteArrayInputStream; -import java.io.DataInputStream; -import java.io.IOException; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Random; -import java.util.UUID; - -import org.vivecraft.ClientDataHolder; -import org.vivecraft.api.VRData; -import org.vivecraft.utils.Utils; -import org.vivecraft.utils.math.Quaternion; -import org.vivecraft.utils.math.Vector3; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.particle.Particle; -import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.world.phys.Vec3; - -public class PlayerModelController -{ - private final Minecraft mc; - private Map vivePlayers = new HashMap<>(); - private Map vivePlayersLast = new HashMap<>(); - private Map vivePlayersReceived = Collections.synchronizedMap(new HashMap<>()); - private Map donors = new HashMap<>(); - static PlayerModelController instance; - private Random rand = new Random(); - public boolean debug = false; - - public static PlayerModelController getInstance() - { - if (instance == null) - { - instance = new PlayerModelController(); - } - - return instance; - } - - private PlayerModelController() - { - this.mc = Minecraft.getInstance(); - } - - public void Update(UUID uuid, byte[] hmddata, byte[] c0data, byte[] c1data, float worldscale, float heightscale, boolean localPlayer) - { - if (localPlayer || !this.mc.player.getUUID().equals(uuid)) - { - Vec3 vec3 = null; - Vec3 vec31 = null; - Vec3 vec32 = null; - Quaternion quaternion = null; - Quaternion quaternion1 = null; - Quaternion quaternion2 = null; - boolean flag = false; - boolean flag1 = false; - - for (int i = 0; i <= 2; ++i) - { - try - { - byte[] abyte = null; - - switch (i) - { - case 0: - abyte = hmddata; - break; - - case 1: - abyte = c0data; - break; - - case 2: - abyte = c1data; - } - - ByteArrayInputStream bytearrayinputstream = new ByteArrayInputStream(abyte); - DataInputStream datainputstream = new DataInputStream(bytearrayinputstream); - boolean flag2 = false; - - if (abyte.length >= 29) - { - flag2 = datainputstream.readBoolean(); - } - - float f = datainputstream.readFloat(); - float f1 = datainputstream.readFloat(); - float f2 = datainputstream.readFloat(); - float f3 = datainputstream.readFloat(); - float f4 = datainputstream.readFloat(); - float f5 = datainputstream.readFloat(); - float f6 = datainputstream.readFloat(); - datainputstream.close(); - - switch (i) - { - case 0: - if (flag2) - { - flag = true; - } - - vec3 = new Vec3((double)f, (double)f1, (double)f2); - quaternion = new Quaternion(f3, f4, f5, f6); - break; - - case 1: - if (flag2) - { - flag1 = true; - } - - vec31 = new Vec3((double)f, (double)f1, (double)f2); - quaternion1 = new Quaternion(f3, f4, f5, f6); - break; - - case 2: - if (flag2) - { - flag1 = true; - } - - vec32 = new Vec3((double)f, (double)f1, (double)f2); - quaternion2 = new Quaternion(f3, f4, f5, f6); - } - } - catch (IOException ioexception) - { - } - } - - new Vector3(0.0F, -0.0F, 0.0F); - Vector3 vector3 = new Vector3(0.0F, 0.0F, -1.0F); - Vector3 vector31 = quaternion.multiply(vector3); - Vector3 vector32 = quaternion1.multiply(vector3); - Vector3 vector33 = quaternion2.multiply(vector3); - RotInfo playermodelcontroller$rotinfo = new RotInfo(); - playermodelcontroller$rotinfo.reverse = flag1; - playermodelcontroller$rotinfo.seated = flag; - - if (this.donors.containsKey(uuid)) - { - playermodelcontroller$rotinfo.hmd = this.donors.get(uuid); - } - - playermodelcontroller$rotinfo.leftArmRot = new Vec3((double)vector33.getX(), (double)vector33.getY(), (double)vector33.getZ()); - playermodelcontroller$rotinfo.rightArmRot = new Vec3((double)vector32.getX(), (double)vector32.getY(), (double)vector32.getZ()); - playermodelcontroller$rotinfo.headRot = new Vec3((double)vector31.getX(), (double)vector31.getY(), (double)vector31.getZ()); - playermodelcontroller$rotinfo.Headpos = vec3; - playermodelcontroller$rotinfo.leftArmPos = vec32; - playermodelcontroller$rotinfo.rightArmPos = vec31; - playermodelcontroller$rotinfo.leftArmQuat = quaternion2; - playermodelcontroller$rotinfo.rightArmQuat = quaternion1; - playermodelcontroller$rotinfo.headQuat = quaternion; - playermodelcontroller$rotinfo.worldScale = worldscale; - - if (heightscale < 0.5F) - { - heightscale = 0.5F; - } - - if (heightscale > 1.5F) - { - heightscale = 1.5F; - } - - playermodelcontroller$rotinfo.heightScale = heightscale; - - if (playermodelcontroller$rotinfo.seated) - { - playermodelcontroller$rotinfo.heightScale = 1.0F; - } - - this.vivePlayersReceived.put(uuid, playermodelcontroller$rotinfo); - } - } - - public void Update(UUID uuid, byte[] hmddata, byte[] c0data, byte[] c1data, float worldscale, float heightscale) - { - this.Update(uuid, hmddata, c0data, c1data, worldscale, heightscale, false); - } - - public void tick() - { - for (Entry entry : this.vivePlayers.entrySet()) - { - this.vivePlayersLast.put(entry.getKey(), entry.getValue()); - } - - for (Entry entry1 : this.vivePlayersReceived.entrySet()) - { - this.vivePlayers.put(entry1.getKey(), entry1.getValue()); - } - - Level level = Minecraft.getInstance().level; - - if (level != null) - { - Iterator iterator = this.vivePlayers.keySet().iterator(); - - while (iterator.hasNext()) - { - UUID uuid = iterator.next(); - - if (level.getPlayerByUUID(uuid) == null) - { - iterator.remove(); - this.vivePlayersLast.remove(uuid); - this.vivePlayersReceived.remove(uuid); - } - } - - if (!this.mc.isPaused()) - { - for (Player player : level.players()) - { - if (this.donors.getOrDefault(player.getUUID(), 0) > 3 && this.rand.nextInt(10) < 4) - { - RotInfo playermodelcontroller$rotinfo = this.vivePlayers.get(player.getUUID()); - Vec3 vec3 = player.getLookAngle(); - - if (playermodelcontroller$rotinfo != null) - { - vec3 = playermodelcontroller$rotinfo.leftArmPos.subtract(playermodelcontroller$rotinfo.rightArmPos).yRot((-(float)Math.PI / 2F)); - - if (playermodelcontroller$rotinfo.reverse) - { - vec3 = vec3.scale(-1.0D); - } - else if (playermodelcontroller$rotinfo.seated) - { - vec3 = playermodelcontroller$rotinfo.rightArmRot; - } - - if (vec3.length() < (double)1.0E-4F) - { - vec3 = playermodelcontroller$rotinfo.headRot; - } - } - - vec3 = vec3.scale((double)0.1F); - Vec3 vec31 = playermodelcontroller$rotinfo != null && player == this.mc.player ? playermodelcontroller$rotinfo.Headpos : player.getEyePosition(1.0F); - Particle particle = this.mc.particleEngine.createParticle(ParticleTypes.FIREWORK, vec31.x + (player.isShiftKeyDown() ? -vec3.x * 3.0D : 0.0D) + ((double)this.rand.nextFloat() - 0.5D) * (double)0.02F, vec31.y - (double)(player.isShiftKeyDown() ? 1.0F : 0.8F) + ((double)this.rand.nextFloat() - 0.5D) * (double)0.02F, vec31.z + (player.isShiftKeyDown() ? -vec3.z * 3.0D : 0.0D) + ((double)this.rand.nextFloat() - 0.5D) * (double)0.02F, -vec3.x + ((double)this.rand.nextFloat() - 0.5D) * (double)0.01F, ((double)this.rand.nextFloat() - (double)0.05F) * (double)0.05F, -vec3.z + ((double)this.rand.nextFloat() - 0.5D) * (double)0.01F); - - if (particle != null) - { - particle.setColor(0.5F + this.rand.nextFloat() / 2.0F, 0.5F + this.rand.nextFloat() / 2.0F, 0.5F + this.rand.nextFloat() / 2.0F); - } - } - } - } - } - } - - public void setHMD(UUID uuid, int level) - { - this.donors.put(uuid, level); - } - - public boolean HMDCHecked(UUID uuid) - { - return this.donors.containsKey(uuid); - } - - public RotInfo getRotationsForPlayer(UUID uuid) - { - if (this.debug) - { - uuid = this.mc.player.getUUID(); - } - - RotInfo playermodelcontroller$rotinfo = this.vivePlayers.get(uuid); - - if (playermodelcontroller$rotinfo != null && this.vivePlayersLast.containsKey(uuid)) - { - RotInfo playermodelcontroller$rotinfo1 = this.vivePlayersLast.get(uuid); - RotInfo playermodelcontroller$rotinfo2 = new RotInfo(); - float f = Minecraft.getInstance().getFrameTime(); - playermodelcontroller$rotinfo2.reverse = playermodelcontroller$rotinfo.reverse; - playermodelcontroller$rotinfo2.seated = playermodelcontroller$rotinfo.seated; - playermodelcontroller$rotinfo2.hmd = playermodelcontroller$rotinfo.hmd; - playermodelcontroller$rotinfo2.leftArmPos = Utils.vecLerp(playermodelcontroller$rotinfo1.leftArmPos, playermodelcontroller$rotinfo.leftArmPos, (double)f); - playermodelcontroller$rotinfo2.rightArmPos = Utils.vecLerp(playermodelcontroller$rotinfo1.rightArmPos, playermodelcontroller$rotinfo.rightArmPos, (double)f); - playermodelcontroller$rotinfo2.Headpos = Utils.vecLerp(playermodelcontroller$rotinfo1.Headpos, playermodelcontroller$rotinfo.Headpos, (double)f); - playermodelcontroller$rotinfo2.leftArmQuat = playermodelcontroller$rotinfo.leftArmQuat; - playermodelcontroller$rotinfo2.rightArmQuat = playermodelcontroller$rotinfo.rightArmQuat; - playermodelcontroller$rotinfo2.headQuat = playermodelcontroller$rotinfo.headQuat; - Vector3 vector3 = new Vector3(0.0F, 0.0F, -1.0F); - playermodelcontroller$rotinfo2.leftArmRot = Utils.vecLerp(playermodelcontroller$rotinfo1.leftArmRot, Utils.convertToVector3d(playermodelcontroller$rotinfo2.leftArmQuat.multiply(vector3)), (double)f); - playermodelcontroller$rotinfo2.rightArmRot = Utils.vecLerp(playermodelcontroller$rotinfo1.rightArmRot, Utils.convertToVector3d(playermodelcontroller$rotinfo2.rightArmQuat.multiply(vector3)), (double)f); - playermodelcontroller$rotinfo2.headRot = Utils.vecLerp(playermodelcontroller$rotinfo1.headRot, Utils.convertToVector3d(playermodelcontroller$rotinfo2.headQuat.multiply(vector3)), (double)f); - playermodelcontroller$rotinfo2.heightScale = playermodelcontroller$rotinfo.heightScale; - playermodelcontroller$rotinfo2.worldScale = playermodelcontroller$rotinfo.worldScale; - return playermodelcontroller$rotinfo2; - } - else - { - return playermodelcontroller$rotinfo; - } - } - - public static RotInfo getMainPlayerRotInfo(VRData data) - { - RotInfo playermodelcontroller$rotinfo = new RotInfo(); - Quaternion quaternion = new Quaternion(data.getController(1).getMatrix()); - Quaternion quaternion1 = new Quaternion(data.getController(0).getMatrix()); - Quaternion quaternion2 = new Quaternion(data.hmd.getMatrix()); - playermodelcontroller$rotinfo.headQuat = quaternion2; - playermodelcontroller$rotinfo.leftArmQuat = quaternion; - playermodelcontroller$rotinfo.rightArmQuat = quaternion1; - playermodelcontroller$rotinfo.seated = ClientDataHolder.getInstance().vrSettings.seated; - playermodelcontroller$rotinfo.leftArmPos = data.getController(1).getPosition(); - playermodelcontroller$rotinfo.rightArmPos = data.getController(0).getPosition(); - playermodelcontroller$rotinfo.Headpos = data.hmd.getPosition(); - return playermodelcontroller$rotinfo; - } - - public boolean isTracked(UUID uuid) - { - this.debug = false; - return this.debug ? true : this.vivePlayers.containsKey(uuid); - } - - public static float getFacingYaw(RotInfo rotInfo) - { - Vec3 vec3 = getOrientVec(rotInfo.headQuat); - return (float)Math.toDegrees(Math.atan2(vec3.x, vec3.z)); - } - - public static Vec3 getOrientVec(Quaternion quat) - { - Vec3 vec3 = quat.multiply(new Vec3(0.0D, 0.0D, -1.0D)).cross(quat.multiply(new Vec3(0.0D, 1.0D, 0.0D))).normalize(); - return (new Vec3(0.0D, 1.0D, 0.0D)).cross(vec3).normalize(); - } - - public static class RotInfo - { - public boolean seated; - public boolean reverse; - public int hmd = 0; - public Quaternion leftArmQuat; - public Quaternion rightArmQuat; - public Quaternion headQuat; - public Vec3 leftArmRot; - public Vec3 rightArmRot; - public Vec3 headRot; - public Vec3 leftArmPos; - public Vec3 rightArmPos; - public Vec3 Headpos; - public float worldScale; - public float heightScale; - - public double getBodyYawRadians() - { - Vec3 vec3 = this.leftArmPos.subtract(this.rightArmPos).yRot((-(float)Math.PI / 2F)); - - if (this.reverse) - { - vec3 = vec3.scale(-1.0D); - } - - if (this.seated) - { - vec3 = this.rightArmRot; - } - - Vec3 vec31 = Utils.vecLerp(vec3, this.headRot, 0.5D); - return Math.atan2(-vec31.x, vec31.z); - } - } -} diff --git a/common/src/main/java/org/vivecraft/render/QuaternionHelper.java b/common/src/main/java/org/vivecraft/render/QuaternionHelper.java deleted file mode 100644 index 79a36d0a9..000000000 --- a/common/src/main/java/org/vivecraft/render/QuaternionHelper.java +++ /dev/null @@ -1,208 +0,0 @@ -package org.vivecraft.render; - -import java.nio.Buffer; -import java.nio.FloatBuffer; -import net.minecraft.world.phys.Vec3; -import org.vivecraft.utils.lwjgl.Matrix4f; -import org.vivecraft.utils.lwjgl.Quaternion; - -public class QuaternionHelper -{ - public static final Quaternion IDENTITY_QUATERNION = (new Quaternion()).setIdentity(); - - public static Quaternion clone(Quaternion q1) - { - return new Quaternion(q1.x, q1.y, q1.z, q1.w); - } - - public static Quaternion pow(Quaternion q1, float power) - { - Quaternion quaternion = clone(q1); - float f = magnitude(quaternion); - Vec3 vec3 = (new Vec3((double)quaternion.x, (double)quaternion.y, (double)quaternion.z)).normalize(); - Quaternion quaternion1 = exp(scalarMultiply(new Quaternion((float)vec3.x, (float)vec3.y, (float)vec3.z, 0.0F), (float)((double)power * Math.acos((double)(quaternion.w / f))))); - return scalarMultiply(quaternion1, (float)Math.pow((double)f, (double)power)); - } - - public static Quaternion mul(Quaternion left, Quaternion right) - { - Quaternion quaternion = IDENTITY_QUATERNION; - Quaternion.mul(left, right, quaternion); - return quaternion; - } - - public static Quaternion exp(Quaternion input) - { - float f = input.w; - Vec3 vec3 = new Vec3((double)input.x, (double)input.y, (double)input.z); - float f1 = (float)(Math.exp((double)f) * Math.cos(vec3.length())); - Vec3 vec31 = new Vec3(Math.exp((double)f) * vec3.normalize().x * (double)((float)Math.sin(vec3.length())), Math.exp((double)f) * vec3.normalize().y * (double)((float)Math.sin(vec3.length())), Math.exp((double)f) * vec3.normalize().z * (double)((float)Math.sin(vec3.length()))); - return new Quaternion((float)vec31.x, (float)vec31.y, (float)vec31.z, f1); - } - - public static float magnitude(Quaternion input) - { - return (float)Math.sqrt((double)(input.x * input.x + input.y * input.y + input.z * input.z + input.w * input.w)); - } - - public static Quaternion scalarMultiply(Quaternion input, float scalar) - { - return new Quaternion(input.x * scalar, input.y * scalar, input.z * scalar, input.w * scalar); - } - - public static Quaternion slerp(Quaternion q1, Quaternion q2, float t) - { - Quaternion quaternion = new Quaternion(); - - if (isEqual(q1, q2)) - { - return q1; - } - else - { - float f = q1.x * q2.x + q1.y * q2.y + q1.z * q2.z + q1.w * q2.w; - - if (f < 0.0F) - { - q2 = conjugate(q2); - f = -f; - } - - float f1 = 1.0F - t; - float f2 = 1.0F - t; - float f3 = t; - - if (1.0F - f > 0.1F) - { - float f4 = (float)Math.acos((double)f); - float f5 = (float)Math.sin((double)f4); - f2 = (float)Math.sin((double)(f4 * f1)) / f5; - f3 = (float)Math.sin((double)(f4 * t)) / f5; - } - - quaternion.x = f2 * q1.x + f3 * q2.x; - quaternion.y = f2 * q1.y + f3 * q2.y; - quaternion.z = f2 * q1.z + f3 * q2.z; - quaternion.w = f2 * q1.w + f3 * q2.w; - return quaternion; - } - } - - public static Quaternion conjugate(Quaternion q1) - { - return new Quaternion(-q1.x, -q1.y, -q1.z, q1.w); - } - - public static boolean isEqual(Quaternion q1, Quaternion q2) - { - return q1.x == q2.x && q1.y == q2.y && q1.z == q2.z && q1.w == q2.w; - } - - public static Quaternion slerp2(Quaternion a, Quaternion b, float t) - { - Quaternion quaternion = new Quaternion(); - float f = a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; - float f1 = 1.0F - t; - - if (f >= 0.95F) - { - quaternion.x = a.x * f1 + b.x * t; - quaternion.y = a.y * f1 + b.y * t; - quaternion.z = a.z * f1 + b.z * t; - quaternion.w = a.w * f1 + b.w * t; - return quaternion; - } - else if (f <= -0.99F) - { - quaternion.x = 0.5F * (a.x + b.x); - quaternion.y = 0.5F * (a.y + b.y); - quaternion.z = 0.5F * (a.z + b.z); - quaternion.w = 0.5F * (a.w + b.w); - return quaternion; - } - else - { - float f2 = (float)Math.sqrt((double)(1.0F - f * f)); - float f3 = (float)Math.acos((double)f); - float f4 = (float)Math.sin((double)(f1 * f3)) / f2; - float f5 = (float)Math.sin((double)(t * f3)) / f2; - quaternion.x = a.x * f4 + b.x * f5; - quaternion.y = a.y * f4 + b.y * f5; - quaternion.z = a.z * f4 + b.z * f5; - quaternion.w = a.w * f4 + b.w * f5; - return quaternion; - } - } - - public static Quaternion slerp1(Quaternion q1, Quaternion q2, float t1) - { - Quaternion quaternion = new Quaternion(); - - if (q1.x == q2.x && q1.y == q2.y && q1.z == q2.z && q1.w == q2.w) - { - quaternion.set(q1); - return quaternion; - } - else - { - float f = q1.x * q2.x + q1.y * q2.y + q1.z * q2.z + q1.w * q2.w; - - if (f < 0.0F) - { - q2.x = -q2.x; - q2.y = -q2.y; - q2.z = -q2.z; - q2.w = -q2.w; - f = -f; - } - - float f1 = 1.0F - t1; - float f2 = t1; - - if (1.0F - f > 0.1F) - { - float f3 = (float)Math.acos((double)f); - float f4 = 1.0F / (float)Math.sin((double)f3); - f1 = (float)Math.sin((double)((1.0F - t1) * f3)) * f4; - f2 = (float)Math.sin((double)(t1 * f3)) * f4; - } - - quaternion.x = f1 * q1.x + f2 * q2.x; - quaternion.y = f1 * q1.y + f2 * q2.y; - quaternion.z = f1 * q1.z + f2 * q2.z; - quaternion.w = f1 * q1.w + f2 * q2.w; - return quaternion; - } - } - - public static Matrix4f quatToMatrix4f(Quaternion q) - { - Matrix4f matrix4f = new Matrix4f(); - matrix4f.m00 = 1.0F - 2.0F * (q.getY() * q.getY() + q.getZ() * q.getZ()); - matrix4f.m01 = 2.0F * (q.getX() * q.getY() + q.getZ() * q.getW()); - matrix4f.m02 = 2.0F * (q.getX() * q.getZ() - q.getY() * q.getW()); - matrix4f.m03 = 0.0F; - matrix4f.m10 = 2.0F * (q.getX() * q.getY() - q.getZ() * q.getW()); - matrix4f.m11 = 1.0F - 2.0F * (q.getX() * q.getX() + q.getZ() * q.getZ()); - matrix4f.m12 = 2.0F * (q.getZ() * q.getY() + q.getX() * q.getW()); - matrix4f.m13 = 0.0F; - matrix4f.m20 = 2.0F * (q.getX() * q.getZ() + q.getY() * q.getW()); - matrix4f.m21 = 2.0F * (q.getY() * q.getZ() - q.getX() * q.getW()); - matrix4f.m22 = 1.0F - 2.0F * (q.getX() * q.getX() + q.getY() * q.getY()); - matrix4f.m23 = 0.0F; - matrix4f.m30 = 0.0F; - matrix4f.m31 = 0.0F; - matrix4f.m32 = 0.0F; - matrix4f.m33 = 1.0F; - return matrix4f; - } - - public static FloatBuffer quatToMatrix4fFloatBuf(Quaternion q) - { - FloatBuffer floatbuffer = GLUtils.createFloatBuffer(16); - Matrix4f matrix4f = quatToMatrix4f(q); - matrix4f.store(floatbuffer); - ((Buffer)floatbuffer).flip(); - return floatbuffer; - } -} diff --git a/common/src/main/java/org/vivecraft/render/RenderConfigException.java b/common/src/main/java/org/vivecraft/render/RenderConfigException.java deleted file mode 100644 index 01f7e60e9..000000000 --- a/common/src/main/java/org/vivecraft/render/RenderConfigException.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.vivecraft.render; - -public class RenderConfigException extends Exception -{ - public String title; - public String error; - - public RenderConfigException(String title, String error) - { - this.title = title; - this.error = error; - } - - public String toString() - { - return this.error; - } -} diff --git a/common/src/main/java/org/vivecraft/render/SpecialItemRenderer.java b/common/src/main/java/org/vivecraft/render/SpecialItemRenderer.java deleted file mode 100644 index 2f5e568ec..000000000 --- a/common/src/main/java/org/vivecraft/render/SpecialItemRenderer.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.vivecraft.render;// Optifine -//package org.vivecraft.render; -// -//import com.mojang.blaze3d.vertex.DefaultVertexFormat; -//import com.mojang.blaze3d.vertex.PoseStack; -//import com.mojang.blaze3d.vertex.VertexConsumer; -//import com.mojang.math.Matrix3f; -//import com.mojang.math.Matrix4f; -//import net.minecraft.client.renderer.block.ModelBlockRenderer; -//import net.minecraft.client.renderer.block.model.BakedQuad; -//import net.minecraft.core.Vec3i; -// -//public class SpecialItemRenderer -//{ -// public static void addQuad(VertexConsumer buffer, PoseStack.Pose matrixEntryIn, BakedQuad quadIn, float redIn, float greenIn, float blueIn, float alphaIn, int combinedLightIn, int combinedOverlayIn) -// { -// addQuad(buffer, matrixEntryIn, quadIn, getTempFloat4(1.0F, 1.0F, 1.0F, 1.0F), redIn, greenIn, blueIn, alphaIn, getTempInt4(combinedLightIn, combinedLightIn, combinedLightIn, combinedLightIn), combinedOverlayIn, false); -// } -// -// private static void addQuad(VertexConsumer buffer, PoseStack.Pose matrixEntryIn, BakedQuad quadIn, float[] colorMuls, float redIn, float greenIn, float blueIn, float alphaIn, int[] combinedLightsIn, int combinedOverlayIn, boolean mulColor) -// { -// int[] aint = buffer.isMultiTexture() ? quadIn.getVertexDataSingle() : quadIn.getVertices(); -// buffer.putSprite(quadIn.getSprite()); -// boolean flag = ModelBlockRenderer.isSeparateAoLightValue(); -// Vec3i vec3i = quadIn.getDirection().getNormal(); -// float f = (float)vec3i.getX(); -// float f1 = (float)vec3i.getY(); -// float f2 = (float)vec3i.getZ(); -// Matrix4f matrix4f = matrixEntryIn.pose(); -// Matrix3f matrix3f = matrixEntryIn.normal(); -// float f3 = matrix3f.getTransformX(f, f1, f2); -// float f4 = matrix3f.getTransformY(f, f1, f2); -// float f5 = matrix3f.getTransformZ(f, f1, f2); -// int i = 8; -// int j = DefaultVertexFormat.BLOCK.getIntegerSize(); -// int k = aint.length / j; -// -// for (int l = 0; l < k; ++l) -// { -// int i1 = l * j; -// float f6 = Float.intBitsToFloat(aint[i1 + 0]); -// float f7 = Float.intBitsToFloat(aint[i1 + 1]); -// float f8 = Float.intBitsToFloat(aint[i1 + 2]); -// float f9 = flag ? 1.0F : colorMuls[l]; -// float f10; -// float f11; -// float f12; -// -// if (mulColor) -// { -// int j1 = aint[i1 + 3]; -// float f13 = (float)(j1 & 255) / 255.0F; -// float f14 = (float)(j1 >> 8 & 255) / 255.0F; -// float f15 = (float)(j1 >> 16 & 255) / 255.0F; -// f10 = f13 * f9 * redIn; -// f11 = f14 * f9 * greenIn; -// f12 = f15 * f9 * blueIn; -// } -// else -// { -// f10 = f9 * redIn; -// f11 = f9 * greenIn; -// f12 = f9 * blueIn; -// } -// -// int k1 = combinedLightsIn[l]; -// float f18 = Float.intBitsToFloat(aint[i1 + 4]); -// float f19 = Float.intBitsToFloat(aint[i1 + 5]); -// float f20 = matrix4f.getTransformX(f6, f7, f8, 1.0F); -// float f16 = matrix4f.getTransformY(f6, f7, f8, 1.0F); -// float f17 = matrix4f.getTransformZ(f6, f7, f8, 1.0F); -// -// if (flag) -// { -// buffer.vertex(f20, f16, f17, f10, f11, f12, colorMuls[l], f18, f19, combinedOverlayIn, k1, f3, f4, f5); -// } -// else -// { -// buffer.vertex(f20, f16, f17, f10, f11, f12, alphaIn, f18, f19, combinedOverlayIn, k1, f3, f4, f5); -// } -// } -// } -// -// private static float[] getTempFloat4(float p_getTempFloat4_1_, float p_getTempFloat4_2_, float p_getTempFloat4_3_, float p_getTempFloat4_4_) -// { -// return new float[] {p_getTempFloat4_1_, p_getTempFloat4_2_, p_getTempFloat4_3_, p_getTempFloat4_4_}; -// } -// -// private static int[] getTempInt4(int p_getTempInt4_1_, int p_getTempInt4_2_, int p_getTempInt4_3_, int p_getTempInt4_4_) -// { -// return new int[] {p_getTempInt4_1_, p_getTempInt4_2_, p_getTempInt4_3_, p_getTempInt4_4_}; -// } -//} diff --git a/common/src/main/java/org/vivecraft/render/StaticTexture.java b/common/src/main/java/org/vivecraft/render/StaticTexture.java deleted file mode 100644 index 5a0f366f8..000000000 --- a/common/src/main/java/org/vivecraft/render/StaticTexture.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.vivecraft.render; - -import java.awt.image.BufferedImage; -import java.io.Closeable; -import java.io.IOException; - -import org.apache.commons.io.IOUtils; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import net.minecraft.client.renderer.texture.SimpleTexture; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.resources.Resource; -import net.minecraft.server.packs.resources.ResourceManager; - -public class StaticTexture extends SimpleTexture -{ - private static final Logger LOG = LogManager.getLogger(); - - public StaticTexture(ResourceLocation p_118133_) - { - super(p_118133_); - } - - public void load(ResourceManager pManager) throws IOException - { - this.releaseId(); - Resource resource = null; - - try - { - BufferedImage bufferedimage = null; - boolean flag = false; - boolean flag1 = false; - -// if (Config.isShaders()) -// { -// } - } - finally - { - IOUtils.closeQuietly((Closeable)resource); - } - } -} diff --git a/common/src/main/java/org/vivecraft/render/VRActiveRenderInfo.java b/common/src/main/java/org/vivecraft/render/VRActiveRenderInfo.java deleted file mode 100644 index a263826f5..000000000 --- a/common/src/main/java/org/vivecraft/render/VRActiveRenderInfo.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.vivecraft.render; - -import org.vivecraft.ClientDataHolder; -import org.vivecraft.api.VRData; - -import com.mojang.math.Vector3f; - -import net.minecraft.client.Camera; -import net.minecraft.client.Minecraft; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.phys.Vec3; - -public class VRActiveRenderInfo extends Camera -{ - public void setup(BlockGetter p_90576_, Entity pLevel, boolean pRenderViewEntity, boolean pThirdPerson, float pThirdPersonReverse) - { - this.initialized = true; - this.level = p_90576_; - this.entity = pLevel; - Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); - RenderPass renderpass = dataholder.currentPass; - -// if (Shaders.isShadowPass && renderpass != RenderPass.THIRD && renderpass != RenderPass.CAMERA) - if (renderpass != RenderPass.THIRD && renderpass != RenderPass.CAMERA) - { - renderpass = RenderPass.CENTER; - } - - VRData.VRDevicePose eye = dataholder.vrPlayer.vrdata_world_render.getEye(renderpass); - this.setPosition(eye.getPosition()); - this.xRot = -eye.getPitch(); - this.yRot = eye.getYaw(); - this.forwards.set((float)eye.getDirection().x, (float)eye.getDirection().y, (float)eye.getDirection().z); - Vec3 vec3 = eye.getCustomVector(new Vec3(0.0D, 1.0D, 0.0D)); - this.up.set((float)vec3.x, (float)vec3.y, (float)vec3.z); - eye.getCustomVector(new Vec3(1.0D, 0.0D, 0.0D)); - this.left.set((float)vec3.x, (float)vec3.y, (float)vec3.z); - this.rotation.set(0.0F, 0.0F, 0.0F, 1.0F); - this.rotation.mul(Vector3f.YP.rotationDegrees(-this.yRot)); - this.rotation.mul(Vector3f.XP.rotationDegrees(this.xRot)); - } - - public void tick() - { - } - - public boolean isDetached() - { - return false; - } -} diff --git a/common/src/main/java/org/vivecraft/render/VRCamera.java b/common/src/main/java/org/vivecraft/render/VRCamera.java deleted file mode 100644 index 1ea89234c..000000000 --- a/common/src/main/java/org/vivecraft/render/VRCamera.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.vivecraft.render; - -import org.vivecraft.ClientDataHolder; -import org.vivecraft.api.VRData; - -import com.mojang.math.Vector3f; - -import net.minecraft.client.Camera; -import net.minecraft.client.Minecraft; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.phys.Vec3; - -public class VRCamera extends Camera -{ - public void setup(BlockGetter pLevel, Entity pRenderViewEntity, boolean pThirdPerson, boolean pThirdPersonReverse, float pPartialTicks) - { - this.initialized = true; - this.level = pLevel; - this.entity = pRenderViewEntity; - Minecraft minecraft = Minecraft.getInstance(); - ClientDataHolder dataholder = ClientDataHolder.getInstance(); - RenderPass renderpass = dataholder.currentPass; - -// if (Shaders.isShadowPass && renderpass != RenderPass.THIRD && renderpass != RenderPass.CAMERA) - if (false && renderpass != RenderPass.THIRD && renderpass != RenderPass.CAMERA) - { - renderpass = RenderPass.CENTER; - } - - VRData.VRDevicePose eye = dataholder.vrPlayer.vrdata_world_render.getEye(renderpass); - this.setPosition(eye.getPosition()); - this.xRot = -eye.getPitch(); - this.yRot = eye.getYaw(); - this.forwards.set((float)eye.getDirection().x, (float)eye.getDirection().y, (float)eye.getDirection().z); - Vec3 vec3 = eye.getCustomVector(new Vec3(0.0D, 1.0D, 0.0D)); - this.up.set((float)vec3.x, (float)vec3.y, (float)vec3.z); - eye.getCustomVector(new Vec3(1.0D, 0.0D, 0.0D)); - this.left.set((float)vec3.x, (float)vec3.y, (float)vec3.z); - this.rotation.set(0.0F, 0.0F, 0.0F, 1.0F); - this.rotation.mul(Vector3f.YP.rotationDegrees(-this.yRot)); - this.rotation.mul(Vector3f.XP.rotationDegrees(this.xRot)); - } - - public void tick() - { - } - - public boolean isDetached() - { - return false; - } -} diff --git a/common/src/main/java/org/vivecraft/render/VRPlayerRenderer.java b/common/src/main/java/org/vivecraft/render/VRPlayerRenderer.java deleted file mode 100644 index 71247f560..000000000 --- a/common/src/main/java/org/vivecraft/render/VRPlayerRenderer.java +++ /dev/null @@ -1,313 +0,0 @@ -package org.vivecraft.render; - -import java.util.UUID; - -import org.vivecraft.ClientDataHolder; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Matrix4f; -import com.mojang.math.Vector3f; - -import net.minecraft.client.model.HumanoidModel; -import net.minecraft.client.model.PlayerModel; -import net.minecraft.client.model.geom.ModelLayers; -import net.minecraft.client.model.geom.ModelPart; -import net.minecraft.client.model.geom.builders.CubeDeformation; -import net.minecraft.client.model.geom.builders.LayerDefinition; -import net.minecraft.client.player.AbstractClientPlayer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.entity.EntityRendererProvider; -import net.minecraft.client.renderer.entity.LivingEntityRenderer; -import net.minecraft.client.renderer.entity.layers.ArrowLayer; -import net.minecraft.client.renderer.entity.layers.BeeStingerLayer; -import net.minecraft.client.renderer.entity.layers.CapeLayer; -import net.minecraft.client.renderer.entity.layers.CustomHeadLayer; -import net.minecraft.client.renderer.entity.layers.Deadmau5EarsLayer; -import net.minecraft.client.renderer.entity.layers.ElytraLayer; -import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; -import net.minecraft.client.renderer.entity.layers.ParrotOnShoulderLayer; -import net.minecraft.client.renderer.entity.layers.PlayerItemInHandLayer; -import net.minecraft.client.renderer.entity.layers.SpinAttackEffectLayer; -import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TextComponent; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.Mth; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.entity.HumanoidArm; -import net.minecraft.world.entity.player.PlayerModelPart; -import net.minecraft.world.item.CrossbowItem; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.item.UseAnim; -import net.minecraft.world.phys.Vec3; -import net.minecraft.world.scores.Objective; -import net.minecraft.world.scores.Score; -import net.minecraft.world.scores.Scoreboard; - -public class VRPlayerRenderer extends LivingEntityRenderer> -{ - static LayerDefinition VRLayerDef = LayerDefinition.create(VRPlayerModel.createMesh(CubeDeformation.NONE, false), 64, 64); - static LayerDefinition VRLayerDef_arms = LayerDefinition.create(VRPlayerModel_WithArms.createMesh(CubeDeformation.NONE, false), 64, 64); - static LayerDefinition VRLayerDef_slim = LayerDefinition.create(VRPlayerModel.createMesh(CubeDeformation.NONE, true), 64, 64); - static LayerDefinition VRLayerDef_arms_slim = LayerDefinition.create(VRPlayerModel_WithArms.createMesh(CubeDeformation.NONE, true), 64, 64); - - public VRPlayerRenderer(EntityRendererProvider.Context p_174557_, boolean p_174558_, boolean seated) { - super(p_174557_, !p_174558_ ? (seated ? - new VRPlayerModel<>(VRLayerDef.bakeRoot(), p_174558_) : - new VRPlayerModel_WithArms<>(VRLayerDef_arms.bakeRoot(), p_174558_)) : - (seated ? - new VRPlayerModel<>(VRLayerDef_slim.bakeRoot(), p_174558_) : - new VRPlayerModel_WithArms<>(VRLayerDef_arms_slim.bakeRoot(), p_174558_)) - , 0.5F); - this.addLayer(new HumanoidArmorLayer<>(this, new HumanoidModel(p_174557_.bakeLayer(p_174558_ ? ModelLayers.PLAYER_SLIM_INNER_ARMOR : ModelLayers.PLAYER_INNER_ARMOR)), new HumanoidModel(p_174557_.bakeLayer(p_174558_ ? ModelLayers.PLAYER_SLIM_OUTER_ARMOR : ModelLayers.PLAYER_OUTER_ARMOR)))); - this.addLayer(new PlayerItemInHandLayer<>(this)); - this.addLayer(new ArrowLayer<>(p_174557_, this)); - this.addLayer(new Deadmau5EarsLayer(this)); - this.addLayer(new CapeLayer(this)); - this.addLayer(new CustomHeadLayer<>(this, p_174557_.getModelSet())); - this.addLayer(new ElytraLayer<>(this, p_174557_.getModelSet())); - this.addLayer(new ParrotOnShoulderLayer<>(this, p_174557_.getModelSet())); - this.addLayer(new SpinAttackEffectLayer<>(this, p_174557_.getModelSet())); - this.addLayer(new BeeStingerLayer<>(this)); - - this.addLayer(new HMDLayer(this)); - } - - public void render(AbstractClientPlayer entityIn, float pEntityYaw, float pPartialTicks, PoseStack matrixStackIn, MultiBufferSource pBuffer, int pPackedLight) - { - if (ClientDataHolder.getInstance().currentPass == RenderPass.GUI && entityIn.isLocalPlayer()) - { - Matrix4f matrix4f = matrixStackIn.last().pose(); - double d0 = (new Vec3((double)matrix4f.m00, (double)matrix4f.m01, (double)matrix4f.m02)).length(); - matrixStackIn.last().pose().setIdentity(); - matrixStackIn.last().normal().setIdentity(); - matrixStackIn.translate(0.0D, 0.0D, 1000.0D); - matrixStackIn.scale((float)d0, (float)d0, (float)d0); - matrixStackIn.mulPose(Vector3f.ZP.rotationDegrees(180.0F)); - matrixStackIn.mulPose(Vector3f.YP.rotationDegrees(180.0F + ClientDataHolder.getInstance().vrPlayer.vrdata_world_pre.getBodyYaw())); - } - - PlayerModelController.RotInfo playermodelcontroller$rotinfo = PlayerModelController.getInstance().getRotationsForPlayer(entityIn.getUUID()); - - if (playermodelcontroller$rotinfo != null) - { - matrixStackIn.scale(playermodelcontroller$rotinfo.heightScale, playermodelcontroller$rotinfo.heightScale, playermodelcontroller$rotinfo.heightScale); - this.setModelProperties(entityIn); - super.render(entityIn, pEntityYaw, pPartialTicks, matrixStackIn, pBuffer, pPackedLight); - matrixStackIn.scale(1.0F, 1.0F / playermodelcontroller$rotinfo.heightScale, 1.0F); - } - } - - public Vec3 getRenderOffset(AbstractClientPlayer pEntity, float pPartialTicks) - { - //idk why we do this anymore - return pEntity.isVisuallySwimming() ? new Vec3(0.0D, -0.125D, 0.0D) : Vec3.ZERO; - // return pEntity.isCrouching() ? new Vec3(0.0D, -0.125D, 0.0D) : super.getRenderOffset(pEntity, pPartialTicks); - } - - private void setModelProperties(AbstractClientPlayer pClientPlayer) - { - VRPlayerModel playermodel = (VRPlayerModel) this.getModel(); - - if (pClientPlayer.isSpectator()) - { - playermodel.setAllVisible(false); - playermodel.head.visible = true; - playermodel.hat.visible = true; - } - else - { - playermodel.setAllVisible(true); - playermodel.hat.visible = pClientPlayer.isModelPartShown(PlayerModelPart.HAT); - playermodel.jacket.visible = pClientPlayer.isModelPartShown(PlayerModelPart.JACKET); - playermodel.leftPants.visible = pClientPlayer.isModelPartShown(PlayerModelPart.LEFT_PANTS_LEG); - playermodel.rightPants.visible = pClientPlayer.isModelPartShown(PlayerModelPart.RIGHT_PANTS_LEG); - playermodel.leftSleeve.visible = pClientPlayer.isModelPartShown(PlayerModelPart.LEFT_SLEEVE); - playermodel.rightSleeve.visible = pClientPlayer.isModelPartShown(PlayerModelPart.RIGHT_SLEEVE); - playermodel.crouching = pClientPlayer.isCrouching() && !pClientPlayer.isVisuallySwimming(); - HumanoidModel.ArmPose humanoidmodel$armpose = getArmPose(pClientPlayer, InteractionHand.MAIN_HAND); - HumanoidModel.ArmPose humanoidmodel$armpose1 = getArmPose(pClientPlayer, InteractionHand.OFF_HAND); - - if (humanoidmodel$armpose.isTwoHanded()) - { - humanoidmodel$armpose1 = pClientPlayer.getOffhandItem().isEmpty() ? HumanoidModel.ArmPose.EMPTY : HumanoidModel.ArmPose.ITEM; - } - - if (pClientPlayer.getMainArm() == HumanoidArm.RIGHT) - { - playermodel.rightArmPose = humanoidmodel$armpose; - playermodel.leftArmPose = humanoidmodel$armpose1; - } - else - { - playermodel.rightArmPose = humanoidmodel$armpose1; - playermodel.leftArmPose = humanoidmodel$armpose; - } - } - } - - private static HumanoidModel.ArmPose getArmPose(AbstractClientPlayer p_117795_, InteractionHand p_117796_) - { - ItemStack itemstack = p_117795_.getItemInHand(p_117796_); - - if (itemstack.isEmpty()) - { - return HumanoidModel.ArmPose.EMPTY; - } - else - { - if (p_117795_.getUsedItemHand() == p_117796_ && p_117795_.getUseItemRemainingTicks() > 0) - { - UseAnim useanim = itemstack.getUseAnimation(); - - if (useanim == UseAnim.BLOCK) - { - return HumanoidModel.ArmPose.BLOCK; - } - - if (useanim == UseAnim.BOW) - { - return HumanoidModel.ArmPose.BOW_AND_ARROW; - } - - if (useanim == UseAnim.SPEAR) - { - return HumanoidModel.ArmPose.THROW_SPEAR; - } - - if (useanim == UseAnim.CROSSBOW && p_117796_ == p_117795_.getUsedItemHand()) - { - return HumanoidModel.ArmPose.CROSSBOW_CHARGE; - } - - if (useanim == UseAnim.SPYGLASS) - { - return HumanoidModel.ArmPose.SPYGLASS; - } - } - else if (!p_117795_.swinging && itemstack.is(Items.CROSSBOW) && CrossbowItem.isCharged(itemstack)) - { - return HumanoidModel.ArmPose.CROSSBOW_HOLD; - } - - return HumanoidModel.ArmPose.ITEM; - } - } - - public ResourceLocation getTextureLocation(AbstractClientPlayer pEntity) - { - return pEntity.getSkinTextureLocation(); - } - - protected void scale(AbstractClientPlayer pLivingEntity, PoseStack pMatrixStack, float pPartialTickTime) - { - float f = 0.9375F; - pMatrixStack.scale(0.9375F, 0.9375F, 0.9375F); - } - - protected void renderNameTag(AbstractClientPlayer pEntity, Component pDisplayName, PoseStack pMatrixStack, MultiBufferSource pBuffer, int pPackedLight) - { - double d0 = this.entityRenderDispatcher.distanceToSqr(pEntity); - pMatrixStack.pushPose(); - - if (d0 < 100.0D) - { - Scoreboard scoreboard = pEntity.getScoreboard(); - Objective objective = scoreboard.getDisplayObjective(2); - - if (objective != null) - { - Score score = scoreboard.getOrCreatePlayerScore(pEntity.getScoreboardName(), objective); - super.renderNameTag(pEntity, (new TextComponent(Integer.toString(score.getScore()))).append(" ").append(objective.getDisplayName()), pMatrixStack, pBuffer, pPackedLight); - pMatrixStack.translate(0.0D, (double)(9.0F * 1.15F * 0.025F), 0.0D); - } - } - - super.renderNameTag(pEntity, pDisplayName, pMatrixStack, pBuffer, pPackedLight); - pMatrixStack.popPose(); - } - - public void renderRightHand(PoseStack pMatrixStack, MultiBufferSource pBuffer, int pCombinedLight, AbstractClientPlayer pPlayer) - { - this.renderHand(pMatrixStack, pBuffer, pCombinedLight, pPlayer, (this.model).rightArm, (this.model).rightSleeve); - } - - public void renderLeftHand(PoseStack pMatrixStack, MultiBufferSource pBuffer, int pCombinedLight, AbstractClientPlayer pPlayer) - { - this.renderHand(pMatrixStack, pBuffer, pCombinedLight, pPlayer, (this.model).leftArm, (this.model).leftSleeve); - } - - private void renderHand(PoseStack pMatrixStack, MultiBufferSource pBuffer, int pCombinedLight, AbstractClientPlayer pPlayer, ModelPart pRendererArm, ModelPart pRendererArmwear) - { - VRPlayerModel playermodel = (VRPlayerModel) this.getModel(); - this.setModelProperties(pPlayer); - playermodel.attackTime = 0.0F; - playermodel.crouching = false; - playermodel.swimAmount = 0.0F; - playermodel.setupAnim(pPlayer, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F); - pRendererArm.xRot = 0.0F; - pRendererArm.render(pMatrixStack, pBuffer.getBuffer(RenderType.entitySolid(pPlayer.getSkinTextureLocation())), pCombinedLight, OverlayTexture.NO_OVERLAY); - pRendererArmwear.xRot = 0.0F; - pRendererArmwear.render(pMatrixStack, pBuffer.getBuffer(RenderType.entityTranslucent(pPlayer.getSkinTextureLocation())), pCombinedLight, OverlayTexture.NO_OVERLAY); - } - - protected void setupRotations(AbstractClientPlayer pEntityLiving, PoseStack pMatrixStack, float pAgeInTicks, float pRotationYaw, float pPartialTicks) - { - VRPlayerModel vrplayermodel = (VRPlayerModel) this.getModel(); - double d4 = pEntityLiving.xOld + (pEntityLiving.getX() - pEntityLiving.xOld) * (double)pPartialTicks; - d4 = pEntityLiving.yOld + (pEntityLiving.getY() - pEntityLiving.yOld) * (double)pPartialTicks; - d4 = pEntityLiving.zOld + (pEntityLiving.getZ() - pEntityLiving.zOld) * (double)pPartialTicks; - - UUID uuid = pEntityLiving.getUUID(); - if (PlayerModelController.getInstance().isTracked(uuid)) - { - PlayerModelController.RotInfo playermodelcontroller$rotinfo = PlayerModelController.getInstance().getRotationsForPlayer(uuid); - pRotationYaw = (float)Math.toDegrees(playermodelcontroller$rotinfo.getBodyYawRadians()); - } - float wasyaw = pEntityLiving.getYRot(); - - //vanilla below here - float f = pEntityLiving.getSwimAmount(pPartialTicks); - - if (pEntityLiving.isFallFlying()) - { - super.setupRotations(pEntityLiving, pMatrixStack, pAgeInTicks, pRotationYaw, pPartialTicks); - float f1 = (float)pEntityLiving.getFallFlyingTicks() + pPartialTicks; - float f2 = Mth.clamp(f1 * f1 / 100.0F, 0.0F, 1.0F); - - if (!pEntityLiving.isAutoSpinAttack()) - { - pMatrixStack.mulPose(Vector3f.XP.rotationDegrees(f2 * (-90.0F - pEntityLiving.getXRot()))); - } - - Vec3 vec3 = pEntityLiving.getViewVector(pPartialTicks); - Vec3 vec31 = pEntityLiving.getDeltaMovement(); - double d0 = vec31.horizontalDistanceSqr(); - double d1 = vec3.horizontalDistanceSqr(); - - if (d0 > 0.0D && d1 > 0.0D) - { - double d2 = (vec31.x * vec3.x + vec31.z * vec3.z) / Math.sqrt(d0 * d1); - double d3 = vec31.x * vec3.z - vec31.z * vec3.x; - pMatrixStack.mulPose(Vector3f.YP.rotation((float)(Math.signum(d3) * Math.acos(d2)))); - } - } - else if (f > 0.0F) - { - super.setupRotations(pEntityLiving, pMatrixStack, pAgeInTicks, pRotationYaw, pPartialTicks); - float f3 = pEntityLiving.isInWater() ? -90.0F - pEntityLiving.getXRot() : -90.0F; - float f4 = Mth.lerp(f, 0.0F, f3); - pMatrixStack.mulPose(Vector3f.XP.rotationDegrees(f4)); - - if (pEntityLiving.isVisuallySwimming()) - { - pMatrixStack.translate(0.0D, -1.0D, (double)0.3F); - } - } - else - { - super.setupRotations(pEntityLiving, pMatrixStack, pAgeInTicks, pRotationYaw, pPartialTicks); - } - } -} diff --git a/common/src/main/java/org/vivecraft/render/VRRenderType.java b/common/src/main/java/org/vivecraft/render/VRRenderType.java deleted file mode 100644 index 7b351f472..000000000 --- a/common/src/main/java/org/vivecraft/render/VRRenderType.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.vivecraft.render;//package org.vivecraft.render; -// -//import com.mojang.blaze3d.vertex.DefaultVertexFormat; -//import java.util.HashMap; -//import java.util.Map; -//import java.util.function.Supplier; -//import net.minecraft.client.renderer.RenderStateShard; -//import net.minecraft.client.renderer.RenderType; -//import net.minecraft.resources.ResourceLocation; -//import net.optifine.util.CompoundKey; -// -//public abstract class VRRenderType extends RenderStateShard -//{ -// private static Map RENDER_TYPES; -// -// public VRRenderType(String p_110161_, Runnable p_110162_, Runnable p_110163_) -// { -// super(p_110161_, p_110162_, p_110163_); -// } -// -// private static RenderType getRenderType(String p_getRenderType_0_, ResourceLocation p_getRenderType_1_, Supplier p_getRenderType_2_) -// { -// CompoundKey compoundkey = new CompoundKey(p_getRenderType_0_, p_getRenderType_1_); -// return getRenderType(compoundkey, p_getRenderType_2_); -// } -// -// private static RenderType getRenderType(CompoundKey p_getRenderType_0_, Supplier p_getRenderType_1_) -// { -// if (RENDER_TYPES == null) -// { -// RENDER_TYPES = new HashMap<>(); -// } -// -// RenderType rendertype = RENDER_TYPES.get(p_getRenderType_0_); -// -// if (rendertype != null) -// { -// return rendertype; -// } -// else -// { -// rendertype = p_getRenderType_1_.get(); -// RENDER_TYPES.put(p_getRenderType_0_, rendertype); -// return rendertype; -// } -// } -// -//// public static RenderType getTextNoCull(ResourceLocation locationIn) -//// { -//// return getRenderType("text_nocull", locationIn, () -> -//// { -//// return RenderType.create("text_nocull", DefaultVertexFormat.POSITION_COLOR_TEX_LIGHTMAP, 7, 256, false, true, RenderType.CompositeState.builder().setTextureState(new RenderStateShard.TextureStateShard(locationIn, false, false)).setAlphaState(DEFAULT_ALPHA).setTransparencyState(NO_TRANSPARENCY).setLightmapState(LIGHTMAP).setCullState(NO_CULL).createCompositeState(false)); -//// }); -//// } -//} diff --git a/common/src/main/java/org/vivecraft/render/ik/IKHelper.java b/common/src/main/java/org/vivecraft/render/ik/IKHelper.java deleted file mode 100644 index 360e24ee9..000000000 --- a/common/src/main/java/org/vivecraft/render/ik/IKHelper.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.vivecraft.render.ik; - -public class IKHelper -{ - public static IKInfo CalcIK_2D_TwoBoneAnalytic(boolean solvePosAngle2, double length1, double length2, double targetX, double targetY) - { - double d0 = 1.0E-4D; - IKInfo ikinfo = new IKInfo(); - ikinfo.foundValidSolution = true; - double d1 = targetX * targetX + targetY * targetY; - double d3 = 2.0D * length1 * length2; - double d2; - double d8; - - if (d3 > 1.0E-4D) - { - d8 = (d1 - length1 * length1 - length2 * length2) / d3; - - if (d8 < -1.0D || d8 > 1.0D) - { - ikinfo.foundValidSolution = false; - } - - d8 = Math.max(-1.0D, Math.min(1.0D, d8)); - ikinfo.angle2 = Math.acos(d8); - - if (!solvePosAngle2) - { - ikinfo.angle2 = -ikinfo.angle2; - } - - d2 = Math.sin(ikinfo.angle2); - } - else - { - double d4 = (length1 + length2) * (length1 + length2); - - if (d1 < d4 - 1.0E-4D || d1 > d4 + 1.0E-4D) - { - ikinfo.foundValidSolution = false; - } - - ikinfo.angle2 = 0.0D; - d8 = 1.0D; - d2 = 0.0D; - } - - double d9 = length1 + length2 * d8; - double d5 = length2 * d2; - double d6 = targetY * d9 - targetX * d5; - double d7 = targetX * d9 + targetY * d5; - ikinfo.angle1 = Math.atan2(d6, d7); - return ikinfo; - } -} diff --git a/common/src/main/java/org/vivecraft/render/ik/IKInfo.java b/common/src/main/java/org/vivecraft/render/ik/IKInfo.java deleted file mode 100644 index 19bc5c0ce..000000000 --- a/common/src/main/java/org/vivecraft/render/ik/IKInfo.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.vivecraft.render.ik; - -public class IKInfo -{ - public double angle1 = 0.0D; - public double angle2 = 0.0D; - public boolean foundValidSolution = false; -} diff --git a/common/src/main/java/org/vivecraft/api/AimFixHandler.java b/common/src/main/java/org/vivecraft/server/AimFixHandler.java similarity index 71% rename from common/src/main/java/org/vivecraft/api/AimFixHandler.java rename to common/src/main/java/org/vivecraft/server/AimFixHandler.java index 74595da8d..1dae32793 100644 --- a/common/src/main/java/org/vivecraft/api/AimFixHandler.java +++ b/common/src/main/java/org/vivecraft/server/AimFixHandler.java @@ -1,4 +1,4 @@ -package org.vivecraft.api; +package org.vivecraft.server; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; @@ -12,6 +12,7 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.network.ServerGamePacketListenerImpl; import net.minecraft.world.phys.Vec3; +import org.vivecraft.server.config.ServerConfig; public class AimFixHandler extends ChannelInboundHandlerAdapter { @@ -22,12 +23,11 @@ public AimFixHandler(Connection netManager) this.netManager = netManager; } - public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception - { + public void channelRead(ChannelHandlerContext ctx, Object msg) { ServerPlayer serverplayer = ((ServerGamePacketListenerImpl)this.netManager.getPacketListener()).player; boolean flag = msg instanceof ServerboundUseItemPacket || msg instanceof ServerboundUseItemOnPacket || msg instanceof ServerboundPlayerActionPacket; - if (!CommonNetworkHelper.isVive(serverplayer) || !flag || serverplayer.getServer() == null) { + if (!ServerVRPlayers.isVRPlayer(serverplayer) || !flag || serverplayer.getServer() == null) { ctx.fireChannelRead(msg); return; } @@ -44,23 +44,26 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception float yHeadRotO = serverplayer.yHeadRotO; float eyeHeight = serverplayer.getEyeHeight(); - ServerVivePlayer serverviveplayer = CommonNetworkHelper.vivePlayers.get(serverplayer.getGameProfile().getId()); + ServerVivePlayer serverviveplayer = ServerVRPlayers.getVivePlayer(serverplayer); + Vec3 aimPos = null; if (serverviveplayer != null) { - Vec3 pos = serverviveplayer.getControllerPos(0, serverplayer, true); + aimPos = serverviveplayer.getControllerPos(0, serverplayer, true); Vec3 dir = serverviveplayer.getControllerDir(0); - serverplayer.setPosRaw(pos.x, pos.y, pos.z); - serverplayer.xo = pos.x; - serverplayer.yo = pos.y; - serverplayer.zo = pos.z; + serverplayer.setPosRaw(aimPos.x, aimPos.y, aimPos.z); + serverplayer.xo = aimPos.x; + serverplayer.yo = aimPos.y; + serverplayer.zo = aimPos.z; serverplayer.setXRot((float)Math.toDegrees(Math.asin(-dir.y))); serverplayer.setYRot((float)Math.toDegrees(Math.atan2(-dir.x, dir.z))); serverplayer.xRotO = serverplayer.getXRot(); serverplayer.yRotO = serverplayer.yHeadRotO = serverplayer.yHeadRot = serverplayer.getYRot(); - serverplayer.eyeHeight = 0; - serverviveplayer.offset = position.subtract(pos); - System.out.println("AimFix " + pos.x + " " + pos.y + " " + pos.z + " " + (float)Math.toDegrees(Math.asin(-dir.y)) + " " + (float)Math.toDegrees(Math.atan2(-dir.x, dir.z))); + serverplayer.eyeHeight = 0.0001F; + serverviveplayer.offset = position.subtract(aimPos); + if (ServerConfig.debug.get()) { + System.out.println("AimFix " + aimPos.x + " " + aimPos.y + " " + aimPos.z + " " + (float) Math.toDegrees(Math.asin(-dir.y)) + " " + (float) Math.toDegrees(Math.atan2(-dir.x, dir.z))); + } } try { @@ -79,6 +82,14 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception ReferenceCountUtil.release(msg); } + // if the packed changed the player position, use that + if ((aimPos != null && !serverplayer.position().equals(aimPos)) || (aimPos == null && !serverplayer.position().equals(position))) { + position = serverplayer.position(); + if (ServerConfig.debug.get()) { + System.out.println("AimFix moved Player to " + position.x + " " + position.y + " " + position.z); + } + } + serverplayer.setPosRaw(position.x, position.y, position.z); serverplayer.xo = positionO.x; serverplayer.yo = positionO.y; diff --git a/common/src/main/java/org/vivecraft/server/Events.java b/common/src/main/java/org/vivecraft/server/Events.java deleted file mode 100644 index 866cb5fae..000000000 --- a/common/src/main/java/org/vivecraft/server/Events.java +++ /dev/null @@ -1,190 +0,0 @@ -//package org.vivecraft.server; -// -//import net.minecraft.network.chat.Component; -//import net.minecraft.network.chat.TextComponent; -//import net.minecraft.server.MinecraftServer; -//import net.minecraft.server.level.ServerPlayer; -//import net.minecraft.world.damagesource.DamageSource; -//import net.minecraft.world.entity.Entity; -//import net.minecraft.world.entity.LivingEntity; -//import net.minecraft.world.entity.Mob; -//import net.minecraft.world.entity.ai.goal.Goal; -//import net.minecraft.world.entity.ai.goal.GoalSelector; -//import net.minecraft.world.entity.ai.goal.SwellGoal; -//import net.minecraft.world.entity.ai.goal.WrappedGoal; -//import net.minecraft.world.entity.monster.Creeper; -//import net.minecraft.world.entity.monster.EnderMan; -//import net.minecraft.world.entity.player.Player; -//import net.minecraft.world.entity.projectile.AbstractArrow; -//import net.minecraft.world.entity.projectile.Arrow; -//import net.minecraft.world.entity.projectile.Projectile; -//import net.minecraft.world.entity.projectile.ThrownTrident; -//import net.minecraft.world.phys.Vec3; -//import org.vivecraft.api.CommonNetworkHelper; -//import org.vivecraft.api.ServerVivePlayer; -//import org.vivecraft.config.ServerConfig; -// -//import java.util.concurrent.Executors; -//import java.util.concurrent.ScheduledExecutorService; -//import java.util.concurrent.TimeUnit; -//import java.util.function.Function; -//import java.util.function.Supplier; -// -//public class Events { -// -// public static void onAttackEntity(ServerPlayer target, ServerPlayer player, Function cancel) { -// if (CommonNetworkHelper.isVive(player)) { -// ServerVivePlayer data = CommonNetworkHelper.vivePlayers.get(player); -// if (data.isSeated()) { // Seated VR vs... -// if (CommonNetworkHelper.isVive(target)) { -// ServerVivePlayer targetData = CommonNetworkHelper.vivePlayers.get(target); -// if (targetData.isSeated()) { // ...seated VR -// if (!ServerConfig.seatedVrVsSeatedVR.get()) cancel.apply(true); -// } else { // ...VR -// if (!ServerConfig.vrVsSeatedVR.get()) cancel.apply(true); -// } -// } else { // ...non-VR -// if (!ServerConfig.seatedVrVsNonVR.get()) cancel.apply(true); -// } -// } else { // VR vs... -// if (CommonNetworkHelper.isVive(target)) { -// ServerVivePlayer targetData = CommonNetworkHelper.vivePlayers.get(target); -// if (targetData.isSeated()) { // ...seated VR -// if (!ServerConfig.vrVsSeatedVR.get()) cancel.apply(true); -// } else { // ...VR -// if (!ServerConfig.vrVsVR.get()) cancel.apply(true); -// } -// } else { // ...non-VR -// if (!ServerConfig.vrVsNonVR.get()) cancel.apply(true); -// } -// } -// } else { // Non-VR vs... -// if (CommonNetworkHelper.isVive(target)) { -// ServerVivePlayer targetData = CommonNetworkHelper.vivePlayers.get(target); -// if (targetData.isSeated()) { // ...seated VR -// if (!ServerConfig.seatedVrVsNonVR.get()) cancel.apply(true); -// } else { // ...VR -// if (!ServerConfig.vrVsNonVR.get()) cancel.apply(true); -// } -// } -// } -// } -// -// public void onArrowLoose(ServerPlayer player, Function charge) { -// ServerVivePlayer data = CommonNetworkHelper.vivePlayers.get(player); -// if (data != null && !data.isSeated() && data.getDraw() > 0) { -// charge.apply(Math.round(data.getDraw() * 20)); -// } -// } -// -// public void onLivingHurt(LivingEntity target, DamageSource source, Supplier getAmount, Function setAmount) { -// if (source.getDirectEntity() instanceof Arrow && source.getEntity() instanceof Player) { -// Arrow arrow = (Arrow) source.getDirectEntity(); -// ServerPlayer attacker = (ServerPlayer)source.getEntity(); -// if (CommonNetworkHelper.isVive(attacker)) { -// ServerVivePlayer data = CommonNetworkHelper.vivePlayers.get(attacker); -// boolean headshot = isHeadshot(target, arrow); -// if (data.isSeated()) { -// if (headshot) setAmount.apply(getAmount.get() * ServerConfig.bowSeatedHeadshotMul.get().floatValue()); -// else setAmount.apply(getAmount.get() * ServerConfig.bowSeatedMul.get().floatValue()); -// } else { -// if (headshot) setAmount.apply(getAmount.get() * ServerConfig.bowStandingHeadshotMul.get().floatValue()); -// else setAmount.apply(getAmount.get() * ServerConfig.bowStandingMul.get().floatValue()); -// } -// } -// } -// } -// -// public static boolean isHeadshot(LivingEntity target, Arrow arrow) { -// if (target.isPassenger()) return false; -// if (target instanceof Player) { -// Player player = (Player) target; -// if (player.isShiftKeyDown()) { -// //totalHeight = 1.65; -// //bodyHeight = 1.20; -// //headHeight = 0.45; -// if (arrow.getY() >= player.getY() + 1.20) return true; -// } else { -// //totalHeight = 1.80; -// //bodyHeight = 1.35; -// //headHeight = 0.45; -// if (arrow.getY() >= player.getY() + 1.35) return true; -// } -// } else { -// // TODO: mobs -// } -// return false; -// } -// -// public void onEntityJoinWorld(Entity entity, MinecraftServer server) { -// if (entity instanceof ServerPlayer player) { -// if (ServerConfig.vrOnly.get() && !player.hasPermissions(2)) { -// scheduler.schedule(() -> { -// server.submit(() -> { -// if (player.connection.getConnection().isConnected() && !CommonNetworkHelper.isVive(player)) { -// server.sendMessage(new TextComponent(ServerConfig.vrOnlyKickMessage.get()), player.getUUID()); -// server.sendMessage(new TextComponent("If this is not a VR client, you will be kicked in " + ServerConfig.vrOnlyKickDelay.get() + " seconds."), player.getUUID()); -// scheduler.schedule(() -> { -// server.submit(() -> { -// if (player.connection.getConnection().isConnected() && CommonNetworkHelper.isVive(player)) { -// player.connection.disconnect(new TextComponent(ServerConfig.vrOnlyKickMessage.get())); -// } -// }); -// }, Math.round(ServerConfig.vrOnlyKickDelay.get() * 1000), TimeUnit.MILLISECONDS); -// } -// }); -// }, 1000, TimeUnit.MILLISECONDS); -// } -// } else if (entity instanceof Projectile projectile) { -// if (!(projectile.getOwner() instanceof Player)) -// return; -// ServerPlayer shooter = (ServerPlayer)projectile.getOwner(); -// if (!CommonNetworkHelper.isVive(shooter)) -// return; -// -// boolean arrow = projectile instanceof AbstractArrow && !(projectile instanceof ThrownTrident); -// ServerVivePlayer data = CommonNetworkHelper.vivePlayers.get(shooter); -// Vec3 pos = data.getControllerPos(data.activeHand, shooter); -// Vec3 aim = data.getControllerDir(data.activeHand); -// -// if (arrow && !data.isSeated() && data.getDraw() > 0) { -// pos = data.getControllerPos(0, shooter); -// aim = data.getControllerDir(1); -// } -// -// pos = pos.add(aim.scale(0.6)); -// double vel = projectile.getDeltaMovement().length(); -// projectile.setPos(pos.x, pos.y, pos.z); -// projectile.shoot(aim.x, aim.y, aim.z, (float)vel, 0.0f); -// -// Vec3 shooterMotion = shooter.getDeltaMovement(); -// projectile.setDeltaMovement(projectile.getDeltaMovement().add(shooterMotion.x, shooter.isOnGround() ? 0.0 : shooterMotion.y, shooterMotion.z)); -// -// } else if (entity instanceof Creeper creeper) { -// replaceAIGoal(creeper, creeper.goalSelector, SwellGoal.class, () -> new VRCreeperSwellGoal(creeper)); -// } else if (entity instanceof EnderMan enderman) { -// replaceAIGoal(enderman, enderman.goalSelector, EnderMan.EndermanFreezeWhenLookedAt.class, () -> new VREndermanStareGoal(enderman)); -// replaceAIGoal(enderman, enderman.targetSelector, EnderMan.EndermanLookForPlayerGoal.class, () -> new VREndermanFindPlayerGoal(enderman, enderman::isAngryAt)); -// } -// } -// -// public static final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); -// static { -// Runtime.getRuntime().addShutdownHook(new Thread() { -// @Override -// public void run() { -// scheduler.shutdownNow(); -// } -// }); -// } -// -// public static void replaceAIGoal(Mob entity, GoalSelector goalSelector, Class targetGoal, Supplier newGoalSupplier) { -// WrappedGoal goal = goalSelector.availableGoals.stream().filter((g) -> targetGoal.isInstance(g.getGoal())).findFirst().orElse(null); -// if (goal != null) { -// goalSelector.removeGoal(goal.getGoal()); -// goalSelector.addGoal(goal.getPriority(), newGoalSupplier.get()); -// } else { -// } -// } -// -//} diff --git a/common/src/main/java/org/vivecraft/server/MinecraftServerExt.java b/common/src/main/java/org/vivecraft/server/MinecraftServerExt.java new file mode 100644 index 000000000..a5afa4d25 --- /dev/null +++ b/common/src/main/java/org/vivecraft/server/MinecraftServerExt.java @@ -0,0 +1,8 @@ +package org.vivecraft.server; + +import java.util.Map; +import java.util.UUID; + +public interface MinecraftServerExt { + Map getPlayersWithVivecraft(); +} diff --git a/common/src/main/java/org/vivecraft/server/ServerNetworking.java b/common/src/main/java/org/vivecraft/server/ServerNetworking.java new file mode 100644 index 000000000..3ac07cc39 --- /dev/null +++ b/common/src/main/java/org/vivecraft/server/ServerNetworking.java @@ -0,0 +1,312 @@ +package org.vivecraft.server; + +import com.mojang.logging.LogUtils; +import io.netty.buffer.Unpooled; +import net.minecraft.Util; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.protocol.game.ClientboundCustomPayloadPacket; +import net.minecraft.server.level.ServerChunkCache; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerGamePacketListenerImpl; +import net.minecraft.server.network.ServerPlayerConnection; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.Pose; +import net.minecraft.world.entity.player.Player; +import org.slf4j.Logger; +import org.vivecraft.common.network.CommonNetworkHelper; +import org.vivecraft.common.network.VrPlayerState; +import org.vivecraft.common.CommonDataHolder; +import org.vivecraft.mixin.server.ChunkMapAccessor; +import org.vivecraft.server.config.ServerConfig; + +import java.util.*; + +import static org.vivecraft.server.ServerVRPlayers.getVivePlayer; + +public class ServerNetworking { + + // temporarily stores the packets from legacy clients to assemble a complete VrPlayerState + private final static Map> legacyDataMap = new HashMap<>(); + + private static final Logger LOGGER = LogUtils.getLogger(); + + public static void handlePacket(CommonNetworkHelper.PacketDiscriminators packetID, FriendlyByteBuf buffer, ServerGamePacketListenerImpl listener) { + var playerEntity = listener.player; + ServerVivePlayer vivePlayer = getVivePlayer(playerEntity); + + if (vivePlayer == null && packetID != CommonNetworkHelper.PacketDiscriminators.VERSION) { + return; + } + + switch (packetID) { + case VERSION: + // Vivecraft client connected, send server settings + + vivePlayer = new ServerVivePlayer(playerEntity); + + // read initial VR State + byte[] stringBytes = new byte[buffer.readableBytes()]; + buffer.readBytes(stringBytes); + String[] parts = new String(stringBytes).split("\\n"); + String clientVivecraftVersion = parts[0]; + + if (ServerConfig.debug.get()) { + LOGGER.info("Vivecraft: player '{}' joined with {}", listener.player.getName().getString(), clientVivecraftVersion); + } + + if (parts.length >= 3) { + // has versions + int clientMaxVersion = Integer.parseInt(parts[1]); + int clientMinVersion = Integer.parseInt(parts[2]); + // check if client supports a supported version + if (CommonNetworkHelper.MIN_SUPPORTED_NETWORK_VERSION <= clientMaxVersion + && clientMinVersion <= CommonNetworkHelper.MAX_SUPPORTED_NETWORK_VERSION) { + vivePlayer.networkVersion = Math.min(clientMaxVersion, CommonNetworkHelper.MAX_SUPPORTED_NETWORK_VERSION); + if (ServerConfig.debug.get()) { + LOGGER.info("{} networking supported, using version vivePlayer.networkVersion", listener.player.getName().getString()); + } + } else { + // unsupported version, send notification, and disregard + listener.player.sendMessage(new TextComponent("Unsupported vivecraft version, VR features will not work"), Util.NIL_UUID); + if (ServerConfig.debug.get()) { + LOGGER.info("{} networking not supported. client range [{},{}], server range [{},{}]", + listener.player.getName().getString(), + clientMinVersion, + clientMaxVersion, + CommonNetworkHelper.MIN_SUPPORTED_NETWORK_VERSION, + CommonNetworkHelper.MAX_SUPPORTED_NETWORK_VERSION); + } + return; + } + } else { + // client didn't send a version, so it's a legacy client + vivePlayer.networkVersion = -1; + if (ServerConfig.debug.get()) { + LOGGER.info("{} using legacy networking", listener.player.getName().getString()); + } + } + + vivePlayer.setVR(!clientVivecraftVersion.contains("NONVR")); + + ServerVRPlayers.getPlayersWithVivecraft(listener.player.server).put(playerEntity.getUUID(), vivePlayer); + + listener.send(getVivecraftServerPacket(CommonNetworkHelper.PacketDiscriminators.VERSION, CommonDataHolder.getInstance().versionIdentifier)); + listener.send(getVivecraftServerPacket(CommonNetworkHelper.PacketDiscriminators.REQUESTDATA, new byte[0])); + + if (ServerConfig.climbeyEnabled.get()) { + listener.send(getClimbeyServerPacket()); + } + + if (ServerConfig.teleportEnabled.get()) { + listener.send(getVivecraftServerPacket(CommonNetworkHelper.PacketDiscriminators.TELEPORT, new byte[0])); + } + if (ServerConfig.teleportLimitedSurvival.get()) { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeUtf("limitedTeleport"); + byteBuf.writeUtf(""+true); + + byteBuf.writeUtf("teleportLimitUp"); + byteBuf.writeUtf(""+ ServerConfig.teleportUpLimit.get()); + + byteBuf.writeUtf("teleportLimitDown"); + byteBuf.writeUtf(""+ ServerConfig.teleportDownLimit.get()); + + byteBuf.writeUtf("teleportLimitHoriz"); + byteBuf.writeUtf(""+ ServerConfig.teleportHorizontalLimit.get()); + + listener.send(getVivecraftServerPacket(CommonNetworkHelper.PacketDiscriminators.SETTING_OVERRIDE, byteBuf.readByteArray())); + } + + if (ServerConfig.worldscaleLimited.get()) { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeUtf("worldScale.min"); + byteBuf.writeUtf(""+ ServerConfig.worldscaleMin.get()); + + byteBuf.writeUtf("worldScale.max"); + byteBuf.writeUtf(""+ ServerConfig.worldscaleMax.get()); + + listener.send(getVivecraftServerPacket(CommonNetworkHelper.PacketDiscriminators.SETTING_OVERRIDE, byteBuf.readByteArray())); + } + + if (ServerConfig.crawlingEnabled.get()) { + listener.send(getVivecraftServerPacket(CommonNetworkHelper.PacketDiscriminators.CRAWL, new byte[0])); + } + + // send if hotswitching is allowed + listener.send(getVivecraftServerPacket(CommonNetworkHelper.PacketDiscriminators.VR_SWITCHING, new byte[]{(byte)(ServerConfig.vrSwitchingEnabled.get() && !ServerConfig.vr_only.get() ? 1 : 0)})); + + listener.send(getVivecraftServerPacket(CommonNetworkHelper.PacketDiscriminators.NETWORK_VERSION, new byte[]{(byte)vivePlayer.networkVersion})); + + break; + case IS_VR_ACTIVE: + if (vivePlayer.isVR() == buffer.readBoolean()) { + break; + } + vivePlayer.setVR(!vivePlayer.isVR()); + if (!vivePlayer.isVR()) { + for (var trackingPlayer : ServerNetworking.getTrackingPlayers(playerEntity)) { + if (!ServerVRPlayers.getPlayersWithVivecraft(listener.player.server).containsKey(trackingPlayer.getPlayer().getUUID()) || trackingPlayer.getPlayer() == playerEntity) { + continue; + } + trackingPlayer.send(createVRActivePlayerPacket(false, playerEntity.getUUID())); + } + } + break; + + case DRAW: + vivePlayer.draw = buffer.readFloat(); + break; + + case VR_PLAYER_STATE: + vivePlayer.vrPlayerState = VrPlayerState.deserialize(buffer); + + case MOVEMODE: + case REQUESTDATA: + default: + break; + + case WORLDSCALE: + vivePlayer.worldScale = buffer.readFloat(); + break; + case HEIGHT: + vivePlayer.heightScale = buffer.readFloat(); + break; + + case TELEPORT: + float f = buffer.readFloat(); + float f1 = buffer.readFloat(); + float f2 = buffer.readFloat(); + playerEntity.absMoveTo(f, f1, f2, playerEntity.getYRot(), playerEntity.getXRot()); + break; + + case CLIMBING: + playerEntity.fallDistance = 0.0F; + case ACTIVEHAND: + vivePlayer.activeHand = buffer.readByte(); + + if (vivePlayer.isSeated()) { + vivePlayer.activeHand = 0; + } + + break; + + case CRAWL: + vivePlayer.crawling = buffer.readByte() != 0; + + if (vivePlayer.crawling) { + playerEntity.setPose(Pose.SWIMMING); + } + break; + // legacy support + case CONTROLLER0DATA: + case CONTROLLER1DATA: + case HEADDATA: + Map playerData; + if ((playerData = legacyDataMap.get(playerEntity.getUUID())) == null) { + playerData = new HashMap<>(); + legacyDataMap.put(playerEntity.getUUID(), playerData); + } + + playerData.put(packetID, buffer); + + if (playerData.size() == 3) { + FriendlyByteBuf controller0Data = playerData.get(CommonNetworkHelper.PacketDiscriminators.CONTROLLER0DATA); + controller0Data.resetReaderIndex().readByte(); + FriendlyByteBuf controller1Data = playerData.get(CommonNetworkHelper.PacketDiscriminators.CONTROLLER1DATA); + controller1Data.resetReaderIndex().readByte(); + FriendlyByteBuf headData = playerData.get(CommonNetworkHelper.PacketDiscriminators.HEADDATA); + headData.resetReaderIndex().readByte(); + + vivePlayer.vrPlayerState = new VrPlayerState( + headData.readBoolean(), // isSeated + org.vivecraft.common.network.Pose.deserialize(headData), // head pose + controller0Data.readBoolean(), // reverseHands 0 + org.vivecraft.common.network.Pose.deserialize(controller0Data), // controller0 pose + controller1Data.readBoolean(), // reverseHands 1 + org.vivecraft.common.network.Pose.deserialize(controller1Data)); // controller1 pose + legacyDataMap.remove(playerEntity.getUUID()); + } + break; + } + } + + public static Set getTrackingPlayers(Entity entity) { + var manager = entity.level.getChunkSource(); + var storage = ((ServerChunkCache) manager).chunkMap; + var playerTracker = ((ChunkMapAccessor) storage).getTrackedEntities().get(entity.getId()); + return playerTracker != null ? playerTracker.getPlayersTracking() : Collections.emptySet(); + } + + public static ClientboundCustomPayloadPacket createVRActivePlayerPacket(boolean vrActive, UUID playerID) { + var buffer = new FriendlyByteBuf(Unpooled.buffer()); + buffer.writeByte(CommonNetworkHelper.PacketDiscriminators.IS_VR_ACTIVE.ordinal()); + buffer.writeBoolean(vrActive); + buffer.writeUUID(playerID); + return new ClientboundCustomPayloadPacket(CommonNetworkHelper.CHANNEL, buffer); + } + + public static ClientboundCustomPayloadPacket createUberPacket(Player player, VrPlayerState vrPlayerState, float worldScale, float heightScale) { + var buffer = new FriendlyByteBuf(Unpooled.buffer()); + buffer.writeByte(CommonNetworkHelper.PacketDiscriminators.UBERPACKET.ordinal()); + buffer.writeUUID(player.getUUID()); + vrPlayerState.serialize(buffer); + buffer.writeFloat(worldScale); + buffer.writeFloat(heightScale); + return new ClientboundCustomPayloadPacket(CommonNetworkHelper.CHANNEL, buffer); + } + + public static ClientboundCustomPayloadPacket getVivecraftServerPacket(CommonNetworkHelper.PacketDiscriminators command, byte[] payload) { + FriendlyByteBuf friendlybytebuf = new FriendlyByteBuf(Unpooled.buffer()); + friendlybytebuf.writeByte(command.ordinal()); + friendlybytebuf.writeBytes(payload); + return new ClientboundCustomPayloadPacket(CommonNetworkHelper.CHANNEL, friendlybytebuf); + } + + public static ClientboundCustomPayloadPacket getClimbeyServerPacket() { + FriendlyByteBuf friendlybytebuf = new FriendlyByteBuf(Unpooled.buffer()); + friendlybytebuf.writeByte(CommonNetworkHelper.PacketDiscriminators.CLIMBING.ordinal()); + friendlybytebuf.writeBoolean(true); + if (!"DISABLED".equals(ServerConfig.climbeyBlockmode.get())) { + if ("WHITELIST".equals(ServerConfig.climbeyBlockmode.get())) { + friendlybytebuf.writeByte(1); + } else { + friendlybytebuf.writeByte(2); + } + for (String block : ServerConfig.climbeyBlocklist.get()) { + friendlybytebuf.writeUtf(block); + } + } else { + // no block list + friendlybytebuf.writeByte(0); + } + return new ClientboundCustomPayloadPacket(CommonNetworkHelper.CHANNEL, friendlybytebuf); + } + + public static ClientboundCustomPayloadPacket getVivecraftServerPacket(CommonNetworkHelper.PacketDiscriminators command, String payload) { + FriendlyByteBuf friendlybytebuf = new FriendlyByteBuf(Unpooled.buffer()); + friendlybytebuf.writeByte(command.ordinal()); + friendlybytebuf.writeUtf(payload); + return new ClientboundCustomPayloadPacket(CommonNetworkHelper.CHANNEL, friendlybytebuf); + } + + public static void sendVrPlayerStateToClients(ServerPlayer vrPlayerEntity) { + var playersWithVivecraft = ServerVRPlayers.getPlayersWithVivecraft(vrPlayerEntity.server); + var vivePlayer = playersWithVivecraft.get(vrPlayerEntity.getUUID()); + if (vivePlayer == null) { + return; + } + if (vivePlayer.player == null || vivePlayer.player.hasDisconnected()) { + playersWithVivecraft.remove(vrPlayerEntity.getUUID()); + } + if (!vivePlayer.isVR() || vivePlayer.vrPlayerState == null) { + return; + } + for (var trackingPlayer : getTrackingPlayers(vrPlayerEntity)) { + if (!playersWithVivecraft.containsKey(trackingPlayer.getPlayer().getUUID()) || trackingPlayer.getPlayer() == vrPlayerEntity) { + continue; + } + trackingPlayer.send(createUberPacket(vivePlayer.player, vivePlayer.vrPlayerState, vivePlayer.worldScale, vivePlayer.heightScale)); + } + } +} diff --git a/common/src/main/java/org/vivecraft/server/ServerUtil.java b/common/src/main/java/org/vivecraft/server/ServerUtil.java new file mode 100644 index 000000000..3edf74927 --- /dev/null +++ b/common/src/main/java/org/vivecraft/server/ServerUtil.java @@ -0,0 +1,208 @@ +package org.vivecraft.server; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.arguments.*; +import net.minecraft.Util; +import net.minecraft.commands.Commands; +import net.minecraft.core.Registry; +import net.minecraft.network.chat.ChatType; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.server.level.ServerPlayer; +import org.vivecraft.client.utils.UpdateChecker; +import org.vivecraft.server.config.ConfigBuilder; +import org.vivecraft.server.config.ServerConfig; + +import java.util.List; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +public class ServerUtil { + + public static final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); + + static { + Runtime.getRuntime().addShutdownHook(new Thread(scheduler::shutdownNow)); + } + + public static void scheduleWelcomeMessageOrKick(ServerPlayer serverPlayer) { + if (ServerConfig.messagesEnabled.get() || + (ServerConfig.vive_only.get() || ServerConfig.vr_only.get())) { + scheduler.schedule(() -> { + // only do stuff, if the player is still on the server + if(!serverPlayer.hasDisconnected()) { + ServerVivePlayer vivePlayer = ServerVRPlayers.getVivePlayer(serverPlayer); + String message = ""; + + boolean isOpAndAllowed = ServerConfig.allow_op.get() && serverPlayer.server.getPlayerList().isOp(serverPlayer.getGameProfile()); + + // kick non VR players + if (!isOpAndAllowed && ServerConfig.vr_only.get() + && (vivePlayer == null || !vivePlayer.isVR())) { + serverPlayer.connection.disconnect(new TextComponent(ServerConfig.messagesKickVROnly.get())); + return; + } + + // kick non vivecraft players + if (!isOpAndAllowed && ServerConfig.vive_only.get() + && (vivePlayer == null)) { + serverPlayer.connection.disconnect(new TextComponent(ServerConfig.messagesKickViveOnly.get())); + return; + } + + + // welcome message + if (ServerConfig.messagesEnabled.get()) { + // get the right message + if (vivePlayer == null) { + message = ServerConfig.messagesWelcomeVanilla.get(); + } else if (!vivePlayer.isVR()) { + message = ServerConfig.messagesWelcomeNonVR.get(); + } else if (vivePlayer.isSeated()) { + message = ServerConfig.messagesWelcomeSeated.get(); + } else { + message = ServerConfig.messagesWelcomeVR.get(); + } + // actually send the message, if there is one set + if (!message.isEmpty()) { + serverPlayer.server.getPlayerList().broadcastMessage(new TextComponent(message.formatted(serverPlayer.getName().getString())), ChatType.SYSTEM, Util.NIL_UUID); + } + } + } + }, (long)(ServerConfig.messageKickDelay.get() * 1000), TimeUnit.MILLISECONDS); + } + } + + public static void sendUpdateNotificationIfOP (ServerPlayer serverPlayer) { + if (ServerConfig.checkForUpdate.get()) { + // don't send update notifications on singleplayer + if (serverPlayer.server.isDedicatedServer() && serverPlayer.server.getPlayerList().isOp(serverPlayer.getGameProfile())) { + // check for update on not the main thread + scheduler.schedule(() -> { + if (UpdateChecker.checkForUpdates()) { + serverPlayer.sendMessage(new TextComponent("Vivecraft update available: §a" + UpdateChecker.newestVersion), Util.NIL_UUID); + } + }, 0, TimeUnit.MILLISECONDS); + } + } + } + public static void registerCommands(CommandDispatcher dispatcher) { + dispatcher.register(Commands.literal("vivecraft-server-config") + .requires(source -> source.hasPermission(4)).then( + Commands.literal("reload").executes(context -> { + ServerConfig.init((action, path, incorrectValue, correctedValue) -> context.getSource() + .sendSuccess(new TextComponent("Corrected §a[" + String.join("§r.§a", path) + "]§r: was '(" + incorrectValue.getClass().getSimpleName() + ")" + incorrectValue + "', is now '(" + correctedValue.getClass().getSimpleName() + ")" + correctedValue + "'"), true)); + return 1; + }) + ) + ); + + for (var setting : ServerConfig.getConfigValues()) { + Class clazz = setting.get().getClass(); + final ArgumentType argument; + String argumentName; + if (clazz == Integer.class) { + argumentName = "int"; + argument = IntegerArgumentType.integer(); + } else if (clazz == Double.class) { + argumentName = "double"; + argument = DoubleArgumentType.doubleArg(); + } else if (clazz == Boolean.class) { + argumentName = "bool"; + argument = BoolArgumentType.bool(); + } else { + argumentName = "string"; + argument = StringArgumentType.string(); + } + + if (!(setting.get()instanceof List)) { + dispatcher.register(Commands.literal("vivecraft-server-config") + .requires(source -> source.hasPermission(4)).then( + Commands.literal(setting.getPath()).then( + Commands.literal("set").then( + Commands.argument(argumentName, argument) + .executes(context -> { + try { + Object newValue = context.getArgument(argumentName, clazz); + setting.set(newValue); + context.getSource().sendSuccess(new TextComponent("set §a[" + setting.getPath() + "]§r to '" + newValue + "'"), true); + } catch (Exception e) { + e.printStackTrace(); + } + return 1; + }) + ) + ) + )); + } else { + ConfigBuilder.ConfigValue> listConfig = setting; + dispatcher.register(Commands.literal("vivecraft-server-config") + .requires(source -> source.hasPermission(4)).then( + Commands.literal(setting.getPath()).then( + Commands.literal("add").then( + Commands.argument("block", StringArgumentType.greedyString()) + .suggests((context, builder) -> { + for (var block : Registry.BLOCK.keySet()) { + builder.suggest(block.toString()); + } + return builder.buildFuture(); + }) + .executes(context -> { + String newValue = context.getArgument("block", String.class); + List list = listConfig.get(); + list.add(newValue); + listConfig.set(list); + context.getSource().sendSuccess(new TextComponent("added '" + newValue + "' to §a[" + setting.getPath() + "]§r"), true); + context.getSource().sendSuccess(new TextComponent("is now '" + setting.get()), true); + return 1; + }) + ) + ) + )); + dispatcher.register(Commands.literal("vivecraft-server-config") + .requires(source -> source.hasPermission(4)).then( + Commands.literal(setting.getPath()).then( + Commands.literal("remove").then( + Commands.argument("block", StringArgumentType.greedyString()) + .suggests((context, builder) -> { + for (String block : listConfig.get()) { + builder.suggest(block); + } + return builder.buildFuture(); + }) + .executes(context -> { + String newValue = context.getArgument("block", String.class); + List list = listConfig.get(); + list.remove(newValue); + listConfig.set(list); + context.getSource().sendSuccess(new TextComponent("removed '" + newValue + "' from §a[" + setting.getPath() + "]§r"), true); + context.getSource().sendSuccess(new TextComponent("is now '" + setting.get()), true); + return 1; + }) + ) + ) + )); + } + dispatcher.register(Commands.literal("vivecraft-server-config") + .requires(source -> source.hasPermission(4)).then( + Commands.literal(setting.getPath()).then( + Commands.literal("reset") + .executes(context -> { + Object newValue = setting.reset(); + context.getSource().sendSuccess(new TextComponent("reset §a[" + setting.getPath() + "]§r to '" + newValue + "'"), true); + return 1; + }) + ) + )); + dispatcher.register(Commands.literal("vivecraft-server-config") + .requires(source -> source.hasPermission(4)).then( + Commands.literal(setting.getPath()) + .executes(context -> { + context.getSource().sendSuccess(new TextComponent("§a[" + setting.getPath() + "]§r is set to '" + setting.get() + "'"), true); + return 1; + }) + )); + } + } + +} diff --git a/common/src/main/java/org/vivecraft/server/ServerVRPlayers.java b/common/src/main/java/org/vivecraft/server/ServerVRPlayers.java new file mode 100644 index 000000000..b2c6fae8c --- /dev/null +++ b/common/src/main/java/org/vivecraft/server/ServerVRPlayers.java @@ -0,0 +1,37 @@ +package org.vivecraft.server; + +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.Pose; + +import java.util.Map; +import java.util.UUID; + +public class ServerVRPlayers { + public static ServerVivePlayer getVivePlayer(ServerPlayer player) { + return getPlayersWithVivecraft(player.server).get(player.getUUID()); + } + + public static boolean isVRPlayer(ServerPlayer player) { + if (player == null) { + return false; + } + ServerVivePlayer serverviveplayer = getVivePlayer(player); + if (serverviveplayer == null) { + return false; + } + return serverviveplayer.isVR(); + } + + public static void overridePose(ServerPlayer player) { + ServerVivePlayer serverviveplayer = getVivePlayer(player); + + if (serverviveplayer != null && serverviveplayer.isVR() && serverviveplayer.crawling) { + player.setPose(Pose.SWIMMING); + } + } + + public static Map getPlayersWithVivecraft(MinecraftServer server) { + return ((MinecraftServerExt) server).getPlayersWithVivecraft(); + } +} diff --git a/common/src/main/java/org/vivecraft/server/ServerVivePlayer.java b/common/src/main/java/org/vivecraft/server/ServerVivePlayer.java new file mode 100644 index 000000000..75bbda55b --- /dev/null +++ b/common/src/main/java/org/vivecraft/server/ServerVivePlayer.java @@ -0,0 +1,107 @@ +package org.vivecraft.server; + +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.Vec3; +import org.vivecraft.common.network.CommonNetworkHelper; +import org.vivecraft.common.network.VrPlayerState; +import org.vivecraft.common.utils.math.Vector3; + +import javax.annotation.Nullable; + +public class ServerVivePlayer { + @Nullable + public VrPlayerState vrPlayerState; + public float draw; + public float worldScale = 1.0F; + public float heightScale = 1.0F; + public byte activeHand = 0; + public boolean crawling; + private boolean isVR = false; + public Vec3 offset = new Vec3(0.0D, 0.0D, 0.0D); + public ServerPlayer player; + final Vector3 forward = new Vector3(0.0F, 0.0F, -1.0F); + + public int networkVersion = CommonNetworkHelper.MAX_SUPPORTED_NETWORK_VERSION; + + public ServerVivePlayer(ServerPlayer player) { + this.player = player; + } + + public float getDraw() { + return this.draw; + } + + public Vec3 getControllerVectorCustom(int controller, Vector3 direction) { + if (this.isSeated()) { + controller = 0; + } + + var controllerPose = controller == 0 ? this.vrPlayerState.controller0() : this.vrPlayerState.controller1(); + + if (controllerPose != null) { + Vector3 vector3 = controllerPose.orientation().multiply(direction); + return new Vec3(vector3.getX(), vector3.getY(), vector3.getZ()); + } else { + return this.player.getLookAngle(); + } + } + + public Vec3 getControllerDir(int controller) { + return this.getControllerVectorCustom(controller, this.forward); + } + + public Vec3 getHMDDir() { + if (this.vrPlayerState != null) { + Vector3 vector3 = this.vrPlayerState.hmd().orientation().multiply(this.forward); + return new Vec3(vector3.getX(), vector3.getY(), vector3.getZ()); + } + return this.player.getLookAngle(); + } + + public Vec3 getHMDPos(Player player) { + if (this.vrPlayerState != null) { + return this.vrPlayerState.hmd().position().add(player.position()).add(this.offset); + } + return player.position().add(0.0D, 1.62D, 0.0D); + } + + public Vec3 getControllerPos(int c, Player player, boolean realPosition) { + if (this.vrPlayerState != null) { + + // TODO: What the fuck is this nonsense? + if (this.isSeated() && !realPosition) { + Vec3 vec3 = this.getHMDDir(); + vec3 = vec3.yRot((float) Math.toRadians(c == 0 ? -35.0D : 35.0D)); + vec3 = new Vec3(vec3.x, 0.0D, vec3.z); + vec3 = vec3.normalize(); + return this.getHMDPos(player).add(vec3.x * 0.3D * (double) this.worldScale, -0.4D * (double) this.worldScale, vec3.z * 0.3D * (double) this.worldScale); + } + + var controllerState = c == 0 ? this.vrPlayerState.controller0() : this.vrPlayerState.controller1(); + + return controllerState.position().add(player.position()).add(this.offset); + } + + return player.position().add(0.0D, 1.62D, 0.0D); + } + + public Vec3 getControllerPos(int c, Player player) { + return getControllerPos(c, player, false); + } + + public boolean isVR() { + return this.isVR; + } + + public void setVR(boolean vr) { + this.isVR = vr; + } + + public boolean isSeated() { + if (this.vrPlayerState == null) { + return false; + } + return this.vrPlayerState.seated(); + } +} diff --git a/common/src/main/java/org/vivecraft/server/config/BooleanValue.java b/common/src/main/java/org/vivecraft/server/config/BooleanValue.java deleted file mode 100644 index e0ee1f604..000000000 --- a/common/src/main/java/org/vivecraft/server/config/BooleanValue.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.vivecraft.server.config; - -public class BooleanValue extends ConfigValue{ - - public BooleanValue(String key, Boolean defaultValue) { - super(key, defaultValue); - } - - @Override - public Boolean get() { - boolean value = Boolean.parseBoolean(ServerConfig.properties.getProperty(this.key, String.valueOf(this.defaultValue))); - ServerConfig.properties.setProperty(this.key, String.valueOf(value)); - return value; - } - -} diff --git a/common/src/main/java/org/vivecraft/server/config/ConfigBuilder.java b/common/src/main/java/org/vivecraft/server/config/ConfigBuilder.java new file mode 100644 index 000000000..8599e0121 --- /dev/null +++ b/common/src/main/java/org/vivecraft/server/config/ConfigBuilder.java @@ -0,0 +1,256 @@ +package org.vivecraft.server.config; + +import com.electronwill.nightconfig.core.CommentedConfig; +import com.electronwill.nightconfig.core.Config; +import com.electronwill.nightconfig.core.ConfigSpec; + +import java.util.*; +import java.util.function.Predicate; + +public class ConfigBuilder { + + private final CommentedConfig config; + private final ConfigSpec spec; + private final Deque stack = new ArrayDeque<>(); + private final List configValues = new ArrayList<>(); + + public ConfigBuilder(CommentedConfig config, ConfigSpec spec){ + this.config = config; + this.spec = spec; + } + + /** + * pushes the given subPath to the path + * @param subPath new sub path + * @return this builder, for chaining commands + */ + public ConfigBuilder push(String subPath) { + stack.add(subPath); + return this; + } + + /** + * pops the last sub path + * @return this builder, for chaining commands + */ + public ConfigBuilder pop() { + stack.removeLast(); + return this; + } + + /** + * add a comment to the config + * @param comment Text for the comment + * @return this builder, for chaining commands + */ + public ConfigBuilder comment(String comment) { + config.setComment(stack.stream().toList(), comment); + return this; + } + + private void addDefaultValueComment(List path, int defaultValue, int min, int max) { + String oldComment = config.getComment(path); + config.setComment(path, (oldComment == null ? "" : oldComment + "\n ") + +"default: %d, min: %d, max: %d".formatted(defaultValue, min, max)); + } + + private void addDefaultValueComment(List path, double defaultValue, double min, double max) { + String oldComment = config.getComment(path); + config.setComment(path, (oldComment == null ? "" : oldComment + "\n ") + + new Formatter(Locale.US).format("default: %.2f, min: %.2f, max: %.2f", defaultValue, min, max)); + } + + /** + * corrects the attached config, with the built spec + * @param listener listener to send correction to + */ + public void correct(ConfigSpec.CorrectionListener listener) { + spec.correct(config, listener); + } + + public List getConfigValues() { + return configValues; + } + + // general Settings + /** + * defines a setting with the current path, and pops the last path segment + * @param defaultValue default value this setting should have + * @return ConfigValue that accesses the setting at the path when calling this method + */ + public ConfigValue define(T defaultValue) { + List path = stack.stream().toList(); + spec.define(path, defaultValue); + stack.removeLast(); + + ConfigValue value = new ConfigValue<>(config, path, defaultValue); + configValues.add(value); + return value; + } + + /** + * defines a setting with the current path, and pops the last path segment + * @param defaultValue default value this setting should have + * @param min the minimum value, that is valid for this setting + * @param max the maximum value, that is valid for this setting + * @return ConfigValue that accesses the setting at the path when calling this method + */ + public > ConfigValue defineInRange(T defaultValue, T min, T max) { + List path = stack.stream().toList(); + spec.defineInRange(path, defaultValue, min, max); + stack.removeLast(); + + ConfigValue value = new ConfigValue<>(config, path, defaultValue); + configValues.add(value); + return value; + } + + /** + * defines a setting with the current path, and pops the last path segment + * @param defaultValue default value this setting should have + * @param validator Predicate, that signals, what values are accepted + * @return ConfigValue that accesses the setting at the path when calling this method + */ + public ConfigValue> defineList(List defaultValue, Predicate validator) { + List path = stack.stream().toList(); + spec.defineList(path, defaultValue, validator); + stack.removeLast(); + + ConfigValue> value = new ConfigValue<>(config, path, defaultValue); + configValues.add(value); + return value; + } + + /** + * defines a setting with the current path, and pops the last path segment + * @param defaultValue default value this setting should have + * @param validValues Collection of values that are accepted + * @return ConfigValue that accesses the setting at the path when calling this method + */ + public ConfigValue defineInList(T defaultValue, Collection validValues) { + List path = stack.stream().toList(); + spec.defineInList(path, defaultValue, validValues); + stack.removeLast(); + + ConfigValue value = new ConfigValue<>(config, path, defaultValue); + configValues.add(value); + return value; + } + + /** + * same as {@link #define define(T defaultValue)} but returns a {@link BooleanValue} + */ + public BooleanValue define(boolean defaultValue) { + List path = stack.stream().toList(); + spec.define(path, defaultValue); + stack.removeLast(); + + BooleanValue value = new BooleanValue(config, path, defaultValue); + configValues.add(value); + return value; + } + + /** + * same as {@link #define define(T defaultValue)} but returns a {@link StringValue} + */ + public StringValue define(String defaultValue) { + List path = stack.stream().toList(); + spec.define(path, defaultValue); + stack.removeLast(); + + StringValue value = new StringValue(config, path, defaultValue); + configValues.add(value); + return value; + } + + /** + * same as {@link #defineInRange defineInRange(T defaultValue, T min, T max)} but returns a {@link DoubleValue} + */ + public DoubleValue defineInRange(double defaultValue, double min, double max) { + List path = stack.stream().toList(); + spec.defineInRange(path, defaultValue, min, max); + stack.removeLast(); + addDefaultValueComment(path, defaultValue, min, max); + + DoubleValue value = new DoubleValue(config, path, defaultValue); + configValues.add(value); + return value; + } + + /** + * same as {@link #defineInRange defineInRange(T defaultValue, T min, T max)} but returns a {@link DoubleValue} + */ + public IntValue defineInRange(int defaultValue, int min, int max) { + List path = stack.stream().toList(); + spec.defineInRange(path, defaultValue, min, max); + stack.removeLast(); + addDefaultValueComment(path, defaultValue, min, max); + + IntValue value = new IntValue(config, path, defaultValue); + configValues.add(value); + return value; + } + + + public static class ConfigValue { + + // the config, this setting is part of + private final Config config; + private final List path; + private final T defaultValue; + // cache te value to minimize config lookups + private T cachedValue = null; + + public ConfigValue(Config config, List path, T defaultValue) { + this.config = config; + this.path = path; + this.defaultValue = defaultValue; + } + + public T get() { + if (cachedValue == null) { + cachedValue = config.get(path); + } + return cachedValue; + } + + public void set(T newValue) { + cachedValue = newValue; + config.set(path, newValue); + } + + public T reset() { + config.set(path, defaultValue); + cachedValue = defaultValue; + return defaultValue; + } + + public String getPath() { + return String.join(".", path); + } + } + + public static class BooleanValue extends ConfigValue{ + public BooleanValue(Config config, List path, boolean defaultValue) { + super(config, path, defaultValue); + } + } + + public static class StringValue extends ConfigValue{ + public StringValue(Config config, List path, String defaultValue) { + super(config, path, defaultValue); + } + } + + public static class IntValue extends ConfigValue{ + public IntValue(Config config, List path, int defaultValue) { + super(config, path, defaultValue); + } + } + + public static class DoubleValue extends ConfigValue{ + public DoubleValue(Config config, List path, double defaultValue) { + super(config, path, defaultValue); + } + } +} diff --git a/common/src/main/java/org/vivecraft/server/config/ConfigValue.java b/common/src/main/java/org/vivecraft/server/config/ConfigValue.java deleted file mode 100644 index e2c002fec..000000000 --- a/common/src/main/java/org/vivecraft/server/config/ConfigValue.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.vivecraft.server.config; - -public abstract class ConfigValue { - - protected final String key; - protected final T defaultValue; - - public ConfigValue(String key, T defaultValue) { - this.key = key; - this.defaultValue = defaultValue; - } - - abstract public T get(); - - public void set(T value) { - ServerConfig.properties.setProperty(this.key, String.valueOf(value)); - } -} diff --git a/common/src/main/java/org/vivecraft/server/config/DoubleValue.java b/common/src/main/java/org/vivecraft/server/config/DoubleValue.java deleted file mode 100644 index 3db869743..000000000 --- a/common/src/main/java/org/vivecraft/server/config/DoubleValue.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.vivecraft.server.config; - -public class DoubleValue extends ConfigValue{ - - public DoubleValue(String key, Double defaultValue) { - super(key, defaultValue); - } - - @Override - public Double get() { - Double value = Double.parseDouble(ServerConfig.properties.getProperty(this.key, String.valueOf(this.defaultValue))); - ServerConfig.properties.setProperty(this.key, String.valueOf(value)); - return value; - } - -} diff --git a/common/src/main/java/org/vivecraft/server/config/IntValue.java b/common/src/main/java/org/vivecraft/server/config/IntValue.java deleted file mode 100644 index 8164a5170..000000000 --- a/common/src/main/java/org/vivecraft/server/config/IntValue.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.vivecraft.server.config; - -public class IntValue extends ConfigValue{ - - public IntValue(String key, Integer defaultValue) { - super(key, defaultValue); - } - - @Override - public Integer get() { - Integer value = Integer.parseInt(ServerConfig.properties.getProperty(this.key, String.valueOf(this.defaultValue))); - ServerConfig.properties.setProperty(this.key, String.valueOf(value)); - return value; - } -} diff --git a/common/src/main/java/org/vivecraft/server/config/ServerConfig.java b/common/src/main/java/org/vivecraft/server/config/ServerConfig.java index cd6483934..063e67e42 100644 --- a/common/src/main/java/org/vivecraft/server/config/ServerConfig.java +++ b/common/src/main/java/org/vivecraft/server/config/ServerConfig.java @@ -1,84 +1,315 @@ package org.vivecraft.server.config; -import net.minecraft.server.MinecraftServer; -import net.minecraft.world.level.storage.LevelResource; +import com.electronwill.nightconfig.core.CommentedConfig; +import com.electronwill.nightconfig.core.Config; +import com.electronwill.nightconfig.core.ConfigSpec; +import com.electronwill.nightconfig.core.file.CommentedFileConfig; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import org.vivecraft.client.Xplat; +import org.vivecraft.server.config.ConfigBuilder; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Arrays; -import java.util.List; -import java.util.Properties; +import java.util.*; -//Not used. Possible VFE integration, but not planned for now public class ServerConfig { - public static BooleanValue vrOnly = new BooleanValue("vrOnly", false); - public static DoubleValue vrOnlyKickDelay = new DoubleValue("vrOnlyKickDelay", 20D); - public static BooleanValue printMoney = new BooleanValue("printMoney", false); - public static StringValue vrOnlyKickMessage = new StringValue("vrOnlyKickMessage", ""); - public static BooleanValue enableJoinMessages = new BooleanValue("enableJoinMessages", true); - public static StringValue joinMessageVR = new StringValue("joinMessageVR", ""); - public static StringValue joinMessageNonVR = new StringValue("joinMessageNonVR", ""); - public static DoubleValue creeperSwellDistance = new DoubleValue("creeperSwellDistance", 2D); - public static BooleanValue vrVsVR = new BooleanValue("vrVsVR", true); - public static BooleanValue vrVsSeatedVR = new BooleanValue("vrVsSeatedVR", true); - public static BooleanValue vrVsNonVR = new BooleanValue("vrVsNonVR", true); - public static BooleanValue seatedVrVsSeatedVR = new BooleanValue("seatedVrVsSeatedVR", true); - public static BooleanValue seatedVrVsNonVR = new BooleanValue("seatedVrVsNonVR",true); - public static DoubleValue bowStandingMul = new DoubleValue("bowStandingMul", 2D); - public static DoubleValue bowSeatedMul = new DoubleValue("bowSeatedMul", 1D); - public static DoubleValue bowStandingHeadshotMul = new DoubleValue("bowStandingHeadshotMul", 3D); - public static DoubleValue bowSeatedHeadshotMul = new DoubleValue("bowSeatedHeadshotMul", 2D); - public static BooleanValue climbeyEnabled = new BooleanValue("climbeyEnabled", false); - public static StringValue blockListMode = new StringValue("blockListMode", ""); - public static List blockList; - public static BooleanValue crawlingEnabled = new BooleanValue("crawlingEnabled", false); - public static BooleanValue teleportEnabled = new BooleanValue("teleportEnabled", false); - public static BooleanValue teleportLimited = new BooleanValue("teleportLimited", true); - public static IntValue teleportLimitUp = new IntValue("teleportLimitUp", 5); - public static IntValue teleportLimitDown = new IntValue("teleportLimitDown", 10); - public static IntValue teleportLimitHoriz = new IntValue("teleportLimitHoriz", 7); - public static BooleanValue worldScaleLimited = new BooleanValue("worldScaleLimited", false); - public static DoubleValue worldScaleMin = new DoubleValue("worldScaleMin", 5D); - public static DoubleValue worldScaleMax = new DoubleValue("worldScaleMax", 5D); - - static Properties properties; - - public static void loadConfig(MinecraftServer server) { - properties = new Properties(); - try { - Path file = server.getWorldPath(LevelResource.ROOT).resolve("serverconfigs").resolve("vivecraft-serverconfig.properties"); - if (!Files.exists(file)) { - Files.createFile(file); - } - properties.load(Files.newInputStream(file)); - } catch (IOException e) { - throw new RuntimeException(e); - } + // config keys + public static ConfigBuilder.BooleanValue debug; + public static ConfigBuilder.BooleanValue checkForUpdate; + public static ConfigBuilder.BooleanValue vr_only; + public static ConfigBuilder.BooleanValue vive_only; + public static ConfigBuilder.BooleanValue allow_op; + public static ConfigBuilder.DoubleValue messageKickDelay; + public static ConfigBuilder.BooleanValue vrFun; - } + public static ConfigBuilder.BooleanValue messagesEnabled; + public static ConfigBuilder.StringValue messagesWelcomeVR; + public static ConfigBuilder.StringValue messagesWelcomeNonVR; + public static ConfigBuilder.StringValue messagesWelcomeSeated; + public static ConfigBuilder.StringValue messagesWelcomeVanilla; + public static ConfigBuilder.StringValue messagesLeaveMessage; + public static ConfigBuilder.StringValue messagesKickViveOnly; + public static ConfigBuilder.StringValue messagesKickVROnly; - private static List getList(String blockList, List objects) { - String[] array = properties.getProperty(blockList, "").replace(" ", "").split(","); - return Arrays.asList(array); - } + public static ConfigBuilder.DoubleValue creeperSwellDistance; + public static ConfigBuilder.DoubleValue bowStandingMultiplier; + public static ConfigBuilder.DoubleValue bowSeatedMultiplier; + public static ConfigBuilder.DoubleValue bowStandingHeadshotMultiplier; + public static ConfigBuilder.DoubleValue bowSeatedHeadshotMultiplier; + public static ConfigBuilder.DoubleValue bowVanillaHeadshotMultiplier; - static boolean getBoolean(String value, Boolean defaultValue) { - return Boolean.parseBoolean(properties.getProperty(value, String.valueOf(defaultValue))); - } + public static ConfigBuilder.BooleanValue pvpVRvsVR; + public static ConfigBuilder.BooleanValue pvpSEATEDVRvsSEATEDVR; + public static ConfigBuilder.BooleanValue pvpVRvsNONVR; + public static ConfigBuilder.BooleanValue pvpSEATEDVRvsNONVR; + public static ConfigBuilder.BooleanValue pvpVRvsSEATEDVR; + + public static ConfigBuilder.BooleanValue climbeyEnabled; + public static ConfigBuilder.ConfigValue climbeyBlockmode; + public static ConfigBuilder.ConfigValue> climbeyBlocklist; + + public static ConfigBuilder.BooleanValue crawlingEnabled; + + public static ConfigBuilder.BooleanValue teleportEnabled; + public static ConfigBuilder.BooleanValue teleportLimitedSurvival; + public static ConfigBuilder.IntValue teleportUpLimit; + public static ConfigBuilder.IntValue teleportDownLimit; + public static ConfigBuilder.IntValue teleportHorizontalLimit; - static double getDouble(String value, double defaultValue) { - return Double.parseDouble(properties.getProperty(value, String.valueOf(defaultValue))); + public static ConfigBuilder.BooleanValue worldscaleLimited; + public static ConfigBuilder.DoubleValue worldscaleMax; + public static ConfigBuilder.DoubleValue worldscaleMin; + + public static ConfigBuilder.BooleanValue vrSwitchingEnabled; + + private static CommentedFileConfig config; + private static ConfigBuilder builder; + public static List getConfigValues(){ + return builder.getConfigValues(); } - static int getInt(String value, int defaultValue) { - return Integer.parseInt(properties.getProperty(value, String.valueOf(defaultValue))); + public static void init(ConfigSpec.CorrectionListener listener){ + Config.setInsertionOrderPreserved(true); + config = CommentedFileConfig + .builder(Xplat.getConfigPath("vivecraft-server-config.toml")) + .autosave() + .sync() + .concurrent() + .build(); + + config.load(); + + if (listener == null) { + listener = (action, path, incorrectValue, correctedValue) -> { + if (incorrectValue != null) { + System.out.println("Corrected " + String.join(".", path) + ": was " + incorrectValue + ", is now " + correctedValue); + } + }; + } + + fixConfig(config, listener); + + config.save(); } - static String getString(String value, String defaultValue) { - return properties.getProperty(value, String.valueOf(defaultValue)); + private static void fixConfig(CommentedConfig config, ConfigSpec.CorrectionListener listener) { + + builder = new ConfigBuilder(config, new ConfigSpec()); + + builder + .push("general"); + debug = builder + .push("debug") + .comment("will print clients that connect with vivecraft, and what version they are using, to the log.") + .define(false); + checkForUpdate = builder + .push("checkForUpdate") + .comment("will check for a newer version and alert any OP when they login to the server.") + .define(true); + vr_only = builder + .push("vr_only") + .comment("Set to true to only allow VR players to play.\n If enabled, VR hotswitching will be automatically disabled.") + .define(false); + vive_only = builder + .push("vive_only") + .comment("Set to true to only allow vivecraft players to play.") + .define(false); + allow_op = builder + .push("allow_op") + .comment("If true, will allow server ops to be in any mode. No effect if vive-only/vr-only is false.") + .define(true); + messageKickDelay = builder + .push("messageAndKickDelay") + .comment("Seconds to wait before kicking a player or sending welcome messages. The player's client must send a Vivecraft VERSION info in that time.") + .defineInRange(10.0, 0.0, 100.0); + vrFun = builder + .push("vrFun") + .comment("Gives VR Players fun cakes and drinks at random, when they respawn.") + .define(true); + // end general + builder.pop(); + + builder + .push("messages"); + messagesEnabled = builder + .push("enabled") + .comment("Enable or disable all messages.") + .define(false); + messagesWelcomeVR = builder + .push("welcomeVR") + .comment("set message to nothing to not send. ex: leaveMessage = \"\"") + .define("%s has joined with standing VR!"); + messagesWelcomeNonVR = builder + .push("welcomeNonVR") + .define("%s has joined with Non-VR companion!"); + messagesWelcomeSeated = builder + .push("welcomeSeated") + .define("%s has joined with seated VR!"); + messagesWelcomeVanilla = builder + .push("welcomeVanilla") + .define("%s has joined as a Muggle!"); + messagesLeaveMessage = builder + .push("leaveMessage") + .define("%s has disconnected from the server!"); + messagesKickViveOnly = builder + .push("KickViveOnly") + .comment("The message to show kicked non vivecraft players.") + .define("This server is configured for Vivecraft players only."); + messagesKickVROnly = builder + .push("KickVROnly") + .comment("The message to show kicked non VR players.") + .define("This server is configured for VR players only."); + // end messages + builder.pop(); + + builder + .push("vrChanges") + .comment("Vanilla modifications for VR players"); + creeperSwellDistance = builder + .push("creeperSwellDistance") + .comment("Distance at which creepers swell and explode for VR players. Vanilla: 3") + .defineInRange(1.75, 0.1, 10.0); + + builder + .push("bow") + .comment("Bow damage adjustments"); + bowStandingMultiplier = builder + .push("standingMultiplier") + .comment("Archery damage multiplier for Vivecraft (standing) users. Set to 1.0 to disable") + .defineInRange(2.0, 1.0, 10.0); + bowSeatedMultiplier = builder + .push("seatedMultiplier") + .comment("Archery damage multiplier for Vivecraft (seated) users. Set to 1.0 to disable") + .defineInRange(1.0, 1.0, 10.0); + bowStandingHeadshotMultiplier = builder + .push("standingHeadshotMultiplier") + .comment("Headshot damage multiplier for Vivecraft (standing) users. Set to 1.0 to disable") + .defineInRange(3.0, 1.0, 10.0); + bowSeatedHeadshotMultiplier = builder + .push("seatedHeadshotMultiplier") + .comment("Headshot damage multiplier for Vivecraft (seated) users. Set to 1.0 to disable") + .defineInRange(2.0, 1.0, 10.0); + bowVanillaHeadshotMultiplier = builder + .push("vanillaHeadshotMultiplier") + .comment("Headshot damage multiplier for Vanilla/NonVR users. Set to 1.0 to disable") + .defineInRange(1.0, 1.0, 10.0); + // end bow + builder.pop(); + // end vrChanges + builder.pop(); + + builder + .push("pvp") + .comment("VR vs. non-VR vs. seated player PVP settings"); + pvpVRvsVR = builder + .push("VRvsVR") + .comment("Allows Standing VR players to damage each other.") + .define(true); + pvpSEATEDVRvsSEATEDVR = builder + .push("SEATEDVRvsSEATEDVR") + .comment("Allows Seated VR players to damage each other.") + .define(true); + pvpVRvsNONVR = builder + .push("VRvsNONVR") + .comment("Allows Standing VR players and Non VR players to damage each other.") + .define(true); + pvpSEATEDVRvsNONVR = builder + .push("SEATEDVRvsNONVR") + .comment("Allows Seated VR players and Non VR players to damage each other.") + .define(true); + pvpVRvsSEATEDVR = builder + .push("VRvsSEATEDVR") + .comment("Allows Standing VR players and Seated VR Players to damage each other.") + .define(true); + // end pvp + builder.pop(); + + builder + .push("climbey") + .comment("Climbey motion settings"); + climbeyEnabled = builder + .push("enabled") + .comment("Allows use of jump_boots and climb_claws.") + .define(true); + climbeyBlockmode = builder + .push("blockmode") + .comment("Sets which blocks are climb-able. Options are:\n \"DISABLED\" = List ignored. All blocks are climbable.\n \"WHITELIST\" = Only blocks on the list are climbable.\n \"BLACKLIST\" = All blocks are climbable except those on the list") + .defineInList("DISABLED", Arrays.asList("DISABLED", "WHITELIST", "BLACKLIST")); + climbeyBlocklist = builder + .push("blocklist") + .comment("The list of block names for use with include/exclude block mode.") + .defineList(Arrays.asList("white_wool","dirt","grass_block"), (s) -> s instanceof String && Registry.BLOCK.containsKey(new ResourceLocation((String) s))); + // end climbey + builder.pop(); + + builder + .push("crawling") + .comment("Roomscale crawling settings"); + crawlingEnabled = builder. + push("enabled") + .comment("Allows use of roomscale crawling. Disabling does not prevent vanilla crawling.") + .define(true); + // end crawling + builder.pop(); + + builder + .push("teleport") + .comment("Teleport settings"); + teleportEnabled = builder + .push("enabled") + .comment("Whether direct teleport is enabled. It is recommended to leave this enabled for players prone to VR sickness.") + .define(true); + teleportLimitedSurvival = builder + .push("limitedSurvival") + .comment("Enforce limited teleport range and frequency in survival.") + .define(false); + teleportUpLimit = builder + .push("upLimit") + .comment("Maximum blocks players can teleport up. Set to 0 to disable.") + .defineInRange(4, 1, 16); + teleportDownLimit = builder + .push("downLimit") + .comment("Maximum blocks players can teleport down. Set to 0 to disable.") + .defineInRange(4, 1, 16); + teleportHorizontalLimit = builder + .push("horizontalLimit") + .comment("Maximum blocks players can teleport horizontally. Set to 0 to disable.") + .defineInRange(16, 1, 32); + // end teleport + builder.pop(); + + builder + .push("worldScale") + .comment("World scale settings"); + worldscaleLimited = builder + .push("limitRange") + .comment("Limit the range of world scale players can use") + .define(false); + worldscaleMin = builder + .push("min") + .comment("Lower limit of range") + .defineInRange(0.5, 0.1, 100.0); + worldscaleMax = builder + .push("max") + .comment("Upper limit of range") + .defineInRange(2.0, 0.1, 100.0); + // end worldScale + builder.pop(); + + builder + .push("vrSwitching") + .comment("VR hotswitch settings"); + vrSwitchingEnabled = builder + .push("enabled") + .comment("Allows players to switch between VR and NONVR on the fly.\n If disabled, they will be locked to the mode they joined with.") + .define(true); + // end vrSwitching + builder.pop(); + + // if the config is outdated, or is missing keys, re add them + builder.correct(listener); } + } diff --git a/common/src/main/java/org/vivecraft/server/config/StringValue.java b/common/src/main/java/org/vivecraft/server/config/StringValue.java deleted file mode 100644 index 70fd1c3f9..000000000 --- a/common/src/main/java/org/vivecraft/server/config/StringValue.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.vivecraft.server.config; - -public class StringValue extends ConfigValue{ - - public StringValue(String key, String defaultValue) { - super(key, defaultValue); - } - - @Override - public String get() { - String value = ServerConfig.properties.getProperty(this.key, String.valueOf(this.defaultValue)); - ServerConfig.properties.setProperty(this.key, String.valueOf(value)); - return value; - } -} diff --git a/common/src/main/java/org/vivecraft/utils/lwjgl/Quaternion.java b/common/src/main/java/org/vivecraft/utils/lwjgl/Quaternion.java deleted file mode 100644 index 2ff5bb9ca..000000000 --- a/common/src/main/java/org/vivecraft/utils/lwjgl/Quaternion.java +++ /dev/null @@ -1,312 +0,0 @@ -package org.vivecraft.utils.lwjgl; - -import java.nio.FloatBuffer; - -public class Quaternion extends Vector implements ReadableVector4f -{ - private static final long serialVersionUID = 1L; - public float x; - public float y; - public float z; - public float w; - - public Quaternion() - { - this.setIdentity(); - } - - public Quaternion(ReadableVector4f src) - { - this.set(src); - } - - public Quaternion(float x, float y, float z, float w) - { - this.set(x, y, z, w); - } - - public void set(float x, float y) - { - this.x = x; - this.y = y; - } - - public void set(float x, float y, float z) - { - this.x = x; - this.y = y; - this.z = z; - } - - public void set(float x, float y, float z, float w) - { - this.x = x; - this.y = y; - this.z = z; - this.w = w; - } - - public Quaternion set(ReadableVector4f src) - { - this.x = src.getX(); - this.y = src.getY(); - this.z = src.getZ(); - this.w = src.getW(); - return this; - } - - public Quaternion setIdentity() - { - return setIdentity(this); - } - - public static Quaternion setIdentity(Quaternion q) - { - q.x = 0.0F; - q.y = 0.0F; - q.z = 0.0F; - q.w = 1.0F; - return q; - } - - public float lengthSquared() - { - return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w; - } - - public static Quaternion normalise(Quaternion src, Quaternion dest) - { - float f = 1.0F / src.length(); - - if (dest == null) - { - dest = new Quaternion(); - } - - dest.set(src.x * f, src.y * f, src.z * f, src.w * f); - return dest; - } - - public Quaternion normalise(Quaternion dest) - { - return normalise(this, dest); - } - - public static float dot(Quaternion left, Quaternion right) - { - return left.x * right.x + left.y * right.y + left.z * right.z + left.w * right.w; - } - - public Quaternion negate(Quaternion dest) - { - return negate(this, dest); - } - - public static Quaternion negate(Quaternion src, Quaternion dest) - { - if (dest == null) - { - dest = new Quaternion(); - } - - dest.x = -src.x; - dest.y = -src.y; - dest.z = -src.z; - dest.w = src.w; - return dest; - } - - public Vector negate() - { - return negate(this, this); - } - - public Vector load(FloatBuffer buf) - { - this.x = buf.get(); - this.y = buf.get(); - this.z = buf.get(); - this.w = buf.get(); - return this; - } - - public Vector scale(float scale) - { - return scale(scale, this, this); - } - - public static Quaternion scale(float scale, Quaternion src, Quaternion dest) - { - if (dest == null) - { - dest = new Quaternion(); - } - - dest.x = src.x * scale; - dest.y = src.y * scale; - dest.z = src.z * scale; - dest.w = src.w * scale; - return dest; - } - - public Vector store(FloatBuffer buf) - { - buf.put(this.x); - buf.put(this.y); - buf.put(this.z); - buf.put(this.w); - return this; - } - - public final float getX() - { - return this.x; - } - - public final float getY() - { - return this.y; - } - - public final void setX(float x) - { - this.x = x; - } - - public final void setY(float y) - { - this.y = y; - } - - public void setZ(float z) - { - this.z = z; - } - - public float getZ() - { - return this.z; - } - - public void setW(float w) - { - this.w = w; - } - - public float getW() - { - return this.w; - } - - public String toString() - { - return "Quaternion: " + this.x + " " + this.y + " " + this.z + " " + this.w; - } - - public static Quaternion mul(Quaternion left, Quaternion right, Quaternion dest) - { - if (dest == null) - { - dest = new Quaternion(); - } - - dest.set(left.x * right.w + left.w * right.x + left.y * right.z - left.z * right.y, left.y * right.w + left.w * right.y + left.z * right.x - left.x * right.z, left.z * right.w + left.w * right.z + left.x * right.y - left.y * right.x, left.w * right.w - left.x * right.x - left.y * right.y - left.z * right.z); - return dest; - } - - public static Quaternion mulInverse(Quaternion left, Quaternion right, Quaternion dest) - { - float f = right.lengthSquared(); - f = (double)f == 0.0D ? f : 1.0F / f; - - if (dest == null) - { - dest = new Quaternion(); - } - - dest.set((left.x * right.w - left.w * right.x - left.y * right.z + left.z * right.y) * f, (left.y * right.w - left.w * right.y - left.z * right.x + left.x * right.z) * f, (left.z * right.w - left.w * right.z - left.x * right.y + left.y * right.x) * f, (left.w * right.w + left.x * right.x + left.y * right.y + left.z * right.z) * f); - return dest; - } - - public final void setFromAxisAngle(Vector4f a1) - { - this.x = a1.x; - this.y = a1.y; - this.z = a1.z; - float f = (float)Math.sqrt((double)(this.x * this.x + this.y * this.y + this.z * this.z)); - float f1 = (float)(Math.sin(0.5D * (double)a1.w) / (double)f); - this.x *= f1; - this.y *= f1; - this.z *= f1; - this.w = (float)Math.cos(0.5D * (double)a1.w); - } - - public final Quaternion setFromMatrix(Matrix4f m) - { - return setFromMatrix(m, this); - } - - public static Quaternion setFromMatrix(Matrix4f m, Quaternion q) - { - return q.setFromMat(m.m00, m.m01, m.m02, m.m10, m.m11, m.m12, m.m20, m.m21, m.m22); - } - - public final Quaternion setFromMatrix(Matrix3f m) - { - return setFromMatrix(m, this); - } - - public static Quaternion setFromMatrix(Matrix3f m, Quaternion q) - { - return q.setFromMat(m.m00, m.m01, m.m02, m.m10, m.m11, m.m12, m.m20, m.m21, m.m22); - } - - private Quaternion setFromMat(float m00, float m01, float m02, float m10, float m11, float m12, float m20, float m21, float m22) - { - float f1 = m00 + m11 + m22; - - if ((double)f1 >= 0.0D) - { - float f = (float)Math.sqrt((double)f1 + 1.0D); - this.w = f * 0.5F; - f = 0.5F / f; - this.x = (m21 - m12) * f; - this.y = (m02 - m20) * f; - this.z = (m10 - m01) * f; - } - else - { - float f2 = Math.max(Math.max(m00, m11), m22); - - if (f2 == m00) - { - float f3 = (float)Math.sqrt((double)(m00 - (m11 + m22)) + 1.0D); - this.x = f3 * 0.5F; - f3 = 0.5F / f3; - this.y = (m01 + m10) * f3; - this.z = (m20 + m02) * f3; - this.w = (m21 - m12) * f3; - } - else if (f2 == m11) - { - float f4 = (float)Math.sqrt((double)(m11 - (m22 + m00)) + 1.0D); - this.y = f4 * 0.5F; - f4 = 0.5F / f4; - this.z = (m12 + m21) * f4; - this.x = (m01 + m10) * f4; - this.w = (m02 - m20) * f4; - } - else - { - float f5 = (float)Math.sqrt((double)(m22 - (m00 + m11)) + 1.0D); - this.z = f5 * 0.5F; - f5 = 0.5F / f5; - this.x = (m20 + m02) * f5; - this.y = (m12 + m21) * f5; - this.w = (m10 - m01) * f5; - } - } - - return this; - } -} diff --git a/common/src/main/java/org/vivecraft/utils/lwjgl/ReadableVector.java b/common/src/main/java/org/vivecraft/utils/lwjgl/ReadableVector.java deleted file mode 100644 index c148b8333..000000000 --- a/common/src/main/java/org/vivecraft/utils/lwjgl/ReadableVector.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.vivecraft.utils.lwjgl; - -import java.nio.FloatBuffer; - -public interface ReadableVector -{ - float length(); - - float lengthSquared(); - - Vector store(FloatBuffer var1); -} diff --git a/common/src/main/java/org/vivecraft/utils/lwjgl/ReadableVector2f.java b/common/src/main/java/org/vivecraft/utils/lwjgl/ReadableVector2f.java deleted file mode 100644 index 08c88450f..000000000 --- a/common/src/main/java/org/vivecraft/utils/lwjgl/ReadableVector2f.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.vivecraft.utils.lwjgl; - -public interface ReadableVector2f extends ReadableVector -{ - float getX(); - - float getY(); -} diff --git a/common/src/main/java/org/vivecraft/utils/lwjgl/ReadableVector3f.java b/common/src/main/java/org/vivecraft/utils/lwjgl/ReadableVector3f.java deleted file mode 100644 index 6d6a48288..000000000 --- a/common/src/main/java/org/vivecraft/utils/lwjgl/ReadableVector3f.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.vivecraft.utils.lwjgl; - -public interface ReadableVector3f extends ReadableVector2f -{ - float getZ(); -} diff --git a/common/src/main/java/org/vivecraft/utils/lwjgl/ReadableVector4f.java b/common/src/main/java/org/vivecraft/utils/lwjgl/ReadableVector4f.java deleted file mode 100644 index 03bb2ff14..000000000 --- a/common/src/main/java/org/vivecraft/utils/lwjgl/ReadableVector4f.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.vivecraft.utils.lwjgl; - -public interface ReadableVector4f extends ReadableVector3f -{ - float getW(); -} diff --git a/common/src/main/java/org/vivecraft/utils/lwjgl/WritableVector2f.java b/common/src/main/java/org/vivecraft/utils/lwjgl/WritableVector2f.java deleted file mode 100644 index 8173c6322..000000000 --- a/common/src/main/java/org/vivecraft/utils/lwjgl/WritableVector2f.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.vivecraft.utils.lwjgl; - -public interface WritableVector2f -{ - void setX(float var1); - - void setY(float var1); - - void set(float var1, float var2); -} diff --git a/common/src/main/java/org/vivecraft/utils/lwjgl/WritableVector3f.java b/common/src/main/java/org/vivecraft/utils/lwjgl/WritableVector3f.java deleted file mode 100644 index d9234661e..000000000 --- a/common/src/main/java/org/vivecraft/utils/lwjgl/WritableVector3f.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.vivecraft.utils.lwjgl; - -public interface WritableVector3f extends WritableVector2f -{ - void setZ(float var1); - - void set(float var1, float var2, float var3); -} diff --git a/common/src/main/java/org/vivecraft/utils/lwjgl/WritableVector4f.java b/common/src/main/java/org/vivecraft/utils/lwjgl/WritableVector4f.java deleted file mode 100644 index e677766c6..000000000 --- a/common/src/main/java/org/vivecraft/utils/lwjgl/WritableVector4f.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.vivecraft.utils.lwjgl; - -public interface WritableVector4f extends WritableVector3f -{ - void setW(float var1); - - void set(float var1, float var2, float var3, float var4); -} diff --git a/common/src/main/resources/assets/minecraft/shaders/core/lanczos.fsh b/common/src/main/resources/assets/minecraft/shaders/core/lanczos.fsh index 26adf6627..ca0306f45 100644 --- a/common/src/main/resources/assets/minecraft/shaders/core/lanczos.fsh +++ b/common/src/main/resources/assets/minecraft/shaders/core/lanczos.fsh @@ -1,8 +1,9 @@ #version 150 core - uniform sampler2D Sampler0; - uniform sampler2D Sampler1; - in vec2 centerTextureCoordinate; +uniform sampler2D Sampler0; +uniform sampler2D Sampler1; + +in vec2 centerTextureCoordinate; in vec2 oneStepLeftTextureCoordinate; in vec2 twoStepsLeftTextureCoordinate; in vec2 threeStepsLeftTextureCoordinate; @@ -11,7 +12,9 @@ in vec2 oneStepRightTextureCoordinate; in vec2 twoStepsRightTextureCoordinate; in vec2 threeStepsRightTextureCoordinate; in vec2 fourStepsRightTextureCoordinate; + out vec4 fragColor; + // sinc(x) * sinc(x/a) = (a * sin(pi * x) * sin(pi * x / a)) / (pi^2 * x^2) // Assuming a Lanczos constant of 2.0, and scaling values to max out at x = +/- 1.5 diff --git a/common/src/main/resources/assets/minecraft/shaders/core/lanczos.json b/common/src/main/resources/assets/minecraft/shaders/core/lanczos.json index 48c769613..416231080 100644 --- a/common/src/main/resources/assets/minecraft/shaders/core/lanczos.json +++ b/common/src/main/resources/assets/minecraft/shaders/core/lanczos.json @@ -12,8 +12,6 @@ { "name": "Sampler1" } ], "uniforms": [ - { "name": "projection", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, - { "name": "modelView", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, { "name": "texelWidthOffset", "type": "float", "count": 1, "values": [ 1.0 ] }, { "name": "texelHeightOffset", "type": "float", "count": 1, "values": [ 1.0 ] } ] diff --git a/common/src/main/resources/assets/minecraft/shaders/core/lanczos.vsh b/common/src/main/resources/assets/minecraft/shaders/core/lanczos.vsh index e527b65ad..918dde7de 100644 --- a/common/src/main/resources/assets/minecraft/shaders/core/lanczos.vsh +++ b/common/src/main/resources/assets/minecraft/shaders/core/lanczos.vsh @@ -1,12 +1,12 @@ #version 150 core - uniform float texelWidthOffset; - uniform float texelHeightOffset; -uniform mat4 projection; -uniform mat4 modelView; +uniform float texelWidthOffset; +uniform float texelHeightOffset; + in vec3 Position; in vec2 UV0; - out vec2 centerTextureCoordinate; + +out vec2 centerTextureCoordinate; out vec2 oneStepLeftTextureCoordinate; out vec2 twoStepsLeftTextureCoordinate; out vec2 threeStepsLeftTextureCoordinate; @@ -18,7 +18,7 @@ out vec2 fourStepsRightTextureCoordinate; void main() { - gl_Position = projection * modelView * vec4(Position, 1.0); + gl_Position = vec4(Position, 1.0); vec2 firstOffset = vec2(texelWidthOffset, texelHeightOffset); vec2 secondOffset = vec2(2.0 * texelWidthOffset, 2.0 * texelHeightOffset); diff --git a/common/src/main/resources/assets/minecraft/shaders/core/rendertype_end_gateway_vr.json b/common/src/main/resources/assets/minecraft/shaders/core/rendertype_end_gateway_vr.json new file mode 100644 index 000000000..7ceeb8be9 --- /dev/null +++ b/common/src/main/resources/assets/minecraft/shaders/core/rendertype_end_gateway_vr.json @@ -0,0 +1,21 @@ +{ + "blend": { + "func": "add", + "srcrgb": "srcalpha", + "dstrgb": "1-srcalpha" + }, + "vertex": "rendertype_end_portal_vr", + "fragment": "rendertype_end_portal_vr", + "attributes": [], + "samplers": [ + { "name": "Sampler0" }, + { "name": "Sampler1" } + ], + "uniforms": [ + { "name": "ModelViewMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "IViewRotMat", "type": "matrix3x3", "count": 9, "values": [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0] }, + { "name": "GameTime", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "EndPortalLayers", "type": "int", "count": 1, "values": [ 16 ] } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/minecraft/shaders/core/rendertype_end_portal_vr.fsh b/common/src/main/resources/assets/minecraft/shaders/core/rendertype_end_portal_vr.fsh new file mode 100644 index 000000000..be4018f11 --- /dev/null +++ b/common/src/main/resources/assets/minecraft/shaders/core/rendertype_end_portal_vr.fsh @@ -0,0 +1,102 @@ +#version 150 + +/* +MIT License + +Copyright (c) 2020 Bradley Qu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#moj_import + +uniform sampler2D Sampler0; +uniform sampler2D Sampler1; + +uniform float GameTime; +uniform int EndPortalLayers; + +in vec3 pos; + +const float PI = 3.14159265359; + +const vec3[] COLORS = vec3[]( +vec3(0.022087, 0.098399, 0.110818), +vec3(0.011892, 0.095924, 0.089485), +vec3(0.027636, 0.101689, 0.100326), +vec3(0.046564, 0.109883, 0.114838), +vec3(0.064901, 0.117696, 0.097189), +vec3(0.063761, 0.086895, 0.123646), +vec3(0.084817, 0.111994, 0.166380), +vec3(0.097489, 0.154120, 0.091064), +vec3(0.106152, 0.131144, 0.195191), +vec3(0.097721, 0.110188, 0.187229), +vec3(0.133516, 0.138278, 0.148582), +vec3(0.070006, 0.243332, 0.235792), +vec3(0.196766, 0.142899, 0.214696), +vec3(0.047281, 0.315338, 0.321970), +vec3(0.204675, 0.390010, 0.302066), +vec3(0.080955, 0.314821, 0.661491) +); + +const mat3 SCALE_TRANSLATE = mat3( +0.5, 0.0, 0.25, +0.0, 0.5, 0.25, +0.0, 0.0, 1.0 +); + +mat3 end_portal_layer(float layer) { + mat3 translate = mat3( + 1.0, 0.0, 17.0 / layer, + 0.0, 1.0, (2.0 + layer / 1.5) * (GameTime * 1.5), + 0.0, 0.0, 1.0 + ); + + mat2 scale = mat2((4.5 - layer / 4.0) * 2.0); + + return mat3(scale) * translate * SCALE_TRANSLATE; +} + +vec3 proj_3d_to_2d(vec3 dir) { + dir.xz = normalize(dir.xz); + dir.x = (dir.z > 0.0 ? acos(dir.x) : 2 * PI - acos(dir.x)) / PI * 2.0; + dir.y = (acos(dir.y)) / PI * 2.0; + dir.z = 1.0; + + return dir; +} + +out vec4 fragColor; + +void main() { + vec4 outColor = vec4(1.0); + + vec3 tmppos = normalize(pos); + tmppos = proj_3d_to_2d(tmppos); + + outColor.rgb = texture(Sampler0, tmppos.xy).rgb * COLORS[0]; + + for (int i = 0; i < EndPortalLayers; i++) { + float layer = float(i) + 1.0; + tmppos = proj_3d_to_2d(mat3(mat2_rotate_z(radians((layer * layer * 4321.0 + layer * 9.0) * 2.0))) * normalize(pos)); + outColor.rgb += texture(Sampler1, (tmppos * end_portal_layer(float(i + 1))).xy).rgb * COLORS[i]; + } + + fragColor = outColor; +} \ No newline at end of file diff --git a/common/src/main/resources/assets/minecraft/shaders/core/rendertype_end_portal_vr.json b/common/src/main/resources/assets/minecraft/shaders/core/rendertype_end_portal_vr.json new file mode 100644 index 000000000..09cd566d2 --- /dev/null +++ b/common/src/main/resources/assets/minecraft/shaders/core/rendertype_end_portal_vr.json @@ -0,0 +1,21 @@ +{ + "blend": { + "func": "add", + "srcrgb": "srcalpha", + "dstrgb": "1-srcalpha" + }, + "vertex": "rendertype_end_portal_vr", + "fragment": "rendertype_end_portal_vr", + "attributes": [], + "samplers": [ + { "name": "Sampler0" }, + { "name": "Sampler1" } + ], + "uniforms": [ + { "name": "ModelViewMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "IViewRotMat", "type": "matrix3x3", "count": 9, "values": [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0] }, + { "name": "GameTime", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "EndPortalLayers", "type": "int", "count": 1, "values": [ 15 ] } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/minecraft/shaders/core/rendertype_end_portal_vr.vsh b/common/src/main/resources/assets/minecraft/shaders/core/rendertype_end_portal_vr.vsh new file mode 100644 index 000000000..03651ca6f --- /dev/null +++ b/common/src/main/resources/assets/minecraft/shaders/core/rendertype_end_portal_vr.vsh @@ -0,0 +1,40 @@ +#version 150 +/* +MIT License + +Copyright (c) 2020 Bradley Qu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#moj_import + +in vec3 Position; + +uniform mat4 ModelViewMat; +uniform mat4 ProjMat; +uniform mat3 IViewRotMat; + +out vec3 pos; + +void main() { + gl_Position = ProjMat * ModelViewMat * vec4(Position, 1.0); + + pos = IViewRotMat * Position; +} \ No newline at end of file diff --git a/common/src/main/resources/assets/vivecraft/lang/de_de.json b/common/src/main/resources/assets/vivecraft/lang/de_de.json index 350b37b2a..b964d8655 100644 --- a/common/src/main/resources/assets/vivecraft/lang/de_de.json +++ b/common/src/main/resources/assets/vivecraft/lang/de_de.json @@ -162,7 +162,7 @@ "vivecraft.options.FORCE_STANDING_FREE_MOVE": "Erzwinge Freies Bewegen", "vivecraft.options.ALLOW_ADVANCED_BINDINGS": "Zeige Erweiterte Tasten", "vivecraft.options.MENU_WORLD_SELECTION": "Welten", - "vivecraft.options.HRTF_SELECTION": "HRTF", + "vivecraft.options.HRTF_SELECTION": "Raumklang (VR)", "vivecraft.options.RELOAD_EXTERNAL_CAMERA": "Externe Kamera neu laden", "vivecraft.options.RIGHT_CLICK_DELAY": "Rechtsklick Wiederholung", "vivecraft.options.ANIMAL_TOUCHING": "Tier Berührungen", @@ -206,7 +206,7 @@ "vivecraft.options.WEAPON_COLLISION.tooltip": "Ermöglicht das Treffen von Blöcken und Entities im Raumskala.\nIst Automatisch bei Survival eingeschaltet und bei Creative ausgeschaltet.", "vivecraft.options.ALLOW_CRAWLING.tooltip": "Wenn diese Option aktiviert ist, kann sich der Spieler unter dem Block ducken.", "vivecraft.options.LIMIT_TELEPORT.tooltip": "Wenn aktiviert, hat der Bogen-Teleporter im Überlebensmodus Einschränkungen. Er wird nicht in der Lage sein, seitlich an Blöcken hochzuspringen, er wird Hunger verbrauchen, und er wird einen Energieriegel haben, der sich mit der Zeit wieder auffüllt.", - "vivecraft.options.REVERSE_HANDS.tooltip": "Tauschen Sie die linke/rechte Hand als dominant.\n An: Links dominant\n Aus: Rechts-dominant\n\nUm die Schaltflächen zu vertauschen, starten Sie das Spiel neu und stellen Sie sicher, dass die Standardbindungen in SteamVR ausgewählt sind.", + "vivecraft.options.REVERSE_HANDS.tooltip": "Tauschen Sie die linke/rechte Hand als dominant.\n An: Links dominant\n Aus: Rechts-dominant\n\nUm die Tastenbelegung zu vertauschen, starten Sie das Spiel neu und stellen Sie sicher, dass die Standardbindungen in SteamVR ausgewählt sind.", "vivecraft.options.THIRDPERSON_ITEMTRANSFORMS.tooltip": "Bestimmt wie gehaltene Gegenstände transformiert werden.\n An: Benutzt unveränderte 3. Person transformationen.\n Aus: Benutzt adaptierte 1. Person transformationen\n\n3. Person transformationen können besser für Mod Gegenstände funktionieren.", "vivecraft.options.STENCIL_ON.tooltip": "Bereiche des Bildschirms außerhalb des FOV ausblenden.\nVerbessert die Leistung.", "vivecraft.options.BCB_ON.tooltip": "Zeigt Ihre Körperposition als quadratischen Schatten auf dem Boden an.\nDies ist Ihr quadratischer Schatten Kumpel™.\nVerlieren Sie Ihren quadratischen Schatten Kumpel nicht.", @@ -224,7 +224,7 @@ "vivecraft.options.REALISTIC_SWIM.tooltip": "Falls eingeschaltet, erlauben Sie das Schwimmen durch Brustschwimm-Bewegung mit den Controllern.", "vivecraft.options.REALISTIC_ROW.tooltip": "Ruder, Ruder, Ruder dein Boot... wie verrückt mit den Armen .", "vivecraft.options.WALK_MULTIPLIER.tooltip": "Multipliziert Ihre Position im Raum mit einem Faktor.\nErlaubt Ihnen, mehr herumzulaufen, kann aber Bewegungsübelkeit verursachen.", - "vivecraft.options.FREEMOVE_MODE.tooltip": "Die Quelle für die Freemove-Richtung.\n\n Die Steuerung: Freihand-Steuergerät, das die Richtung angibt.\n HMD: Blickrichtung des Headsets.\n Run-In-Place: Die Neigung basiert auf dem Schwingen der Conrtoller. Pitch ist Ihr Headset.\n Raum: Die Neigung ist relativ zu Ihrem VR-Raum nach vorne. Neigung: Die Neigung ist basiert auf Ihr Headset. Dieser Modus ist am besten nur für 180 Setups geeignet.", + "vivecraft.options.FREEMOVE_MODE.tooltip": "Die Quelle für die Frei Bewegen-Richtung.\n\n Controller: Richtung des nicht dominanten Controllers.\n HMD: Blickrichtung des Headsets.\n Run-In-Place: Die Neigung basiert auf dem Schwingen der Controller. Pitch ist Ihr Headset.\n Raum: Die Neigung ist relativ zu Ihrem VR-Raum nach vorne. Neigung: Die Neigung ist basiert auf Ihr Headset. Dieser Modus ist am besten nur für 180 Setups geeignet.", "vivecraft.options.VEHICLE_ROTATION.tooltip": "Wenn man in einem Vehikel fährt, dreht sich die Welt, während sich das Vehikel dreht. Kann verwirrend sein.", "vivecraft.options.RESET_ORIGIN.tooltip": "Stellen Sie die Füße des Spielers in der Welt auf 1,62 m unter die aktuelle HMD-Position zurück. Für nicht-absolute Trackingsysteme oder sitzendes Spiel.", "vivecraft.options.X_SENSITIVITY.tooltip": "Geschwindigkeit, mit der sich die Ansicht dreht, wenn sie auf den Rand des Schlüssellochs gedrückt wird.", @@ -384,15 +384,49 @@ "vivecraft.options.shaderguirender.aftershader": "Nach Shader", "vivecraft.options.shaderguirender.aftertranslucent": "Transparent", "vivecraft.options.shaderguirender.beforetranslucentsolid": "Undurchsichtig", + "vivecraft.options.chatserverpluginmessage.always": "Immer", + "vivecraft.options.chatserverpluginmessage.serveronly": "Nur Server", + "vivecraft.options.chatserverpluginmessage.never": "Nie", + "vivecraft.options.once": "Einmal", "_comment_m5": "Option names", "vivecraft.options.LOW_HEALTH_INDICATOR": "Gesundheit Indikator", "vivecraft.options.SHADER_GUI_RENDER": "Shader GUI", + "vivecraft.options.FREEMOVE_FLY_MODE": "Frei Bewegen Fliegen", + "vivecraft.options.SHOW_UPDATES": "Update Nachricht", + "vivecraft.options.SHOW_PLUGIN": "Plugin Nachricht", + "vivecraft.options.SHOW_PLUGIN_MISSING": "Plugin fehlt Nachricht", + "vivecraft.options.VR_HOTSWITCH": "Schnellwechsel", + "vivecraft.options.INGAME_BINDINGS_IN_GUI": "Im-Spiel Tatest im GUI", "_comment_m6": "Option tooltips", "vivecraft.options.LOW_HEALTH_INDICATOR.tooltip": "Pulsiert den Bildschirm Rot bei niedriger Gesundheit, um den derzeitigen Gesundheitszustand anzuzeigen.", "vivecraft.options.SHADER_GUI_RENDER.tooltip": "Bestimmt wie die Benutzeroberfläche mit Shadern dargestellt wird.\n Nach Shader: zeigt die Benutzeroberfläche ohne Shader, beste Kompatibilität. (Probleme mit PTGI HRR)\n Transparent: zeigt die Benutzeroberfläche mit Shadern und transparent. (Probleme mit Sildurs Vibrant)\n Undurchsichtig: zeigt die Benutzeroberfläche mit Shadern, aber Undurchsichtig", - "vivecraft.options.VR_MODE.tooltip": "wechsle zwischen VR/NONVR\nbenötigt einen Spiel Neustart, um übernommen zu werden", + "vivecraft.options.VR_MODE.tooltip": "wechsle zwischen VR/NONVR", + "vivecraft.options.FREEMOVE_FLY_MODE.tooltip": "Die Quelle für die Frei Bewegen-Richtung im Flugmodus.\n\n Auto: Verwendet die gleiche richtung wie das normale Frei Bewegen.\n Controller: Richtung des nicht dominanten Controllers.\n HMD: Blickrichtung des Headsets.", + "vivecraft.options.SHOW_UPDATES.tooltip": "Wie oft eine Update Nachricht im Chat gezeigt werden soll.\n Immer: zeigt die Nachricht immer, wenn eine Welt geladen wird.\n Einmal: Zeigt die Nachricht einmal, wenn ein neues Update verfügbar ist.", + "vivecraft.options.SHOW_PLUGIN.tooltip": "Wann die Server Mod erkannt Nachricht im Chat gezeigt werden soll.\n Immer: Zeigt die Nachricht in Einzel/Mehrspieler.\n Nur Server: Zeigt die Nachricht nur im Mehrspieler.\n Nie: Zeigt die Nachricht niemals.", + "vivecraft.options.SHOW_PLUGIN_MISSING.tooltip": "Wie oft die Server Mod nicht erkannt Nachricht im Chat gezeigt werden soll.\n Immer: Zeigt die Nachricht bei Server beitritt und Dimension/Server wechsel.\n Einmal: Zeigt die Nachricht nur beim beitreten eines Servers.", + "vivecraft.options.VR_HOTSWITCH.tooltip": "Schnellwechsel wechselt automatisch zu NONVR wenn das Headset abgenommen wird.\nWenn diese Einstellung ausgeschalten ist, befindet sich das Spiel dauerhaft im VR Modus, sobald VR eingeschalten wurde", + "vivecraft.options.INGAME_BINDINGS_IN_GUI.tooltip": "Erlaubt es alle Im-Spiel Tasten in Menüs zu verwenden. Dies kann zu nicht gewollten doppel Tastendrücken führen.", "_comment_m10": "Messages", "vivecraft.messages.mode": "Modus:", - "vivecraft.messages.configWriteError":"§cSchreiben der Einstellungen fehlgeschlagen, Änderungen wurden nicht gespeichert", - "vivecraft.messages.configChangeRestart":"§6VR Modus geändert, bitte starte das Spiel neu damit die Änderungen übernommen werden." + "vivecraft.messages.novrhotswitchinglegacy": "Veralteten Vivecraft server mod erkannt. Dieser Server unterstützt kein VR Schnellwechsel. Sie können den Modus nur im Hauptmenü wechseln.", + "vivecraft.messages.novrhotswitching": "Dieser Server hat VR Schnellwechsel deaktiviert. Sie können den Modus nur im Hauptmenü wechseln.", + "vivecraft.messages.vrhotswitchinginfo": "VR Schnellwechsel aktiviert: Setze dein Headset auf, um zu VR zu wechseln", + "vivecraft.messages.updateAvailable": "§a[Vivecraft]§r Update verfügbar: %s. Klicke für mehr Details.", + "vivecraft.messages.click": "Klicke für mehr Details.", + "vivecraft.messages.incompatiblesettings": "Inkompatible Einstellungen", + "vivecraft.messages.optifineaa": "Optifines Antialiasing ist nicht compatible mit VR. Um VR zu nutzen, deaktiviere Antialiasing und starte das Spiel neu.", + "vivecraft.messages.menuworldexporterror": "Weltexport fehlgeschlagen mit folgendem Fehler: %s", + + "vivecraft.gui.update": "§aⓘ§r Update", + "vivecraft.gui.vr": "%s VR: %s", + + "vivecraft.toasts.move1":"Laufe mit %s", + "vivecraft.toasts.move2":"Laufe mit %s und %s", + "vivecraft.toasts.move3":"Laufe mit %s, %s und %s", + "vivecraft.toasts.move4":"Laufe mit %s, %s, %s und %s", + "vivecraft.toasts.point_controller":"Zeige mit deinem %s", + "vivecraft.toasts.point_controller.left":"linken Controller", + "vivecraft.toasts.point_controller.right":"rechten Controller", + "vivecraft.toasts.teleport":"Teleportiere mit %s" } \ No newline at end of file diff --git a/common/src/main/resources/assets/vivecraft/lang/en_ca.json b/common/src/main/resources/assets/vivecraft/lang/en_ca.json index 71d405c7c..d5302bd29 100644 --- a/common/src/main/resources/assets/vivecraft/lang/en_ca.json +++ b/common/src/main/resources/assets/vivecraft/lang/en_ca.json @@ -162,7 +162,7 @@ "vivecraft.options.FORCE_STANDING_FREE_MOVE": "Force Free Move", "vivecraft.options.ALLOW_ADVANCED_BINDINGS": "Show Advanced Bindings", "vivecraft.options.MENU_WORLD_SELECTION": "Worlds", - "vivecraft.options.HRTF_SELECTION": "HRTF", + "vivecraft.options.HRTF_SELECTION": "Directional Audio (VR)", "vivecraft.options.RELOAD_EXTERNAL_CAMERA": "Reload External Camera", "vivecraft.options.RIGHT_CLICK_DELAY": "Right Click Repeat", "vivecraft.options.ANIMAL_TOUCHING": "Animal Touching", diff --git a/common/src/main/resources/assets/vivecraft/lang/en_gb.json b/common/src/main/resources/assets/vivecraft/lang/en_gb.json index 452e1f0eb..e1c5e606a 100644 --- a/common/src/main/resources/assets/vivecraft/lang/en_gb.json +++ b/common/src/main/resources/assets/vivecraft/lang/en_gb.json @@ -162,7 +162,7 @@ "vivecraft.options.FORCE_STANDING_FREE_MOVE": "Force Free Move", "vivecraft.options.ALLOW_ADVANCED_BINDINGS": "Show Advanced Bindings", "vivecraft.options.MENU_WORLD_SELECTION": "Worlds", - "vivecraft.options.HRTF_SELECTION": "HRTF", + "vivecraft.options.HRTF_SELECTION": "Directional Audio (VR)", "vivecraft.options.RELOAD_EXTERNAL_CAMERA": "Reload External Camera", "vivecraft.options.RIGHT_CLICK_DELAY": "Right Click Repeat", "vivecraft.options.ANIMAL_TOUCHING": "Animal Touching", diff --git a/common/src/main/resources/assets/vivecraft/lang/en_us.json b/common/src/main/resources/assets/vivecraft/lang/en_us.json index fe560c7de..136d3accf 100644 --- a/common/src/main/resources/assets/vivecraft/lang/en_us.json +++ b/common/src/main/resources/assets/vivecraft/lang/en_us.json @@ -161,7 +161,7 @@ "vivecraft.options.FORCE_STANDING_FREE_MOVE": "Force Free Move", "vivecraft.options.ALLOW_ADVANCED_BINDINGS": "Show Advanced Bindings", "vivecraft.options.MENU_WORLD_SELECTION": "Worlds", - "vivecraft.options.HRTF_SELECTION": "HRTF", + "vivecraft.options.HRTF_SELECTION": "Directional Audio (VR)", "vivecraft.options.RELOAD_EXTERNAL_CAMERA": "Reload External Camera", "vivecraft.options.RIGHT_CLICK_DELAY": "Right Click Repeat", "vivecraft.options.ANIMAL_TOUCHING": "Animal Touching", @@ -362,7 +362,7 @@ "vivecraft.messages.serverplugin": "Vivecraft server mod detected: %s", "vivecraft.messages.noserverplugin": "Vivecraft server mod not detected. This server may not support teleporting. Restricted movement mode (fallback to free move) has been enabled.", "vivecraft.messages.calibrateheight": "Please calibrate your height in the pause menu.", - "vivecraft.messages.rendersetupfailed": "Render setup failed: %s. Press Q to disable VR and close the game.", + "vivecraft.messages.rendersetupfailed": "Render setup failed: %s", "vivecraft.messages.intelgraphics": "Intel Integrated Graphics are not supported. If this is a laptop, please force the high-performance GPU. Detected GPU: %s", "vivecraft.messages.nosteamvr": "OpenVR runtime not detected. Did you install SteamVR?", "vivecraft.messages.menuworldexportcomplete.1": "World export complete... area size: %d", @@ -383,15 +383,50 @@ "vivecraft.options.shaderguirender.aftershader": "After Shader", "vivecraft.options.shaderguirender.aftertranslucent": "Translucent", "vivecraft.options.shaderguirender.beforetranslucentsolid": "Opaque", + "vivecraft.options.freemove.auto": "Auto", + "vivecraft.options.chatserverpluginmessage.always": "Always", + "vivecraft.options.chatserverpluginmessage.serveronly": "Server Only", + "vivecraft.options.chatserverpluginmessage.never": "Never", + "vivecraft.options.once": "Once", "_comment_m5": "Option names", "vivecraft.options.LOW_HEALTH_INDICATOR": "Health Indicator", "vivecraft.options.SHADER_GUI_RENDER": "Shaders GUI", + "vivecraft.options.FREEMOVE_FLY_MODE": "Free Move Flying", + "vivecraft.options.SHOW_UPDATES": "Update Message", + "vivecraft.options.SHOW_PLUGIN": "Plugin Message", + "vivecraft.options.SHOW_PLUGIN_MISSING": "Plugin Missing Message", + "vivecraft.options.VR_HOTSWITCH": "Hotswitching", + "vivecraft.options.INGAME_BINDINGS_IN_GUI": "In-Game Bindings In GUI", "_comment_m6": "Option tooltips", "vivecraft.options.LOW_HEALTH_INDICATOR.tooltip": "Pulses the screen red, when at low health, to indicate your current health status", "vivecraft.options.SHADER_GUI_RENDER.tooltip": "Determines how the GUI is rendered with shaders.\n After Shader: renders the GUI without using the shader, best compatibility. (issues with PTGI HRR)\n Translucent: renders the GUI with shader and transparency. (issues with Sildurs Vibrant)\n Opaque: renders the GUI with shader and opaque", - "vivecraft.options.VR_MODE.tooltip": "change between VR/NONVR\nrequires a game restart to take effect", + "vivecraft.options.VR_MODE.tooltip": "change between VR/NONVR", + "vivecraft.options.FREEMOVE_FLY_MODE.tooltip": "The source for freemove direction when flying.\n\n Auto: uses the same direction as regular Freemove.\n Controller: Offhand controller pointing direction.\n HMD: Headset look direction.", + "vivecraft.options.SHOW_UPDATES.tooltip": "How often an update message should show up in chat.\n Always: Shows the update message each time a world is loaded.\n Once: Shows the update message only on the first world load after a new update is out.", + "vivecraft.options.SHOW_PLUGIN.tooltip": "When the server mod detected message should show up in chat.\n Always: Shows the message on single/multiplayer.\n Server Only: Only shows the message in multiplayer.\n Never: Never shows the message.", + "vivecraft.options.SHOW_PLUGIN_MISSING.tooltip": "How often the server mod not detected message should show up in chat.\n Always: Shows the message on server join and dimension/server change.\n Once: Only shows the message when joining a server.", + "vivecraft.options.VR_HOTSWITCH.tooltip": "Hotswitching switches to NONVR when the headset is taken off.\nIf this setting is off, the game will always be in VR mode, when VR is enabled", + "vivecraft.options.INGAME_BINDINGS_IN_GUI.tooltip": "Allows for all In-Game bindings to be used in menus, this can cause unwanted double presses.", "_comment_m10": "Messages", "vivecraft.messages.mode": "Mode:", - "vivecraft.messages.configWriteError":"§cFailed to write config, your changes are not saved", - "vivecraft.messages.configChangeRestart":"§6VR Mode changed, please restart the game for it to take effect." + "vivecraft.messages.novrhotswitchinglegacy": "Legacy Vivecraft server mod detected. This Server does not support VR hot switching, you can only change it in the main menu.", + "vivecraft.messages.novrhotswitching": "This Server has VR hot switching disabled, you can only change it in the main menu.", + "vivecraft.messages.vrhotswitchinginfo": "VR Hotswitching enabled: Put on your headset to swtich to VR", + "vivecraft.messages.updateAvailable": "§a[Vivecraft]§r Update available: %s. click for more details.", + "vivecraft.messages.click": "Click for more details.", + "vivecraft.messages.incompatiblesettings": "Incompatible Settings", + "vivecraft.messages.optifineaa": "Optifine antialiasing is not compatible with VR. To use VR disable antialiasing and restart the game.", + "vivecraft.messages.menuworldexporterror": "World export failed with error: %s", + + "vivecraft.gui.update": "§aⓘ§r Update", + "vivecraft.gui.vr": "%s VR: %s", + + "vivecraft.toasts.move1":"Move with %s", + "vivecraft.toasts.move2":"Move with %s and %s", + "vivecraft.toasts.move3":"Move with %s, %s and %s", + "vivecraft.toasts.move4":"Move with %s, %s, %s and %s", + "vivecraft.toasts.point_controller":"Point with your %s", + "vivecraft.toasts.point_controller.left":"left Controller", + "vivecraft.toasts.point_controller.right":"right Controller", + "vivecraft.toasts.teleport":"Teleport with %s" } \ No newline at end of file diff --git a/common/src/main/resources/assets/vivecraft/lang/es_es.json b/common/src/main/resources/assets/vivecraft/lang/es_es.json index 275e46aac..3446fd087 100644 --- a/common/src/main/resources/assets/vivecraft/lang/es_es.json +++ b/common/src/main/resources/assets/vivecraft/lang/es_es.json @@ -162,7 +162,7 @@ "vivecraft.options.FORCE_STANDING_FREE_MOVE": "Forzar Movimiento Libre", "vivecraft.options.ALLOW_ADVANCED_BINDINGS": "Mostrar Asignaciones Avdas.", "vivecraft.options.MENU_WORLD_SELECTION": "Mundos", - "vivecraft.options.HRTF_SELECTION": "HRTF", + "vivecraft.options.HRTF_SELECTION": "Audio direccional (VR)", "vivecraft.options.RELOAD_EXTERNAL_CAMERA": "Recargar Cámara Externa", "vivecraft.options.RIGHT_CLICK_DELAY": "Repet. Clic dcho.", "vivecraft.options.ANIMAL_TOUCHING": "Tocar Animales", diff --git a/common/src/main/resources/assets/vivecraft/lang/fr_fr.json b/common/src/main/resources/assets/vivecraft/lang/fr_fr.json index 6c3ea15b4..013a34698 100644 --- a/common/src/main/resources/assets/vivecraft/lang/fr_fr.json +++ b/common/src/main/resources/assets/vivecraft/lang/fr_fr.json @@ -162,7 +162,7 @@ "vivecraft.options.FORCE_STANDING_FREE_MOVE": "Forcer le déplacement libre", "vivecraft.options.ALLOW_ADVANCED_BINDINGS": "Afficher contrôles avancés", "vivecraft.options.MENU_WORLD_SELECTION": "Mondes", - "vivecraft.options.HRTF_SELECTION": "HRTF", + "vivecraft.options.HRTF_SELECTION": "Audio directionnel (VR)", "vivecraft.options.RELOAD_EXTERNAL_CAMERA": "Recharger la caméra externe", "vivecraft.options.RIGHT_CLICK_DELAY": "Répéter clic droit", "vivecraft.options.ANIMAL_TOUCHING": "Toucher les animales", diff --git a/common/src/main/resources/assets/vivecraft/lang/nl_nl.json b/common/src/main/resources/assets/vivecraft/lang/nl_nl.json index 5ae64f79d..c797fc227 100644 --- a/common/src/main/resources/assets/vivecraft/lang/nl_nl.json +++ b/common/src/main/resources/assets/vivecraft/lang/nl_nl.json @@ -162,7 +162,7 @@ "vivecraft.options.FORCE_STANDING_FREE_MOVE": "Forceer Vrije Beweging", "vivecraft.options.ALLOW_ADVANCED_BINDINGS": "Geavanceerde Bindingen Weergeven", "vivecraft.options.MENU_WORLD_SELECTION": "Werelden", - "vivecraft.options.HRTF_SELECTION": "HRTF", + "vivecraft.options.HRTF_SELECTION": "3D-geluid (VR)", "vivecraft.options.RELOAD_EXTERNAL_CAMERA": "Laad de Externe Camera Opnieuw", "vivecraft.options.RIGHT_CLICK_DELAY": "Klik Met de Rechtermuisknop Op Herhalen", "vivecraft.options.ANIMAL_TOUCHING": "Dier Betasting", diff --git a/common/src/main/resources/assets/vivecraft/lang/pl_pl.json b/common/src/main/resources/assets/vivecraft/lang/pl_pl.json index 8f83439b3..13f9c14a3 100644 --- a/common/src/main/resources/assets/vivecraft/lang/pl_pl.json +++ b/common/src/main/resources/assets/vivecraft/lang/pl_pl.json @@ -162,7 +162,7 @@ "vivecraft.options.FORCE_STANDING_FREE_MOVE": "Wymuś swobodny ruch", "vivecraft.options.ALLOW_ADVANCED_BINDINGS": "Pokaż zaawansowane sterowanie", "vivecraft.options.MENU_WORLD_SELECTION": "Światy", - "vivecraft.options.HRTF_SELECTION": "HRTF", + "vivecraft.options.HRTF_SELECTION": "Dźwięk przestrzenny (VR)", "vivecraft.options.RELOAD_EXTERNAL_CAMERA": "Przeładuj zewnętrzną kamerę", "vivecraft.options.RIGHT_CLICK_DELAY": "Powtórzenie prawego kliknięcia", "vivecraft.options.ANIMAL_TOUCHING": "Dotykanie zwierząt", diff --git a/common/src/main/resources/assets/vivecraft/lang/ru_ru.json b/common/src/main/resources/assets/vivecraft/lang/ru_ru.json index dfbb13ee4..87861a843 100644 --- a/common/src/main/resources/assets/vivecraft/lang/ru_ru.json +++ b/common/src/main/resources/assets/vivecraft/lang/ru_ru.json @@ -162,7 +162,7 @@ "vivecraft.options.FORCE_STANDING_FREE_MOVE": "Свободное движение", "vivecraft.options.ALLOW_ADVANCED_BINDINGS": "Глобальные бинды", "vivecraft.options.MENU_WORLD_SELECTION": "Миры", - "vivecraft.options.HRTF_SELECTION": "HRTF", + "vivecraft.options.HRTF_SELECTION": "Позиционируемый звук (VR)", "vivecraft.options.RELOAD_EXTERNAL_CAMERA": "Перезагрузка камеры", "vivecraft.options.RIGHT_CLICK_DELAY": "Повтор ПКМ", "vivecraft.options.ANIMAL_TOUCHING": "Прикосновения к животным", diff --git a/common/src/main/resources/assets/vivecraft/lang/zh_cn.json b/common/src/main/resources/assets/vivecraft/lang/zh_cn.json index f915c9e18..bbc5c13be 100644 --- a/common/src/main/resources/assets/vivecraft/lang/zh_cn.json +++ b/common/src/main/resources/assets/vivecraft/lang/zh_cn.json @@ -162,7 +162,7 @@ "vivecraft.options.FORCE_STANDING_FREE_MOVE": "强制自由移动", "vivecraft.options.ALLOW_ADVANCED_BINDINGS": "显示高级按键设置", "vivecraft.options.MENU_WORLD_SELECTION": "世界", - "vivecraft.options.HRTF_SELECTION": "3D环绕音效(头部相关传递函数)", + "vivecraft.options.HRTF_SELECTION": "定向音频(VR)", "vivecraft.options.RELOAD_EXTERNAL_CAMERA": "重载外部摄像机", "vivecraft.options.RIGHT_CLICK_DELAY": "重复右键点击", "vivecraft.options.ANIMAL_TOUCHING": "动物触摸识别", diff --git a/common/src/main/resources/natives/linux32/libopenvr_api.so b/common/src/main/resources/natives/linux32/libopenvr_api.so deleted file mode 100644 index f0c2bef48..000000000 Binary files a/common/src/main/resources/natives/linux32/libopenvr_api.so and /dev/null differ diff --git a/common/src/main/resources/natives/linux64/libopenvr_api.so b/common/src/main/resources/natives/linux64/libopenvr_api.so deleted file mode 100644 index b5db2f0b5..000000000 Binary files a/common/src/main/resources/natives/linux64/libopenvr_api.so and /dev/null differ diff --git a/common/src/main/resources/natives/osx/libopenvr_api.dylib b/common/src/main/resources/natives/osx/libopenvr_api.dylib deleted file mode 100644 index 8a2df474a..000000000 Binary files a/common/src/main/resources/natives/osx/libopenvr_api.dylib and /dev/null differ diff --git a/common/src/main/resources/natives/win32/openvr_api.dll b/common/src/main/resources/natives/win32/openvr_api.dll deleted file mode 100644 index 4f5bdf156..000000000 Binary files a/common/src/main/resources/natives/win32/openvr_api.dll and /dev/null differ diff --git a/common/src/main/resources/natives/win64/openvr_api.dll b/common/src/main/resources/natives/win64/openvr_api.dll deleted file mode 100644 index 3b05986b8..000000000 Binary files a/common/src/main/resources/natives/win64/openvr_api.dll and /dev/null differ diff --git a/common/src/main/resources/vivecraft.accesswidener b/common/src/main/resources/vivecraft.accesswidener index 64eb5a2b9..ea6f1e60e 100644 --- a/common/src/main/resources/vivecraft.accesswidener +++ b/common/src/main/resources/vivecraft.accesswidener @@ -1,94 +1,104 @@ accessWidener v1 named +# custom player model accessible class net/minecraft/client/model/geom/ModelPart$Polygon accessible class net/minecraft/client/model/geom/ModelPart$Vertex accessible field net/minecraft/client/model/geom/ModelPart cubes Ljava/util/List; accessible field net/minecraft/client/model/geom/ModelPart$Cube polygons [Lnet/minecraft/client/model/geom/ModelPart$Polygon; -accessible field com/mojang/math/Matrix4f m00 F -accessible field com/mojang/math/Matrix4f m01 F -accessible field com/mojang/math/Matrix4f m02 F -accessible field com/mojang/math/Matrix4f m03 F -accessible field com/mojang/math/Matrix4f m10 F -accessible field com/mojang/math/Matrix4f m11 F -accessible field com/mojang/math/Matrix4f m12 F -accessible field com/mojang/math/Matrix4f m13 F -accessible field com/mojang/math/Matrix4f m20 F -accessible field com/mojang/math/Matrix4f m21 F -accessible field com/mojang/math/Matrix4f m22 F -accessible field com/mojang/math/Matrix4f m23 F -accessible field com/mojang/math/Matrix4f m30 F -accessible field com/mojang/math/Matrix4f m31 F -accessible field com/mojang/math/Matrix4f m32 F -accessible field com/mojang/math/Matrix4f m33 F -accessible field net/minecraft/network/Connection channel Lio/netty/channel/Channel; -extendable class net/minecraft/world/level/material/FluidState + +# custom player modle rendering +accessible field net/minecraft/client/model/PlayerModel slim Z +extendable method net/minecraft/client/renderer/entity/player/PlayerRenderer setModelProperties (Lnet/minecraft/client/player/AbstractClientPlayer;)V + +# modded layer supports +accessible method net/minecraft/client/renderer/entity/LivingEntityRenderer addLayer (Lnet/minecraft/client/renderer/entity/layers/RenderLayer;)Z +extendable method net/minecraft/client/renderer/entity/LivingEntityRenderer addLayer (Lnet/minecraft/client/renderer/entity/layers/RenderLayer;)Z +mutable field net/minecraft/client/renderer/entity/layers/RenderLayer renderer Lnet/minecraft/client/renderer/entity/RenderLayerParent; +accessible field net/minecraft/client/renderer/entity/layers/RenderLayer renderer Lnet/minecraft/client/renderer/entity/RenderLayerParent; + +# gui handling accessible method net/minecraft/client/MouseHandler onPress (JIII)V accessible method net/minecraft/client/MouseHandler onMove (JDD)V accessible method net/minecraft/client/MouseHandler onScroll (JDD)V accessible method net/minecraft/client/KeyboardHandler charTyped (JII)V + +# for aim fix +accessible field net/minecraft/network/Connection channel Lio/netty/channel/Channel; + +# for quicktorch accessible method net/minecraft/client/Minecraft startUseItem ()V + +# to switch rendrtargetrs for VR passes mutable field net/minecraft/client/Minecraft mainRenderTarget Lcom/mojang/blaze3d/pipeline/RenderTarget; accessible field net/minecraft/client/Minecraft mainRenderTarget Lcom/mojang/blaze3d/pipeline/RenderTarget; + +# XR Camera accessible field net/minecraft/client/Camera initialized Z accessible field net/minecraft/client/Camera level Lnet/minecraft/world/level/BlockGetter; accessible field net/minecraft/client/Camera entity Lnet/minecraft/world/entity/Entity; accessible field net/minecraft/client/Camera xRot F accessible field net/minecraft/client/Camera yRot F -accessible field net/minecraft/client/Camera forwards Lcom/mojang/math/Vector3f; -accessible field net/minecraft/client/Camera up Lcom/mojang/math/Vector3f; -accessible field net/minecraft/client/Camera left Lcom/mojang/math/Vector3f; -accessible field net/minecraft/client/Camera rotation Lcom/mojang/math/Quaternion; -mutable field net/minecraft/client/Minecraft options Lnet/minecraft/client/Options; + +# to set reset camera before tick +accessible method net/minecraft/client/Camera setPosition (Lnet/minecraft/world/phys/Vec3;)V + +# for pausemenu buttons accessible method net/minecraft/client/Minecraft isMultiplayerServer ()Z -mutable field net/minecraft/client/gui/screens/Screen renderables Ljava/util/List; -accessible field net/minecraft/client/gui/screens/Screen renderables Ljava/util/List; -accessible class net/minecraft/client/gui/screens/Screen -mutable field com/mojang/blaze3d/pipeline/RenderTarget useDepth Z -accessible class com/mojang/blaze3d/pipeline/MainTarget$Dimension -accessible method com/mojang/blaze3d/pipeline/MainTarget$Dimension (II)V -accessible class net/minecraft/client/Options$FieldAccess + +# to add custom key mappings mutable field net/minecraft/client/Options keyMappings [Lnet/minecraft/client/KeyMapping; +# to add custom controls categories accessible field net/minecraft/client/KeyMapping CATEGORY_SORT_ORDER Ljava/util/Map; mutable field net/minecraft/client/KeyMapping CATEGORY_SORT_ORDER Ljava/util/Map; +# to check key inputs +accessible field net/minecraft/client/KeyMapping clickCount I +accessible method net/minecraft/client/KeyMapping release ()V +accessible field net/minecraft/client/KeyMapping key Lcom/mojang/blaze3d/platform/InputConstants$Key; +# to get the current blend state accessible field com/mojang/blaze3d/platform/GlStateManager BLEND Lcom/mojang/blaze3d/platform/GlStateManager$BlendState; accessible class com/mojang/blaze3d/platform/GlStateManager$BlendState -mutable field com/mojang/blaze3d/pipeline/MainTarget DEFAULT_WIDTH I -mutable field com/mojang/blaze3d/pipeline/MainTarget DEFAULT_HEIGHT I + +# to render vr hands accessible method net/minecraft/client/renderer/ItemInHandRenderer renderArmWithItem (Lnet/minecraft/client/player/AbstractClientPlayer;FFLnet/minecraft/world/InteractionHand;FLnet/minecraft/world/item/ItemStack;FLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V +# to create custom END shader +accessible method net/minecraft/client/renderer/RenderType create (Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;IZZLnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; + +# to disable destroy delay, on roomscale hitting accessible field net/minecraft/client/multiplayer/MultiPlayerGameMode destroyDelay I -accessible field net/minecraft/world/level/block/state/StateHolder propertiesCodec Lcom/mojang/serialization/MapCodec; -accessible field net/minecraft/client/KeyMapping isDown Z -accessible field net/minecraft/client/KeyMapping clickCount I -accessible method net/minecraft/client/KeyMapping release ()V -accessible field net/minecraft/client/KeyMapping key Lcom/mojang/blaze3d/platform/InputConstants$Key; +# needed to mixin into it +accessible class net/minecraft/world/entity/monster/EnderMan$EndermanFreezeWhenLookedAt +# for correct vr rendering accessible field net/minecraft/world/entity/Entity eyeHeight F -accessible field net/minecraft/world/level/block/state/StateHolder propertiesCodec Lcom/mojang/serialization/MapCodec; +# for matrix conversion +accessible field com/mojang/math/Matrix4f m00 F +accessible field com/mojang/math/Matrix4f m01 F +accessible field com/mojang/math/Matrix4f m02 F +accessible field com/mojang/math/Matrix4f m03 F +accessible field com/mojang/math/Matrix4f m10 F +accessible field com/mojang/math/Matrix4f m11 F +accessible field com/mojang/math/Matrix4f m12 F +accessible field com/mojang/math/Matrix4f m13 F +accessible field com/mojang/math/Matrix4f m20 F +accessible field com/mojang/math/Matrix4f m21 F +accessible field com/mojang/math/Matrix4f m22 F +accessible field com/mojang/math/Matrix4f m23 F +accessible field com/mojang/math/Matrix4f m30 F +accessible field com/mojang/math/Matrix4f m31 F +accessible field com/mojang/math/Matrix4f m32 F +accessible field com/mojang/math/Matrix4f m33 F +# for menuworlds accessible field net/minecraft/client/multiplayer/ClientLevel$ClientLevelData isFlat Z - -accessible field net/minecraft/world/level/biome/BiomeManager biomeZoomSeed J - accessible field net/minecraft/world/level/biome/BiomeManager biomeZoomSeed J - -accessible field net/minecraft/client/player/LocalPlayer xLast D -accessible field net/minecraft/client/player/LocalPlayer yLast1 D -accessible field net/minecraft/client/player/LocalPlayer zLast D -accessible field net/minecraft/client/player/LocalPlayer yRotLast F -accessible field net/minecraft/client/player/LocalPlayer xRotLast F -accessible field net/minecraft/client/player/LocalPlayer lastOnGround Z -accessible field net/minecraft/client/player/LocalPlayer wasShiftKeyDown Z -accessible field net/minecraft/client/player/LocalPlayer wasSprinting Z -accessible field net/minecraft/client/player/LocalPlayer positionReminder I - -accessible field net/minecraft/client/sounds/SoundManager soundEngine Lnet/minecraft/client/sounds/SoundEngine; - -accessible class net/minecraft/world/entity/monster/EnderMan$EndermanFreezeWhenLookedAt -accessible class net/minecraft/world/entity/monster/EnderMan$EndermanLookForPlayerGoal -accessible method net/minecraft/world/entity/monster/EnderMan isLookingAtMe (Lnet/minecraft/world/entity/player/Player;)Z - -accessible method net/minecraft/client/renderer/entity/player/PlayerRenderer setModelProperties (Lnet/minecraft/client/player/AbstractClientPlayer;)V \ No newline at end of file +accessible class net/minecraft/world/level/biome/Biome$ClimateSettings +accessible field net/minecraft/world/level/biome/AmbientParticleSettings probability F +accessible field net/minecraft/world/level/biome/Biome$ClimateSettings temperatureModifier Lnet/minecraft/world/level/biome/Biome$TemperatureModifier; +extendable class net/minecraft/world/level/material/FluidState +accessible field net/minecraft/world/level/block/state/StateHolder propertiesCodec Lcom/mojang/serialization/MapCodec; +accessible field net/minecraft/world/level/dimension/DimensionType ambientLight F +accessible field net/minecraft/world/level/dimension/DimensionType fixedTime Ljava/util/OptionalLong; \ No newline at end of file diff --git a/common/src/main/resources/vivecraft.fabric.sodium.mixins.json b/common/src/main/resources/vivecraft.fabric.sodium.mixins.json index 157c28d97..368808aa9 100644 --- a/common/src/main/resources/vivecraft.fabric.sodium.mixins.json +++ b/common/src/main/resources/vivecraft.fabric.sodium.mixins.json @@ -1,15 +1,10 @@ { "required": false, - "package": "org.vivecraft.modCompatMixin.sodiumMixin", - "plugin": "org.vivecraft.VRMixinConfig", + "package": "org.vivecraft.mod_compat_vr.sodium.mixin", + "plugin": "org.vivecraft.MixinConfig", "compatibilityLevel": "JAVA_17", - "mixins": [ - "FabricSodiumGameOptionPagesVRMixin" - ], "client": [ - - ], - "server": [ + "FabricSodiumGameOptionPagesVRMixin" ], "minVersion": "0.8.4" } \ No newline at end of file diff --git a/common/src/main/resources/vivecraft.forge.sodium.mixins.json b/common/src/main/resources/vivecraft.forge.sodium.mixins.json index 4d424cdb6..e1f83b194 100644 --- a/common/src/main/resources/vivecraft.forge.sodium.mixins.json +++ b/common/src/main/resources/vivecraft.forge.sodium.mixins.json @@ -1,15 +1,10 @@ { "required": false, - "package": "org.vivecraft.modCompatMixin.sodiumMixin", - "plugin": "org.vivecraft.VRMixinConfig", + "package": "org.vivecraft.mod_compat_vr.sodium.mixin", + "plugin": "org.vivecraft.MixinConfig", "compatibilityLevel": "JAVA_17", - "mixins": [ - "ForgeSodiumGameOptionPagesVRMixin" - ], "client": [ - - ], - "server": [ + "ForgeSodiumGameOptionPagesVRMixin" ], "minVersion": "0.8.4" } \ No newline at end of file diff --git a/common/src/main/resources/vivecraft.iris.mixins.json b/common/src/main/resources/vivecraft.iris.mixins.json index 2bb22e877..39e563189 100644 --- a/common/src/main/resources/vivecraft.iris.mixins.json +++ b/common/src/main/resources/vivecraft.iris.mixins.json @@ -1,22 +1,23 @@ { "required": false, - "package": "org.vivecraft.modCompatMixin.irisMixin", - "plugin": "org.vivecraft.VRMixinConfig", + "package": "org.vivecraft.mod_compat_vr.iris.mixin", + "plugin": "org.vivecraft.MixinConfig", "compatibilityLevel": "JAVA_17", - "mixins": [ + "client": [ + "IrisBeginFrameHack", "IrisChunkProgramOverridesMixin", + "IrisChunkProgramOverridesMixinSodium_0_4_8", + "IrisChunkProgramOverridesMixinSodium_0_4_9", + "IrisChunkProgramOverridesMixinSodium_0_4_11", "IrisHandRendererVRMixin", "IrisNewWorldRenderingPipelineVRMixin", - "IrisBeginFrameHack", - "IrisShadowMatricesMixin", - "IrisShadowRendererMixin", "IrisPipelineManagerVRMixin", - "IrisProgramUniformsMixin" - ], - "client": [ - - ], - "server": [ + "IrisProgramUniformsMixin", + "IrisRenderSystemVRMixin", + "IrisShadowMatricesMixin", + "IrisShadowRendererMixin" ], - "minVersion": "0.8.4" + "minVersion": "0.8.4", + "mixins": [ + ] } \ No newline at end of file diff --git a/common/src/main/resources/vivecraft.mixins.json b/common/src/main/resources/vivecraft.mixins.json new file mode 100644 index 000000000..b065fa120 --- /dev/null +++ b/common/src/main/resources/vivecraft.mixins.json @@ -0,0 +1,88 @@ +{ + "required": true, + "package": "org.vivecraft.mixin", + "plugin": "org.vivecraft.MixinConfig", + "compatibilityLevel": "JAVA_17", + "client": [ + "client.blaze3d.RenderSystemAccessor", + "client.blaze3d.RenderTargetMixin", + "client.gui.screens.ScreenMixin", + "client.gui.screens.TitleScreenMixin", + "client.main.MainMixin", + "client.player.AbstractClientPlayerMixin", + "client.renderer.block.LiquidBlockRendererMixin", + "client.renderer.entity.EntityRenderDispatcherMixin", + "client.renderer.entity.PlayerRendererMixin", + "client.renderer.entity.layers.RenderLayerMixin", + "client_vr.ClientBrandRetrieverVRMixin", + "client_vr.KeyboardHandlerVRMixin", + "client_vr.KeyboardInputVRMixin", + "client_vr.MinecraftVRMixin", + "client_vr.MouseHandlerVRMixin", + "client_vr.OptionsVRMixin", + "client_vr.blaze3d.audio.LibraryVRMixin", + "client_vr.blaze3d.platform.GlStateManagerVRMixin", + "client_vr.blaze3d.platform.InputConstantsVRMixin", + "client_vr.blaze3d.platform.WindowVRMixin", + "client_vr.blaze3d.systems.RenderSystemVRMixin", + "client_vr.gui.EditBoxVRMixin", + "client_vr.gui.GuiComponentVRMixin", + "client_vr.gui.GuiVRMixin", + "client_vr.gui.TutorialToastVRMixin", + "client_vr.gui.screens.OptionsScreenVRMixin", + "client_vr.gui.screens.PauseScreenVRMixin", + "client_vr.gui.screens.ScreenVRMixin", + "client_vr.gui.screens.SoundOptionsScreenVRMixin", + "client_vr.gui.screens.WinScreenVRMixin", + "client_vr.gui.screens.inventory.AbstractContainerScreenVRMixin", + "client_vr.gui.screens.inventory.SignEditScreenVRMixin", + "client_vr.gui.screens.inventory.BookEditScreenVRMixin", + "client_vr.gui.screens.inventory.CreativeModeInventoryScreenVRMixin", + "client_vr.multiplayer.ClientPacketListenerVRMixin", + "client_vr.multiplayer.MultiPlayerGameModeVRMixin", + "client_vr.particle.ItemPickupParticleVRMixin", + "client_vr.player.LocalPlayerVRMixin", + "client_vr.renderer.GameRendererVRMixin", + "client_vr.renderer.ItemInHandRendererVRMixin", + "client_vr.renderer.LevelRendererVRMixin", + "client_vr.renderer.NoSodiumLevelRendererVRMixin", + "client_vr.renderer.PostChainVRMixin", + "client_vr.renderer.blockentity.TheEndGatewayRendererVRMixin", + "client_vr.renderer.blockentity.TheEndPortalRendererVRMixin", + "client_vr.renderer.entity.EntityRenderDispatcherVRMixin", + "client_vr.renderer.entity.EntityRendererVRMixin", + "client_vr.renderer.entity.FishingHookRendererVRMixin", + "client_vr.renderer.entity.GuardianRendererVRMixin", + "client_vr.renderer.entity.MobRendererVRMixin", + "client_vr.tutorial.MovementTutorialStepInstanceVRMixin", + "client_vr.tutorial.OpenInventoryTutorialStepVRMixin", + "client_vr.tutorial.PunchTreeTutorialStepInstanceVRMixin", + "client_vr.world.BoatMixin", + "client_vr.world.FishingHookVRMixin", + "client_vr.world.ItemVRMixin", + "client_vr.world.PotionItemVRMixin", + "client_vr.world.entity.projectile.FireworkRocketEntityVRMixin", + "client_vr.world.entity.player.PlayerVRMixin", + "client_vr.world.level.biome.BiomeAccessor" + ], + "minVersion": "0.8.4", + "mixins": [ + "server.ChunkMapAccessor", + "server.MinecraftServerMixin", + "server.ServerGamePacketListenerImplMixin", + "server.ServerLoginPacketListenerImplMixin", + "server.ServerPlayerMixin", + "server.TrackedEntityAccessor", + "world.entity.ai.goal.SwellGoalMixin", + "world.entity.monster.EndermanFreezeWhenLookedAtMixin", + "world.entity.monster.EndermanMixin", + "world.entity.projectile.AbstractArrowMixin", + "world.entity.projectile.AbstractHurtingProjectileMixin", + "world.entity.projectile.FishingHookMixin", + "world.entity.projectile.ProjectileMixin", + "world.entity.projectile.ThrowableProjectileMixin", + "world.entity.projectile.ThrownTridentMixin", + "world.item.CrossbowItemMixin", + "world.item.crafting.ShapedRecipeMixin" + ] +} \ No newline at end of file diff --git a/common/src/main/resources/vivecraft.nonvr.mixins.json b/common/src/main/resources/vivecraft.nonvr.mixins.json deleted file mode 100644 index c621a184b..000000000 --- a/common/src/main/resources/vivecraft.nonvr.mixins.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "required": true, - "package": "org.vivecraft.mixin", - "plugin": "org.vivecraft.NonVRMixinConfig", - "compatibilityLevel": "JAVA_17", - "mixins": [ - "server.level.ServerPlayerMixin", - "server.network.ServerGamePacketListenerImplMixin", - "world.entity.projectile.AbstractArrowMixin", - "world.entity.projectile.AbstractHurtingProjectileMixin", - "world.entity.projectile.FishingHookMixin", - "world.entity.projectile.ProjectileMixin", - "world.entity.projectile.ThrowableProjectileMixin", - "world.entity.projectile.ThrownTridentMixin", - - "world.entity.ai.goal.SwellGoalMixin", - "world.entity.monster.EndermanMixin", - "world.entity.monster.EndermanFreezeWhenLookedAtMixin", - - "world.item.CrossbowItemMixin", - "world.item.crafting.ShapedRecipeMixin" - ], - "client": [ - "blaze3d.pipeline.MainTargetMixin", - "blaze3d.pipeline.RenderTargetMixin", - "blaze3d.systems.RenderSystemAccessor", - "client.gui.screens.TitleScreenMixin", - "client.MinecraftMixin", - "client.main.MainMixin", - "client.multiplayer.ClientPacketListenerMixin", - "client.player.AbstractClientPlayerMixin", - "client.renderer.block.LiquidBlockRendererMixin", - "client.renderer.entity.EntityRenderDispatcherMixin" - - ], - "server": [ - ], - "minVersion": "0.8.4" -} \ No newline at end of file diff --git a/common/src/main/resources/vivecraft.optifine.mixins.json b/common/src/main/resources/vivecraft.optifine.mixins.json new file mode 100644 index 000000000..0af0e2b38 --- /dev/null +++ b/common/src/main/resources/vivecraft.optifine.mixins.json @@ -0,0 +1,13 @@ +{ + "required": true, + "package": "org.vivecraft.mod_compat_vr.optifine.mixin", + "plugin": "org.vivecraft.MixinConfig", + "compatibilityLevel": "JAVA_17", + "client": [ + "ShadersRenderVRMixin", + "ShadersVRMixin" + ], + "minVersion": "0.8.4", + "mixins": [ + ] +} \ No newline at end of file diff --git a/common/src/main/resources/vivecraft.physicsmod.mixins.json b/common/src/main/resources/vivecraft.physicsmod.mixins.json new file mode 100644 index 000000000..dbab8af5e --- /dev/null +++ b/common/src/main/resources/vivecraft.physicsmod.mixins.json @@ -0,0 +1,10 @@ +{ + "required": false, + "package": "org.vivecraft.mod_compat_vr.physicsmod.mixin", + "plugin": "org.vivecraft.MixinConfig", + "compatibilityLevel": "JAVA_17", + "client": [ + "OptionsScreenMixin" + ], + "minVersion": "0.8.4" +} \ No newline at end of file diff --git a/common/src/main/resources/vivecraft.rei.mixins.json b/common/src/main/resources/vivecraft.rei.mixins.json index 243e3999c..e2ce9c02e 100644 --- a/common/src/main/resources/vivecraft.rei.mixins.json +++ b/common/src/main/resources/vivecraft.rei.mixins.json @@ -1,15 +1,10 @@ { "required": false, - "package": "org.vivecraft.modCompatMixin.reiMixin", - "plugin": "org.vivecraft.VRMixinConfig", + "package": "org.vivecraft.mod_compat_vr.rei.mixin", + "plugin": "org.vivecraft.MixinConfig", "compatibilityLevel": "JAVA_17", - "mixins": [ - "reiTextFieldWidgetMixin" - ], "client": [ - - ], - "server": [ + "reiTextFieldWidgetMixin" ], "minVersion": "0.8.4" } \ No newline at end of file diff --git a/common/src/main/resources/vivecraft.sodium.mixins.json b/common/src/main/resources/vivecraft.sodium.mixins.json index 7c9d3e0b3..0867e5f51 100644 --- a/common/src/main/resources/vivecraft.sodium.mixins.json +++ b/common/src/main/resources/vivecraft.sodium.mixins.json @@ -1,15 +1,11 @@ { "required": false, - "package": "org.vivecraft.modCompatMixin.sodiumMixin", - "plugin": "org.vivecraft.VRMixinConfig", + "package": "org.vivecraft.mod_compat_vr.sodium.mixin", + "plugin": "org.vivecraft.MixinConfig", "compatibilityLevel": "JAVA_17", - "mixins": [ - "SodiumWorldRendererVRMixin" - ], "client": [ - - ], - "server": [ + "RenderSectionManagerVRMixin", + "SodiumWorldRendererVRMixin" ], "minVersion": "0.8.4" } \ No newline at end of file diff --git a/common/src/main/resources/vivecraft.vr.mixins.json b/common/src/main/resources/vivecraft.vr.mixins.json deleted file mode 100644 index 3c0857001..000000000 --- a/common/src/main/resources/vivecraft.vr.mixins.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "required": true, - "package": "org.vivecraft.mixin", - "plugin": "org.vivecraft.VRMixinConfig", - "compatibilityLevel": "JAVA_17", - "mixins": [ - "server.network.ServerGamePacketListnerImplVRMixin", - "server.packs.repository.PackRepositoryVRMixin" - ], - "client": [ - "blaze3d.pipeline.RenderTargetVRMixin", - "blaze3d.pipeline.MainTargetVRMixin", - "blaze3d.audio.LibraryVRMixin", - "blaze3d.platform.InputConstantsVRMixin", - "blaze3d.platform.WindowVRMixin", - "blaze3d.platform.GlStateManagerVRMixin", - "blaze3d.systems.RenderSystemVRMixin", - "blaze3d.systems.RenderSystemAccessor", - "client.KeyboardHandlerVRMixin", - "client.MinecraftVRMixin", - "client.MouseHandlerVRMixin", - "client.OptionsVRMixin", - "client.OptionVRMixin", - "client.gui.GuiVRMixin", - "client.gui.GuiComponentVRMixin", - "client.gui.NoSodiumGuiVRMixin", - "client.gui.components.EditBoxVRMixin", - "client.gui.screens.ScreenVRMixin", - "client.gui.screens.PauseScreenVRMixin", - "client.gui.screens.inventory.CreativeModeInventoryScreenVRMixin", - "client.gui.screens.inventory.AbstractContainerScreenVRMixin", - "client.gui.screens.inventory.BookEditScreenVRMixin", - "client.gui.screens.inventory.SignEditScreenVRMixin", - "client.gui.screens.OptionsScreenVRMixin", - "client.gui.screens.SoundOptionsScreenVRMixin", - "client.multiplayer.ClientPacketListenerVRMixin", - "client.multiplayer.MultiPlayerGameModeVRMixin", - "client.particle.ItemPickupParticleVRMixin", - "client.player.LocalPlayerVRMixin", - "client.renderer.GameRendererVRMixin", - "client.renderer.LevelRendererVRMixin", - "client.renderer.ItemInHandRendererVRMixin", - "client.renderer.entity.EntityRenderDispatcherVRMixin", - "client.renderer.entity.EntityRendererVRMixin", - "client.renderer.entity.FishingHookRendererVRMixin", - "client.renderer.entity.GuardianRendererVRMixin", - "client.renderer.entity.MobRendererVRMixin", - "client.renderer.NoSodiumLevelRendererVRMixin", - "client.renderer.PostChainVRMixin", - - "world.entity.vehicle.BoatMixin", - "world.item.ItemVRMixin", - "world.item.PotionItemVRMixin" - ], - "server": [ - ], - "minVersion": "0.8.4" -} \ No newline at end of file diff --git a/fabric/build.gradle b/fabric/build.gradle index 60fd169bf..a7a2a89cc 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -26,50 +26,53 @@ dependencies { common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } + modApi("dev.architectury:architectury-fabric:${rootProject.architectury_version}") + + // for sodium compat modRuntimeOnly "maven.modrinth:sodium:mc1.18.2-0.4.1" - modRuntimeOnly "maven.modrinth:iris:1.18.x-v1.3.1" - //modRuntimeOnly "maven.modrinth:indium:1.0.7+mc1.18.2" - //modRuntimeOnly "maven.modrinth:create-fabric:1.18.2-0.5.0d-728" - modRuntimeOnly "maven.modrinth:roughly-enough-items:8.3.529+fabric" - - -// modRuntimeOnly("io.github.fabricators_of_create:Porting-Lib:1.2.460-beta+1.18.2-dev.cca931b") //temp create -// modRuntimeOnly("me.alphamode:ForgeTags:2.1") //temp create -// modRuntimeOnly("com.electronwill.night-config:core:3.6.3") //temp create -// modRuntimeOnly("com.electronwill.night-config:toml:3.6.3") //temp create -// modRuntimeOnly("curse.maven:forge-config-api-port-fabric-547434:3671141") //temp create -// modRuntimeOnly("com.tterrag.registrate_fabric:Registrate:MC1.18.2-1.1.4") //temp create -// modRuntimeOnly("com.jozufozu.flywheel:flywheel-fabric-1.18.2:0.6.4-30") //temp create -// modRuntimeOnly("com.jamieswhiteshirt:reach-entity-attributes:2.1.1") //temp create -// modRuntimeOnly("dev.cafeteria:fake-player-api:0.3.0") //temp create -// modRuntimeOnly("io.github.tropheusj:milk-lib:0.3.2") //temp create -// modRuntimeOnly("me.luligabi:NoIndium:1.0.1+1.18.2") //temp create -// runtimeOnly("com.google.code.findbugs:jsr305:3.0.2") //temp create -// modRuntimeOnly("com.github.AlphaMode:fakeconfig:master-SNAPSHOT") { exclude(group: "net.fabricmc.fabric-api") } -// modRuntimeOnly("com.github.AlphaMode:fakeconfigtoml:master-SNAPSHOT") { exclude(group: "net.fabricmc.fabric-api") } - -// modRuntimeOnly("com.github.qouteall:GravityChanger:v0.3.1") { transitive = false } //temp immersiveportals -// modApi("com.github.Virtuoel:Pehkui:3.3.3", { exclude group: "net.fabricmc.fabric-api" }) //temp immersiveportals -// modRuntimeOnly ('com.github.qouteall.ImmersivePortalsMod:imm_ptl_core:v1.4.9-1.18'){ //temp immersiveportals -// exclude(group: "net.fabricmc.fabric-api") -// transitive(false) -// } -// modRuntimeOnly ('com.github.qouteall.ImmersivePortalsMod:q_misc_util:v1.4.9-1.18'){ //temp immersiveportals -// exclude(group: "net.fabricmc.fabric-api") -// transitive(false) -// } + modRuntimeOnly 'org.joml:joml:1.10.2' //temp sodium + + // for iris compat + modRuntimeOnly "maven.modrinth:iris:1.6.5+1.18.2" + modRuntimeOnly 'org.anarres:jcpp:1.4.14' //temp iris + modRuntimeOnly 'io.github.douira:glsl-transformer:2.0.0-pre13' //temp iris + + // for REI compat + modRuntimeOnly "me.shedaniel:RoughlyEnoughItems-fabric:8.3.618" + + // for Pehkui compat + modRuntimeOnly("com.github.Virtuoel:Pehkui:3.7.7", { exclude group: "net.fabricmc.fabric-api" }) + // other mods + // modRuntimeOnly("com.simibubi.create:create-fabric-1.18.2:0.5.0.i-1016+1.18.2") + modRuntimeOnly "maven.modrinth:lithium:mc1.18.2-0.10.3" + modRuntimeOnly "maven.modrinth:indium:1.0.7+mc1.18.2" + + /* + // for immersive portals compat + modRuntimeOnly ('com.github.qouteall.ImmersivePortalsMod:imm_ptl_core:v1.4.11-1.18'){ //temp immersiveportals + exclude(group: "net.fabricmc.fabric-api") + transitive(false) + } + modRuntimeOnly ('com.github.qouteall.ImmersivePortalsMod:q_misc_util:v1.4.11-1.18'){ //temp immersiveportals + exclude(group: "net.fabricmc.fabric-api") + transitive(false) + } + */ // needed for resource loading include(modImplementation(fabricApi.module("fabric-resource-loader-v0", rootProject.fabric_api_version))) + // commands also needs base + include(modImplementation(fabricApi.module("fabric-api-base", rootProject.fabric_api_version))) + include(modImplementation(fabricApi.module("fabric-command-api-v1", rootProject.fabric_api_version))) + + include(implementation('com.electronwill.night-config:toml:3.6.6')) + include(implementation('com.electronwill.night-config:core:3.6.6')) -// include("org.lwjgl:lwjgl-ovr:3.2.2:natives-windows") -// include("org.lwjgl:lwjgl-opengl:3.2.2:natives-windows") -// include("org.lwjgl:lwjgl-jemalloc:3.2.2:natives-windows") -// include("org.lwjgl:lwjgl:3.2.2:natives-windows") -// include("org.lwjgl:lwjgl-glfw:3.2.2:natives-windows") -// include("org.lwjgl:lwjgl-stb:3.2.2:natives-windows") -// include("org.lwjgl:lwjgl-openal:3.2.2:natives-windows") + include(implementation("org.lwjgl:lwjgl-openvr:3.2.2")) + include(implementation("org.lwjgl:lwjgl-openvr:3.2.2:natives-linux")) + include(implementation("org.lwjgl:lwjgl-openvr:3.2.2:natives-macos")) + include(implementation("org.lwjgl:lwjgl-openvr:3.2.2:natives-windows")) } diff --git a/fabric/src/main/java/org/vivecraft/VivecraftEarlyEntryForOptifabric.java b/fabric/src/main/java/org/vivecraft/VivecraftEarlyEntryForOptifabric.java new file mode 100644 index 000000000..ca87cc820 --- /dev/null +++ b/fabric/src/main/java/org/vivecraft/VivecraftEarlyEntryForOptifabric.java @@ -0,0 +1,12 @@ +package org.vivecraft; + +import org.spongepowered.asm.mixin.Mixins; + +public class VivecraftEarlyEntryForOptifabric implements Runnable { + + // add the mixins here, because optifabric loads the optifine classes late + @Override + public void run() { + Mixins.addConfiguration("vivecraft.optifine.mixins.json"); + } +} diff --git a/fabric/src/main/java/org/vivecraft/client/fabric/XeventsImpl.java b/fabric/src/main/java/org/vivecraft/client/fabric/XeventsImpl.java new file mode 100644 index 000000000..fcfd70d16 --- /dev/null +++ b/fabric/src/main/java/org/vivecraft/client/fabric/XeventsImpl.java @@ -0,0 +1,30 @@ +package org.vivecraft.client.fabric; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.block.state.BlockState; + +public class XeventsImpl { + + public static boolean renderBlockOverlay(Player player, PoseStack mat, BlockState state, BlockPos pos) { + return false; + } + + public static boolean renderWaterOverlay(Player player, PoseStack mat) { + return false; + } + + public static boolean renderFireOverlay(Player player, PoseStack mat) { + return false; + } + + public static void onRenderTickStart(float f) { + + } + + public static void onRenderTickEnd(float f) { + + } + +} diff --git a/fabric/src/main/java/org/vivecraft/client/fabric/XplatImpl.java b/fabric/src/main/java/org/vivecraft/client/fabric/XplatImpl.java new file mode 100644 index 000000000..897ec36bb --- /dev/null +++ b/fabric/src/main/java/org/vivecraft/client/fabric/XplatImpl.java @@ -0,0 +1,96 @@ +package org.vivecraft.client.fabric; + +import com.mojang.blaze3d.pipeline.RenderTarget; +import net.fabricmc.api.EnvType; +import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandlerRegistry; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.resources.model.ModelBakery; +import net.minecraft.core.BlockPos; +import net.minecraft.tags.FluidTags; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeSpecialEffects; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.material.FluidState; +import org.vivecraft.mixin.client_vr.world.level.biome.BiomeAccessor; + +import java.nio.file.Path; + +public class XplatImpl { + + public static boolean isModLoaded(String name) { + return FabricLoader.getInstance().isModLoaded(name); + } + + public static Path getConfigPath(String fileName) { + return FabricLoader.getInstance().getConfigDir().resolve(fileName); + } + public static boolean isDedicatedServer() { + return FabricLoader.getInstance().getEnvironmentType().equals(EnvType.SERVER); + } + + public static String getModloader() { + return "fabric"; + } + + public static String getModVersion() { + if (isModLoadedSuccess()) { + return FabricLoader.getInstance().getModContainer("vivecraft").get().getMetadata().getVersion().getFriendlyString(); + } + return "no version"; + } + + public static boolean isModLoadedSuccess() { + return FabricLoader.getInstance().isModLoaded("vivecraft"); + } + + public static boolean enableRenderTargetStencil(RenderTarget renderTarget) { + return false; + } + + public static Path getJarPath() { + return FabricLoader.getInstance().getModContainer("vivecraft").get().getRootPaths().get(0); + } + + public static String getUseMethodName() { + return FabricLoader.getInstance().getMappingResolver().mapMethodName( + "intermediary", + "net.minecraft.class_4970", "method_9534", + "(Lnet/minecraft/class_2680;"+ + "Lnet/minecraft/class_1937;"+ + "Lnet/minecraft/class_2338;"+ + "Lnet/minecraft/class_1657;"+ + "Lnet/minecraft/class_1268;"+ + "Lnet/minecraft/class_3965;)"+ + "Lnet/minecraft/class_1269;"); + } + + public static TextureAtlasSprite[] getFluidTextures(BlockAndTintGetter level, BlockPos pos, FluidState fluidStateIn){ + if (isModLoaded("fabric-rendering-fluids-v1")) { + return FluidRenderHandlerRegistry.INSTANCE.get(fluidStateIn.getType()).getFluidSprites(level, pos, fluidStateIn); + } else { + // return vanilla textures + if (fluidStateIn.is(FluidTags.LAVA)) { + return new TextureAtlasSprite[]{ + Minecraft.getInstance().getModelManager().getBlockModelShaper().getBlockModel(Blocks.LAVA.defaultBlockState()).getParticleIcon(), + ModelBakery.LAVA_FLOW.sprite() + }; + } else { + return new TextureAtlasSprite[]{ + Minecraft.getInstance().getModelManager().getBlockModelShaper().getBlockModel(Blocks.WATER.defaultBlockState()).getParticleIcon(), + ModelBakery.WATER_FLOW.sprite() + }; + } + } + } + + public static Biome.ClimateSettings getBiomeClimateSettings(Biome biome){ + return ((BiomeAccessor)(Object)biome).getClimateSettings(); + } + + public static BiomeSpecialEffects getBiomeEffects(Biome biome){ + return biome.getSpecialEffects(); + } +} diff --git a/fabric/src/main/java/org/vivecraft/fabric/VivecraftMod.java b/fabric/src/main/java/org/vivecraft/fabric/VivecraftMod.java new file mode 100644 index 000000000..d421e77e9 --- /dev/null +++ b/fabric/src/main/java/org/vivecraft/fabric/VivecraftMod.java @@ -0,0 +1,18 @@ +package org.vivecraft.fabric; + +import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback; +import org.vivecraft.server.config.ServerConfig; +import org.vivecraft.server.ServerUtil; + +public class VivecraftMod implements ModInitializer { + @Override + public void onInitialize() { + // init server config + ServerConfig.init(null); + + // add server config commands + CommandRegistrationCallback.EVENT.register((dispatcher, dedicated) -> + ServerUtil.registerCommands(dispatcher)); + } +} diff --git a/fabric/src/main/java/org/vivecraft/fabric/XeventsImpl.java b/fabric/src/main/java/org/vivecraft/fabric/XeventsImpl.java deleted file mode 100644 index 267fae956..000000000 --- a/fabric/src/main/java/org/vivecraft/fabric/XeventsImpl.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.vivecraft.fabric; - -import com.mojang.blaze3d.vertex.PoseStack; -import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.block.state.BlockState; -import org.vivecraft.Xplat; - -public class XeventsImpl { - - public static boolean renderBlockOverlay(Player player, PoseStack mat, BlockState state, BlockPos pos) { - return false; - } - - public static boolean renderWaterOverlay(Player player, PoseStack mat) { - return false; - } - - public static boolean renderFireOverlay(Player player, PoseStack mat) { - return false; - } - - public static void onRenderTickStart(float f) { - - } - - public static void onRenderTickEnd(float f) { - - } - - public static void drawScreen(Screen screen, PoseStack poseStack, int mouseX, int mouseY, float partialTick) { - if (Xplat.isModLoaded("fabric")){ - ScreenEvents.beforeRender(screen).invoker().beforeRender(screen, poseStack, mouseX, mouseY, partialTick); - } - screen.render(poseStack, mouseX, mouseY, partialTick); - if (Xplat.isModLoaded("fabric")){ - ScreenEvents.afterRender(screen).invoker().afterRender(screen, poseStack, mouseX, mouseY, partialTick); - } - } -} diff --git a/fabric/src/main/java/org/vivecraft/fabric/XplatImpl.java b/fabric/src/main/java/org/vivecraft/fabric/XplatImpl.java deleted file mode 100644 index e86d4e94f..000000000 --- a/fabric/src/main/java/org/vivecraft/fabric/XplatImpl.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.vivecraft.fabric; - -import com.mojang.blaze3d.pipeline.RenderTarget; -import net.fabricmc.api.EnvType; -import net.fabricmc.loader.api.FabricLoader; - -import java.nio.file.Path; - -public class XplatImpl { - - public static boolean isModLoaded(String name) { - return FabricLoader.getInstance().isModLoaded(name); - } - - public static Path getConfigPath(String fileName) { - return FabricLoader.getInstance().getConfigDir().resolve(fileName); - } - public static boolean isDedicatedServer() { - return FabricLoader.getInstance().getEnvironmentType().equals(EnvType.SERVER); - } - - public static String getModloader() { - return "fabric"; - } - - public static String getModVersion() { - if (isModLoadedSuccess()) { - return FabricLoader.getInstance().getModContainer("vivecraft").get().getMetadata().getVersion().getFriendlyString(); - } - return "no version"; - } - - public static boolean isModLoadedSuccess() { - return FabricLoader.getInstance().isModLoaded("vivecraft"); - } - - public static boolean enableRenderTargetStencil(RenderTarget renderTarget) { - return false; - } -} diff --git a/fabric/src/main/java/org/vivecraft/fabric/mixin/FabricGameRendererVRMixin.java b/fabric/src/main/java/org/vivecraft/fabric/mixin/FabricGameRendererVRMixin.java index 60e00237f..217be81d1 100644 --- a/fabric/src/main/java/org/vivecraft/fabric/mixin/FabricGameRendererVRMixin.java +++ b/fabric/src/main/java/org/vivecraft/fabric/mixin/FabricGameRendererVRMixin.java @@ -1,28 +1,39 @@ package org.vivecraft.fabric.mixin; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Matrix3f; -import com.mojang.math.Matrix4f; import com.mojang.math.Quaternion; import net.minecraft.client.renderer.GameRenderer; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.extensions.GameRendererExtension; -import org.vivecraft.render.RenderPass; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.extensions.GameRendererExtension; +import org.vivecraft.client_xr.render_pass.RenderPassType; @Mixin(GameRenderer.class) public class FabricGameRendererVRMixin { @Redirect(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;mulPose(Lcom/mojang/math/Quaternion;)V ", ordinal = 2), method = "renderLevel(FJLcom/mojang/blaze3d/vertex/PoseStack;)V") public void removeMulposeX(PoseStack s, Quaternion quaternion) { - return; + if (RenderPassType.isVanilla()) { + s.mulPose(quaternion); + } } @Redirect(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;mulPose(Lcom/mojang/math/Quaternion;)V ", ordinal = 3), method = "renderLevel(FJLcom/mojang/blaze3d/vertex/PoseStack;)V") public void removeMulposeY(PoseStack s, Quaternion quaternion) { - ((GameRendererExtension)this).applyVRModelView(ClientDataHolder.getInstance().currentPass, s); + if (RenderPassType.isVanilla()) { + s.mulPose(quaternion); + } else { + ((GameRendererExtension) this).applyVRModelView(ClientDataHolderVR.getInstance().currentPass, s); + } + } + + //optifabric only + @Redirect(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;mulPose(Lcom/mojang/math/Quaternion;)V", ordinal = 4), method = "renderLevel(FJLcom/mojang/blaze3d/vertex/PoseStack;)V", expect = 0) + public void removeMulposeY2(PoseStack s, Quaternion quaternion) { + if (RenderPassType.isVanilla()) { + s.mulPose(quaternion); + } } } diff --git a/fabric/src/main/java/org/vivecraft/fabric/mixin/client/resources/model/FabricModelBakeryMixin.java b/fabric/src/main/java/org/vivecraft/fabric/mixin/client/resources/model/FabricModelBakeryMixin.java index 01ee90d3f..36faad3bd 100644 --- a/fabric/src/main/java/org/vivecraft/fabric/mixin/client/resources/model/FabricModelBakeryMixin.java +++ b/fabric/src/main/java/org/vivecraft/fabric/mixin/client/resources/model/FabricModelBakeryMixin.java @@ -10,9 +10,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.gameplay.trackers.CameraTracker; -import org.vivecraft.gameplay.trackers.TelescopeTracker; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.gameplay.trackers.CameraTracker; +import org.vivecraft.client_vr.gameplay.trackers.TelescopeTracker; @Mixin(ModelBakery.class) public abstract class FabricModelBakeryMixin { @@ -21,8 +21,8 @@ public abstract class FabricModelBakeryMixin { @Inject(method = "", at = @At(value = "CONSTANT", args = "stringValue=textures")) private void loadModels(ResourceManager resourceManager, BlockColors blockColors, ProfilerFiller profilerFiller, int i, CallbackInfo ci) { this.loadTopLevel(TelescopeTracker.scopeModel); - this.loadTopLevel(ClientDataHolder.thirdPersonCameraModel); - this.loadTopLevel(ClientDataHolder.thirdPersonCameraDisplayModel); + this.loadTopLevel(ClientDataHolderVR.thirdPersonCameraModel); + this.loadTopLevel(ClientDataHolderVR.thirdPersonCameraDisplayModel); this.loadTopLevel(CameraTracker.cameraModel); this.loadTopLevel(CameraTracker.cameraDisplayModel); } diff --git a/fabric/src/main/java/org/vivecraft/fabric/mixin/screenhandler/client/FabricClientNetworkingVRMixin.java b/fabric/src/main/java/org/vivecraft/fabric/mixin/screenhandler/client/FabricClientNetworkingVRMixin.java new file mode 100644 index 000000000..5b23ee65d --- /dev/null +++ b/fabric/src/main/java/org/vivecraft/fabric/mixin/screenhandler/client/FabricClientNetworkingVRMixin.java @@ -0,0 +1,19 @@ +package org.vivecraft.fabric.mixin.screenhandler.client; + +import net.fabricmc.fabric.impl.screenhandler.client.ClientNetworking; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.client_vr.gameplay.screenhandlers.GuiHandler; + +@Mixin(ClientNetworking.class) +public class FabricClientNetworkingVRMixin { + @Inject(at = @At("HEAD"), method = "openScreen") + private void markScreenActiveForge(ResourceLocation typeId, int syncId, Component title, FriendlyByteBuf buf, CallbackInfo ci) { + GuiHandler.guiAppearOverBlockActive = true; + } +} diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 90e52a2a6..10f1a1a77 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -17,19 +17,26 @@ "license": "LGPLv3", "environment": "*", + "entrypoints": { + "mm:early_risers": [ + "org.vivecraft.VivecraftEarlyEntryForOptifabric" + ], + "main": [ + "org.vivecraft.fabric.VivecraftMod" + ] + }, "mixins": [ - "vivecraft.vr.mixins.json", - "vivecraft.nonvr.mixins.json", + "vivecraft.mixins.json", "vivecraft.sodium.mixins.json", "vivecraft.fabric.sodium.mixins.json", "vivecraft.iris.mixins.json", + "vivecraft.physicsmod.mixins.json", "vivecraft.rei.mixins.json", - "vivecraft.nonvr.fabric.mixins.json", - "vivecraft.vr.fabric.mixins.json" + "vivecraft.fabric.mixins.json" ], "depends": { "fabricloader": ">=0.11.3", - "minecraft": "1.18.x", + "minecraft": "1.18.2", "java": ">=17" }, "suggests": { diff --git a/fabric/src/main/resources/vivecraft.fabric.mixins.json b/fabric/src/main/resources/vivecraft.fabric.mixins.json new file mode 100644 index 000000000..39c37ce53 --- /dev/null +++ b/fabric/src/main/resources/vivecraft.fabric.mixins.json @@ -0,0 +1,12 @@ +{ + "required": true, + "package": "org.vivecraft.fabric.mixin", + "plugin": "org.vivecraft.MixinConfig", + "compatibilityLevel": "JAVA_17", + "client": [ + "FabricGameRendererVRMixin", + "client.resources.model.FabricModelBakeryMixin", + "screenhandler.client.FabricClientNetworkingVRMixin" + ], + "minVersion": "0.8.4" +} \ No newline at end of file diff --git a/fabric/src/main/resources/vivecraft.nonvr.fabric.mixins.json b/fabric/src/main/resources/vivecraft.nonvr.fabric.mixins.json deleted file mode 100644 index 1f8527898..000000000 --- a/fabric/src/main/resources/vivecraft.nonvr.fabric.mixins.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "required": true, - "package": "org.vivecraft.fabric.mixin", - "plugin": "org.vivecraft.NonVRMixinConfig", - "compatibilityLevel": "JAVA_17", - "mixins": [ - - ], - "client": [ - "client.resources.model.FabricModelBakeryMixin" - ], - "server": [ - ], - "minVersion": "0.8.4" -} \ No newline at end of file diff --git a/fabric/src/main/resources/vivecraft.vr.fabric.mixins.json b/fabric/src/main/resources/vivecraft.vr.fabric.mixins.json deleted file mode 100644 index d4d6c769d..000000000 --- a/fabric/src/main/resources/vivecraft.vr.fabric.mixins.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "required": true, - "package": "org.vivecraft.fabric.mixin", - "plugin": "org.vivecraft.VRMixinConfig", - "compatibilityLevel": "JAVA_17", - "mixins": [ - - ], - "client": [ - "FabricGameRendererVRMixin" - ], - "server": [ - ], - "minVersion": "0.8.4" -} \ No newline at end of file diff --git a/forge/build.gradle b/forge/build.gradle index 6c52e1fc2..42dbf0ebb 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -13,21 +13,26 @@ loom { convertAccessWideners = true extraAccessWideners.add loom.accessWidenerPath.get().asFile.name - mixinConfig "vivecraft.vr.mixins.json" - mixinConfig "vivecraft.nonvr.mixins.json" + mixinConfig "vivecraft.mixins.json" mixinConfig "vivecraft.sodium.mixins.json" mixinConfig "vivecraft.forge.sodium.mixins.json" mixinConfig "vivecraft.iris.mixins.json" + mixinConfig "vivecraft.physicsmod.mixins.json" mixinConfig "vivecraft.rei.mixins.json" + mixinConfig "vivecraft.optifine.mixins.json" - mixinConfig "vivecraft.vr.forge.mixins.json" - mixinConfig "vivecraft.nonvr.forge.mixins.json" + mixinConfig "vivecraft.forge.mixins.json" } } configurations { common shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. + bundle { + // bundle command, to copy jar contents with the shadow plugin + canBeResolved = true + canBeConsumed = false + } compileClasspath.extendsFrom common runtimeClasspath.extendsFrom common developmentForge.extendsFrom common @@ -40,8 +45,19 @@ dependencies { common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive = false } - modRuntimeOnly("maven.modrinth:rubidium:0.5.3a") - modRuntimeOnly("maven.modrinth:oculus:1.18.2-1.2.5a") + modCompileOnly("maven.modrinth:rubidium:0.6.2b") + modCompileOnly("maven.modrinth:oculus:1.19.2-1.6.4") + + forgeRuntimeLibrary("org.lwjgl:lwjgl-openvr:3.2.2") + forgeRuntimeLibrary("org.lwjgl:lwjgl-openvr:3.2.2:natives-linux") + forgeRuntimeLibrary("org.lwjgl:lwjgl-openvr:3.2.2:natives-macos") + forgeRuntimeLibrary("org.lwjgl:lwjgl-openvr:3.2.2:natives-windows") + + // shadow the natives + bundle ("org.lwjgl:lwjgl-openvr:3.2.2") { transitive = false } + bundle ("org.lwjgl:lwjgl-openvr:3.2.2:natives-linux") { transitive = false } + bundle ("org.lwjgl:lwjgl-openvr:3.2.2:natives-macos") { transitive = false } + bundle ("org.lwjgl:lwjgl-openvr:3.2.2:natives-windows") { transitive = false } } processResources { @@ -56,7 +72,10 @@ shadowJar { exclude "fabric.mod.json" exclude "architectury.common.json" - configurations = [project.configurations.shadowCommon] + configurations = [ + project.configurations.shadowCommon, + project.configurations.bundle + ] classifier "dev-shadow" } diff --git a/forge/src/main/java/org/vivecraft/forge/XeventsImpl.java b/forge/src/main/java/org/vivecraft/client/forge/XeventsImpl.java similarity index 76% rename from forge/src/main/java/org/vivecraft/forge/XeventsImpl.java rename to forge/src/main/java/org/vivecraft/client/forge/XeventsImpl.java index 88346757e..8747af7c4 100644 --- a/forge/src/main/java/org/vivecraft/forge/XeventsImpl.java +++ b/forge/src/main/java/org/vivecraft/client/forge/XeventsImpl.java @@ -1,11 +1,9 @@ -package org.vivecraft.forge; +package org.vivecraft.client.forge; import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.client.ForgeHooksClient; import net.minecraftforge.client.event.RenderBlockOverlayEvent; import net.minecraftforge.event.ForgeEventFactory; @@ -31,7 +29,4 @@ public static void onRenderTickEnd(float f) { ForgeEventFactory.onRenderTickEnd(f); } - public static void drawScreen(Screen screen, PoseStack poseStack, int mouseX, int mouseY, float partialTick) { - ForgeHooksClient.drawScreen(screen, poseStack, mouseX, mouseY, partialTick); - } } diff --git a/forge/src/main/java/org/vivecraft/client/forge/XplatImpl.java b/forge/src/main/java/org/vivecraft/client/forge/XplatImpl.java new file mode 100644 index 000000000..5ae8d24af --- /dev/null +++ b/forge/src/main/java/org/vivecraft/client/forge/XplatImpl.java @@ -0,0 +1,80 @@ +package org.vivecraft.client.forge; + +import com.mojang.blaze3d.pipeline.RenderTarget; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeSpecialEffects; +import net.minecraft.world.level.material.FluidState; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.ForgeHooksClient; +import net.minecraftforge.fml.loading.FMLEnvironment; +import net.minecraftforge.fml.loading.FMLLoader; +import net.minecraftforge.fml.loading.FMLPaths; +import net.minecraftforge.fml.util.ObfuscationReflectionHelper; +import org.vivecraft.mixin.client_vr.world.level.biome.BiomeAccessor; + +import java.nio.file.Path; + +public class XplatImpl { + + public static boolean isModLoaded(String name) { + return FMLLoader.getLoadingModList().getModFileById(name) != null; + } + + public static Path getConfigPath(String fileName) { + return FMLPaths.CONFIGDIR.get().resolve(fileName); + } + + public static boolean isDedicatedServer() { + return FMLEnvironment.dist == Dist.DEDICATED_SERVER; + } + + public static String getModloader() { + return "forge"; + } + public static String getModVersion() { + if (isModLoadedSuccess()) { + return FMLLoader.getLoadingModList().getModFileById("vivecraft").versionString(); + } + return "no version"; + } + + public static boolean isModLoadedSuccess() { + return FMLLoader.getLoadingModList().getModFileById("vivecraft") != null; + } + + public static boolean enableRenderTargetStencil(RenderTarget renderTarget) { + renderTarget.enableStencil(); + return true; + } + + public static Path getJarPath() { + return FMLLoader.getLoadingModList().getModFileById("vivecraft").getFile().getSecureJar().getPath("/"); + } + + public static String getUseMethodName() { + return ObfuscationReflectionHelper.findMethod( + net.minecraft.world.level.block.state.BlockBehaviour.class, + "m_6227_", + net.minecraft.world.level.block.state.BlockState.class, + net.minecraft.world.level.Level.class, + net.minecraft.core.BlockPos.class, + net.minecraft.world.entity.player.Player.class, + net.minecraft.world.InteractionHand.class, + net.minecraft.world.phys.BlockHitResult.class).getName(); + } + + public static TextureAtlasSprite[] getFluidTextures(BlockAndTintGetter level, BlockPos pos, FluidState fluidStateIn){ + return ForgeHooksClient.getFluidSprites(level, pos, fluidStateIn); + } + + public static Biome.ClimateSettings getBiomeClimateSettings(Biome biome){ + return ((BiomeAccessor)(Object)biome).getClimateSettings(); + } + + public static BiomeSpecialEffects getBiomeEffects(Biome biome){ + return biome.getSpecialEffects(); + } +} diff --git a/forge/src/main/java/org/vivecraft/forge/Vivecraft.java b/forge/src/main/java/org/vivecraft/forge/Vivecraft.java index d56c84a5e..c4acbb64b 100644 --- a/forge/src/main/java/org/vivecraft/forge/Vivecraft.java +++ b/forge/src/main/java/org/vivecraft/forge/Vivecraft.java @@ -4,15 +4,18 @@ import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.network.NetworkConstants; +import org.vivecraft.server.config.ServerConfig; @Mod(Vivecraft.MODID) public class Vivecraft { public static final String MODID = "vivecraft"; public Vivecraft() { + // init server config + ServerConfig.init(null); ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, ()-> new IExtensionPoint.DisplayTest( - ()->NetworkConstants.IGNORESERVERONLY, // only needed on server, client is optional - (s,b)->true // any version is good + () -> NetworkConstants.IGNORESERVERONLY, // only needed on server, client is optional + (s,b) -> true // any version is good )); } } diff --git a/forge/src/main/java/org/vivecraft/forge/XplatImpl.java b/forge/src/main/java/org/vivecraft/forge/XplatImpl.java deleted file mode 100644 index 2441e0745..000000000 --- a/forge/src/main/java/org/vivecraft/forge/XplatImpl.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.vivecraft.forge; - -import com.mojang.blaze3d.pipeline.RenderTarget; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.loading.FMLEnvironment; -import net.minecraftforge.fml.loading.FMLLoader; -import net.minecraftforge.fml.loading.FMLPaths; - -import java.nio.file.Path; - -public class XplatImpl { - - public static boolean isModLoaded(String name) { - return FMLLoader.getLoadingModList().getModFileById(name) != null; - } - - public static Path getConfigPath(String fileName) { - return FMLPaths.CONFIGDIR.get().resolve(fileName); - } - - public static boolean isDedicatedServer() { - return FMLEnvironment.dist == Dist.DEDICATED_SERVER; - } - - public static String getModloader() { - return "forge"; - } - public static String getModVersion() { - if (isModLoadedSuccess()) { - return FMLLoader.getLoadingModList().getModFileById("vivecraft").versionString(); - } - return "no version"; - } - - public static boolean isModLoadedSuccess() { - return FMLLoader.getLoadingModList().getModFileById("vivecraft") != null; - } - - public static boolean enableRenderTargetStencil(RenderTarget renderTarget) { - renderTarget.enableStencil(); - return true; - } -} diff --git a/forge/src/main/java/org/vivecraft/forge/event/ClientEvents.java b/forge/src/main/java/org/vivecraft/forge/event/ClientEvents.java index 3a6254ea4..5d4b6aa00 100644 --- a/forge/src/main/java/org/vivecraft/forge/event/ClientEvents.java +++ b/forge/src/main/java/org/vivecraft/forge/event/ClientEvents.java @@ -5,17 +5,17 @@ import net.minecraftforge.client.model.ForgeModelBakery; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.gameplay.trackers.CameraTracker; -import org.vivecraft.gameplay.trackers.TelescopeTracker; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.gameplay.trackers.CameraTracker; +import org.vivecraft.client_vr.gameplay.trackers.TelescopeTracker; @Mod.EventBusSubscriber(value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) public class ClientEvents { @SubscribeEvent public static void registerModels(ModelRegistryEvent event) { ForgeModelBakery.addSpecialModel(TelescopeTracker.scopeModel); - ForgeModelBakery.addSpecialModel(ClientDataHolder.thirdPersonCameraModel); - ForgeModelBakery.addSpecialModel(ClientDataHolder.thirdPersonCameraDisplayModel); + ForgeModelBakery.addSpecialModel(ClientDataHolderVR.thirdPersonCameraModel); + ForgeModelBakery.addSpecialModel(ClientDataHolderVR.thirdPersonCameraDisplayModel); ForgeModelBakery.addSpecialModel(CameraTracker.cameraModel); ForgeModelBakery.addSpecialModel(CameraTracker.cameraDisplayModel); } diff --git a/forge/src/main/java/org/vivecraft/forge/event/CommonEvents.java b/forge/src/main/java/org/vivecraft/forge/event/CommonEvents.java new file mode 100644 index 000000000..6e4743e14 --- /dev/null +++ b/forge/src/main/java/org/vivecraft/forge/event/CommonEvents.java @@ -0,0 +1,14 @@ +package org.vivecraft.forge.event; + +import net.minecraftforge.event.RegisterCommandsEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import org.vivecraft.server.ServerUtil; + +@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE) +public class CommonEvents { + @SubscribeEvent + public static void registerCommands(RegisterCommandsEvent event) { + ServerUtil.registerCommands(event.getDispatcher()); + } +} diff --git a/forge/src/main/java/org/vivecraft/forge/mixin/ForgeGameRendererVRMixin.java b/forge/src/main/java/org/vivecraft/forge/mixin/ForgeGameRendererVRMixin.java index 1440b251c..7cdc23cc0 100644 --- a/forge/src/main/java/org/vivecraft/forge/mixin/ForgeGameRendererVRMixin.java +++ b/forge/src/main/java/org/vivecraft/forge/mixin/ForgeGameRendererVRMixin.java @@ -7,35 +7,42 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -import org.vivecraft.ClientDataHolder; -import org.vivecraft.extensions.GameRendererExtension; -import org.vivecraft.render.RenderPass; +import org.vivecraft.client_vr.ClientDataHolderVR; +import org.vivecraft.client_vr.extensions.GameRendererExtension; +import org.vivecraft.client_vr.render.RenderPass; +import org.vivecraft.client_xr.render_pass.RenderPassType; @Mixin(GameRenderer.class) public class ForgeGameRendererVRMixin { @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;setAnglesInternal(FF)V", remap = false), method = "renderLevel") public void forgeInternal(Camera camera, float yaw, float pitch) { - if(ClientDataHolder.getInstance().currentPass != RenderPass.LEFT && ClientDataHolder.getInstance().currentPass != RenderPass.RIGHT) { + if (RenderPassType.isVanilla() || ClientDataHolderVR.getInstance().currentPass != RenderPass.LEFT && ClientDataHolderVR.getInstance().currentPass != RenderPass.RIGHT) { camera.setAnglesInternal(yaw, pitch); } } @Redirect(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;mulPose(Lcom/mojang/math/Quaternion;)V", ordinal = 2), method = "renderLevel") public void forgeMulposZ(PoseStack poseStack, Quaternion quaternion) { - if(ClientDataHolder.getInstance().currentPass != RenderPass.LEFT && ClientDataHolder.getInstance().currentPass != RenderPass.RIGHT) { + if (RenderPassType.isVanilla() || ClientDataHolderVR.getInstance().currentPass != RenderPass.LEFT && ClientDataHolderVR.getInstance().currentPass != RenderPass.RIGHT) { poseStack.mulPose(quaternion); } } @Redirect(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;mulPose(Lcom/mojang/math/Quaternion;)V ", ordinal = 3), method = "renderLevel(FJLcom/mojang/blaze3d/vertex/PoseStack;)V") public void removeMulposeX(PoseStack s, Quaternion quaternion) { - return; + if (RenderPassType.isVanilla()) { + s.mulPose(quaternion); + } } @Redirect(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;mulPose(Lcom/mojang/math/Quaternion;)V ", ordinal = 4), method = "renderLevel(FJLcom/mojang/blaze3d/vertex/PoseStack;)V") public void removeMulposeY(PoseStack s, Quaternion quaternion) { - ((GameRendererExtension)this).applyVRModelView(ClientDataHolder.getInstance().currentPass, s); + if (RenderPassType.isVanilla()) { + s.mulPose(quaternion); + } else { + ((GameRendererExtension) this).applyVRModelView(ClientDataHolderVR.getInstance().currentPass, s); + } } } diff --git a/forge/src/main/java/org/vivecraft/forge/mixin/ForgeIngameGuiVRMixin.java b/forge/src/main/java/org/vivecraft/forge/mixin/ForgeIngameGuiVRMixin.java index 7cef58b2b..f4bc3e3da 100644 --- a/forge/src/main/java/org/vivecraft/forge/mixin/ForgeIngameGuiVRMixin.java +++ b/forge/src/main/java/org/vivecraft/forge/mixin/ForgeIngameGuiVRMixin.java @@ -1,20 +1,28 @@ package org.vivecraft.forge.mixin; import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.KeyMapping; import net.minecraftforge.client.gui.ForgeIngameGui; import net.minecraftforge.client.gui.IIngameOverlay; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.vivecraft.client_vr.extensions.GuiExtension; +import org.vivecraft.client_xr.render_pass.RenderPassType; @Mixin(ForgeIngameGui.class) -public abstract class ForgeIngameGuiVRMixin { - +public abstract class ForgeIngameGuiVRMixin{ @Inject(method = "pre(Lnet/minecraftforge/client/gui/IIngameOverlay;Lcom/mojang/blaze3d/vertex/PoseStack;)Z", at = @At("HEAD"), remap = false, cancellable = true) private void noStuff(IIngameOverlay overlay, PoseStack poseStack, CallbackInfoReturnable info) { - if (overlay == ForgeIngameGui.VIGNETTE_ELEMENT || overlay == ForgeIngameGui.SPYGLASS_ELEMENT || overlay == ForgeIngameGui.HELMET_ELEMENT || overlay == ForgeIngameGui.FROSTBITE_ELEMENT || overlay == ForgeIngameGui.PORTAL_ELEMENT) { + if (RenderPassType.isGuiOnly() && (overlay == ForgeIngameGui.VIGNETTE_ELEMENT || overlay == ForgeIngameGui.SPYGLASS_ELEMENT || overlay == ForgeIngameGui.HELMET_ELEMENT || overlay == ForgeIngameGui.FROSTBITE_ELEMENT || overlay == ForgeIngameGui.PORTAL_ELEMENT)) { info.setReturnValue(true); } } + + @Redirect(method = "renderPlayerList(IILcom/mojang/blaze3d/vertex/PoseStack;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/KeyMapping;isDown()Z")) + public boolean toggleableTabListForge(KeyMapping instance) { + return instance.isDown() || ((GuiExtension)this).getShowPlayerList(); + } } diff --git a/forge/src/main/java/org/vivecraft/forge/mixin/network/ForgeOpenContainerVRMixin.java b/forge/src/main/java/org/vivecraft/forge/mixin/network/ForgeOpenContainerVRMixin.java new file mode 100644 index 000000000..e3133bcab --- /dev/null +++ b/forge/src/main/java/org/vivecraft/forge/mixin/network/ForgeOpenContainerVRMixin.java @@ -0,0 +1,19 @@ +package org.vivecraft.forge.mixin.network; + +import net.minecraftforge.network.NetworkEvent; +import net.minecraftforge.network.PlayMessages; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.vivecraft.client_vr.gameplay.screenhandlers.GuiHandler; + +import java.util.function.Supplier; + +@Mixin(PlayMessages.OpenContainer.class) +public class ForgeOpenContainerVRMixin { + @Inject(at = @At("HEAD"), method = "handle", remap = false) + private static void markScreenActiveForge(PlayMessages.OpenContainer msg, Supplier ctx, CallbackInfo ci) { + GuiHandler.guiAppearOverBlockActive = true; + } +} diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index ab7965481..270539ee8 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -1,5 +1,5 @@ modLoader = "javafml" -loaderVersion = "[40,)" +loaderVersion = "[40,41)" #issueTrackerURL = "" license = "LGPLv3" @@ -13,18 +13,19 @@ displayTest="IGNORE_ALL_VERSION" description = ''' The VR mod for any loader! ''' +updateJSONURL = "https://api.modrinth.com/updates/vivecraft/forge_updates.json" #logoFile = "" [[dependencies.vivecraft]] modId = "forge" mandatory = true -versionRange = "[40,)" +versionRange = "[40,41)" ordering = "NONE" side = "BOTH" [[dependencies.vivecraft]] modId = "minecraft" mandatory = true -versionRange = "[1.18.2,)" +versionRange = "[1.18.2]" ordering = "NONE" side = "BOTH" diff --git a/forge/src/main/resources/vivecraft.vr.forge.mixins.json b/forge/src/main/resources/vivecraft.forge.mixins.json similarity index 60% rename from forge/src/main/resources/vivecraft.vr.forge.mixins.json rename to forge/src/main/resources/vivecraft.forge.mixins.json index f03caf9c8..5587c2481 100644 --- a/forge/src/main/resources/vivecraft.vr.forge.mixins.json +++ b/forge/src/main/resources/vivecraft.forge.mixins.json @@ -1,16 +1,12 @@ { "required": true, "package": "org.vivecraft.forge.mixin", - "plugin": "org.vivecraft.VRMixinConfig", + "plugin": "org.vivecraft.MixinConfig", "compatibilityLevel": "JAVA_17", - "mixins": [ - - ], "client": [ "ForgeIngameGuiVRMixin", - "ForgeGameRendererVRMixin" - ], - "server": [ + "ForgeGameRendererVRMixin", + "network.ForgeOpenContainerVRMixin" ], "minVersion": "0.8.4" } \ No newline at end of file diff --git a/forge/src/main/resources/vivecraft.nonvr.forge.mixins.json b/forge/src/main/resources/vivecraft.nonvr.forge.mixins.json deleted file mode 100644 index b3f755709..000000000 --- a/forge/src/main/resources/vivecraft.nonvr.forge.mixins.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "required": true, - "package": "org.vivecraft.forge.mixin", - "plugin": "org.vivecraft.NonVRMixinConfig", - "compatibilityLevel": "JAVA_17", - "mixins": [ - - ], - "client": [ - ], - "server": [ - ], - "minVersion": "0.8.4" -} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 1735d36ff..e4ed5a5d0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,15 +4,15 @@ minecraft_version=1.18.2 enabled_platforms=fabric,forge archives_base_name=vivecraft -mod_version=0.0.13 +mod_version=1.0.1 maven_group=org.vivecraft -architectury_version=4.9.83 +architectury_version=4.11.93 -fabric_loader_version=0.14.9 -fabric_api_version=0.58.0+1.18.2 +fabric_loader_version=0.14.17 +fabric_api_version=0.76.0+1.18.2 -forge_version=1.18.2-40.1.73 +forge_version=1.18.2-40.2.9