Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1e52ee15b5 | |||
| b54d478de1 | |||
| 8008d61636 | |||
| cf38aef742 | |||
| 8621bf631b | |||
| c31c27167f | |||
| 35d97fa98f | |||
| 8627270e5c | |||
| 69dd7e932d | |||
| 74371bd70d | |||
| 4a38b15ece |
@@ -41,3 +41,6 @@ forge_version=36.2.28
|
|||||||
# 2 = Can be refranced in code and runs in client
|
# 2 = Can be refranced in code and runs in client
|
||||||
enable_starlight_forge=0
|
enable_starlight_forge=0
|
||||||
enable_terraforged=2
|
enable_terraforged=2
|
||||||
|
|
||||||
|
# Quilt loader
|
||||||
|
quilt_loader_version=0.16.0-beta.10
|
||||||
@@ -41,3 +41,6 @@ forge_version=37.1.1
|
|||||||
# 2 = Can be refranced in code and runs in client
|
# 2 = Can be refranced in code and runs in client
|
||||||
enable_starlight_forge=0
|
enable_starlight_forge=0
|
||||||
enable_terraforged=0
|
enable_terraforged=0
|
||||||
|
|
||||||
|
# Quilt loader
|
||||||
|
quilt_loader_version=0.16.0-beta.10
|
||||||
+4
-1
@@ -1,6 +1,6 @@
|
|||||||
# 1.18.1 version
|
# 1.18.1 version
|
||||||
|
|
||||||
java_version = 17
|
java_version=17
|
||||||
minecraft_version=1.18.1
|
minecraft_version=1.18.1
|
||||||
parchment_version=2022.03.06
|
parchment_version=2022.03.06
|
||||||
compatible_minecraft_versions=["1.18", "1.18.1"]
|
compatible_minecraft_versions=["1.18", "1.18.1"]
|
||||||
@@ -41,3 +41,6 @@ forge_version=39.1.2
|
|||||||
# 2 = Can be referenced in code and runs in client
|
# 2 = Can be referenced in code and runs in client
|
||||||
enable_starlight_forge=0
|
enable_starlight_forge=0
|
||||||
enable_terraforged=0
|
enable_terraforged=0
|
||||||
|
|
||||||
|
# Quilt loader
|
||||||
|
quilt_loader_version=0.16.0-beta.10
|
||||||
+4
-1
@@ -1,6 +1,6 @@
|
|||||||
# 1.18.2 version based stuff
|
# 1.18.2 version based stuff
|
||||||
|
|
||||||
java_version = 17
|
java_version=17
|
||||||
minecraft_version=1.18.2
|
minecraft_version=1.18.2
|
||||||
parchment_version=2022.03.13
|
parchment_version=2022.03.13
|
||||||
compatible_minecraft_versions=["1.18.2"]
|
compatible_minecraft_versions=["1.18.2"]
|
||||||
@@ -41,3 +41,6 @@ forge_version=40.0.18
|
|||||||
# 2 = Can be referenced in code and runs in client
|
# 2 = Can be referenced in code and runs in client
|
||||||
enable_starlight_forge=0
|
enable_starlight_forge=0
|
||||||
enable_terraforged=0
|
enable_terraforged=0
|
||||||
|
|
||||||
|
# Quilt loader
|
||||||
|
quilt_loader_version=0.16.0-beta.10
|
||||||
@@ -14,6 +14,9 @@ If you want to see a quick demo, check out a video covering the mod here:
|
|||||||
|
|
||||||
<a href="https://www.youtube.com/watch?v=H2tnvEVbO1c" target="_blank"></a>
|
<a href="https://www.youtube.com/watch?v=H2tnvEVbO1c" target="_blank"></a>
|
||||||
|
|
||||||
|
## About this branch
|
||||||
|
This is a test branch to add support for the quilt mod loader (https://quiltmc.org/)
|
||||||
|
|
||||||
### Versions
|
### Versions
|
||||||
|
|
||||||
This branch is for these versions of Minecraft
|
This branch is for these versions of Minecraft
|
||||||
|
|||||||
+57
-4
@@ -9,7 +9,7 @@ buildscript {
|
|||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id "architectury-plugin" version "3.4-SNAPSHOT"
|
id "architectury-plugin" version "3.4-SNAPSHOT"
|
||||||
id "dev.architectury.loom" version "0.10.0-SNAPSHOT" apply false
|
id "dev.architectury.loom" version "0.11.0-SNAPSHOT" apply false
|
||||||
}
|
}
|
||||||
|
|
||||||
def writeBuildGradlePredefine(List<String> mcVers, int mcIndex) {
|
def writeBuildGradlePredefine(List<String> mcVers, int mcIndex) {
|
||||||
@@ -89,7 +89,7 @@ subprojects { p ->
|
|||||||
silentMojangMappingsLicense()
|
silentMojangMappingsLicense()
|
||||||
|
|
||||||
if (p != project(":core")) {
|
if (p != project(":core")) {
|
||||||
accessWidenerPath.set(project(":common").file("src/main/resources/${acsessWidenerVersion}.lod.accesswidener"))
|
accessWidenerPath = project(":common").file("src/main/resources/${acsessWidenerVersion}.lod.accesswidener")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,12 +115,25 @@ subprojects { p ->
|
|||||||
// Toml
|
// Toml
|
||||||
implementation("com.electronwill.night-config:toml:${rootProject.toml_version}")
|
implementation("com.electronwill.night-config:toml:${rootProject.toml_version}")
|
||||||
|
|
||||||
if (p != project(":forge")) {
|
if (p != project(":forge") && p != project(":fabric")) {
|
||||||
// We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies
|
// We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies
|
||||||
// Do NOT use other classes from fabric loader unless working with fabric
|
// Do NOT use other classes from fabric loader unless working with fabric
|
||||||
modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
|
modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (p == project(":fabric")) {
|
||||||
|
// We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies
|
||||||
|
// Do NOT use other classes from fabric loader unless working with fabric
|
||||||
|
if (rootProject.use_quilt_rather_than_fabric == "true") {
|
||||||
|
// Quilt loader
|
||||||
|
modImplementation "org.quiltmc:quilt-loader:${rootProject.quilt_loader_version}"
|
||||||
|
modImplementation "org.quiltmc:quilt-json5:1.0.0" // Needed for quilt loader but for some reason it dosnt come with it
|
||||||
|
} else {
|
||||||
|
// Fabric loader
|
||||||
|
modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (p != project(":core")) {
|
if (p != project(":core")) {
|
||||||
common(project(":core")) { transitive false }
|
common(project(":core")) { transitive false }
|
||||||
shadowMe(project(":core")) { transitive false }
|
shadowMe(project(":core")) { transitive false }
|
||||||
@@ -159,6 +172,10 @@ allprojects { p ->
|
|||||||
// For Manifold Preprocessor
|
// For Manifold Preprocessor
|
||||||
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
|
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
|
||||||
|
|
||||||
|
|
||||||
|
// Required for ModMenu
|
||||||
|
maven { url "https://maven.terraformersmc.com/" }
|
||||||
|
|
||||||
// Required for importing Modrinth mods
|
// Required for importing Modrinth mods
|
||||||
maven {
|
maven {
|
||||||
name = "Modrinth"
|
name = "Modrinth"
|
||||||
@@ -176,6 +193,12 @@ allprojects { p ->
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Required for Quilt
|
||||||
|
maven {
|
||||||
|
name 'Quilt'
|
||||||
|
url 'https://maven.quiltmc.org/repository/release'
|
||||||
|
}
|
||||||
|
|
||||||
// These 2 are for importing mods that arnt on CursedForge, Modrinth, GitHub, GitLab or anywhere opensource
|
// These 2 are for importing mods that arnt on CursedForge, Modrinth, GitHub, GitLab or anywhere opensource
|
||||||
flatDir {
|
flatDir {
|
||||||
dirs "${rootDir}/mods/fabric"
|
dirs "${rootDir}/mods/fabric"
|
||||||
@@ -189,17 +212,46 @@ allprojects { p ->
|
|||||||
includeGroup "forge-mod"
|
includeGroup "forge-mod"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
flatDir {
|
||||||
|
dirs "${rootDir}/mods/quilt"
|
||||||
|
content {
|
||||||
|
includeGroup "quilt-mod"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Make a new author thing for quilt as quilt uses a different layout for their authors
|
||||||
|
// The output to look something like this {"James":"Developer","coolGi":"Developer}
|
||||||
|
def currentAuthor = ""
|
||||||
|
def quiltAuthors = "{"
|
||||||
|
def authorCounter = false;
|
||||||
|
for (reader in rootProject.mod_authors) {
|
||||||
|
if (authorCounter)
|
||||||
|
currentAuthor = currentAuthor + reader
|
||||||
|
|
||||||
|
if (reader == "\"") {
|
||||||
|
authorCounter = !authorCounter
|
||||||
|
if (!authorCounter) {
|
||||||
|
currentAuthor = currentAuthor.substring(0, currentAuthor.length() - 1); // Delete the qotation mark at the end of the authors name
|
||||||
|
quiltAuthors = quiltAuthors + "\"" + currentAuthor + "\":\"Developer\"," // Add the author to the string
|
||||||
|
currentAuthor = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
quiltAuthors = quiltAuthors.substring(0, quiltAuthors.length() - 1) // Delete the final comma
|
||||||
|
quiltAuthors = quiltAuthors + "}"
|
||||||
|
|
||||||
|
|
||||||
// Put stuff from gradle.properties into the mod info
|
// Put stuff from gradle.properties into the mod info
|
||||||
processResources {
|
processResources {
|
||||||
def resourceTargets = ["fabric.mod.json", "META-INF/mods.toml"] // Location of where to put
|
def resourceTargets = ["fabric.mod.json", "quilt.mod.json", "META-INF/mods.toml"] // Location of where to put
|
||||||
def intoTargets = ["$buildDir/resources/main/"] // Location of the built resources folder
|
def intoTargets = ["$buildDir/resources/main/"] // Location of the built resources folder
|
||||||
def replaceProperties = [
|
def replaceProperties = [
|
||||||
version : mod_version,
|
version : mod_version,
|
||||||
mod_name : mod_name,
|
mod_name : mod_name,
|
||||||
authors : mod_authors,
|
authors : mod_authors,
|
||||||
|
quilt_authors : quiltAuthors,
|
||||||
description : mod_description,
|
description : mod_description,
|
||||||
homepage : mod_homepage,
|
homepage : mod_homepage,
|
||||||
source : mod_source,
|
source : mod_source,
|
||||||
@@ -275,6 +327,7 @@ allprojects { p ->
|
|||||||
|
|
||||||
// println options.compilerArgs
|
// println options.compilerArgs
|
||||||
|
|
||||||
|
options.encoding = "UTF-8"
|
||||||
// Set the java version
|
// Set the java version
|
||||||
if (p != project(":core")) {
|
if (p != project(":core")) {
|
||||||
options.compilerArgs += ['-Xplugin:Manifold']
|
options.compilerArgs += ['-Xplugin:Manifold']
|
||||||
|
|||||||
+1
-9
@@ -1,13 +1,5 @@
|
|||||||
architectury {
|
architectury {
|
||||||
common()
|
common(rootProject.enabled_platforms.split(","))
|
||||||
}
|
|
||||||
|
|
||||||
afterEvaluate {
|
|
||||||
tasks {
|
|
||||||
remapJar {
|
|
||||||
remapAccessWidener.set(false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
publishing {
|
publishing {
|
||||||
|
|||||||
+9
@@ -59,6 +59,7 @@ import net.minecraft.network.chat.TextComponent;
|
|||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.level.ChunkPos;
|
import net.minecraft.world.level.ChunkPos;
|
||||||
|
import net.minecraft.world.level.LightLayer;
|
||||||
import net.minecraft.world.level.dimension.DimensionType;
|
import net.minecraft.world.level.dimension.DimensionType;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@@ -326,6 +327,14 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper
|
|||||||
return mc.getCurrentServer() != null;
|
return mc.getCurrentServer() != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPlayerSkylight() {
|
||||||
|
if (mc.level == null) return -1;
|
||||||
|
if (mc.player == null) return -1;
|
||||||
|
if (mc.player.blockPosition() == null) return -1;
|
||||||
|
return mc.level.getBrightness(LightLayer.SKY, mc.player.blockPosition());
|
||||||
|
}
|
||||||
|
|
||||||
public ServerData getCurrentServer()
|
public ServerData getCurrentServer()
|
||||||
{
|
{
|
||||||
return mc.getCurrentServer();
|
return mc.getCurrentServer();
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"accessWidener": "lod.accesswidener"
|
||||||
|
}
|
||||||
+1
-1
Submodule core updated: 6ad6ecc731...83a2fa86d9
@@ -0,0 +1,15 @@
|
|||||||
|
architectury {
|
||||||
|
common(rootProject.enabled_platforms.split(","))
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
// Use Fabric loader as both Quilt and Fabric can use it
|
||||||
|
modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
|
||||||
|
|
||||||
|
// Fabric API
|
||||||
|
fabricApi.module("fabric-lifecycle-events-v1", rootProject.fabric_api_version)
|
||||||
|
fabricApi.module("fabric-key-binding-api-v1", rootProject.fabric_api_version)
|
||||||
|
fabricApi.module("fabric-networking-api-v1", rootProject.fabric_api_version)
|
||||||
|
|
||||||
|
compileClasspath(project(path: ":common", configuration: "namedElements")) { transitive false }
|
||||||
|
}
|
||||||
+1
-1
@@ -17,7 +17,7 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.seibel.lod.fabric.mixins;
|
package com.seibel.lod.fabric_like.mixins;
|
||||||
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import net.minecraft.world.level.chunk.ChunkGenerator;
|
import net.minecraft.world.level.chunk.ChunkGenerator;
|
||||||
+3
-2
@@ -17,7 +17,7 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.seibel.lod.fabric.mixins;
|
package com.seibel.lod.fabric_like.mixins;
|
||||||
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
@@ -42,7 +42,7 @@ import net.minecraft.world.level.material.FogType;
|
|||||||
|
|
||||||
@Mixin(FogRenderer.class)
|
@Mixin(FogRenderer.class)
|
||||||
public class MixinFogRenderer {
|
public class MixinFogRenderer {
|
||||||
private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class);
|
private static ILodConfigWrapperSingleton CONFIG;
|
||||||
|
|
||||||
// Using this instead of Float.MAX_VALUE because Sodium don't like it.
|
// Using this instead of Float.MAX_VALUE because Sodium don't like it.
|
||||||
private static final float A_REALLY_REALLY_BIG_VALUE = 420694206942069.F;
|
private static final float A_REALLY_REALLY_BIG_VALUE = 420694206942069.F;
|
||||||
@@ -50,6 +50,7 @@ public class MixinFogRenderer {
|
|||||||
|
|
||||||
@Inject(at = @At("RETURN"), method = "setupFog(Lnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/FogRenderer$FogMode;FZ)V")
|
@Inject(at = @At("RETURN"), method = "setupFog(Lnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/FogRenderer$FogMode;FZ)V")
|
||||||
private static void disableSetupFog(Camera camera, FogMode fogMode, float f, boolean bl, CallbackInfo callback) {
|
private static void disableSetupFog(Camera camera, FogMode fogMode, float f, boolean bl, CallbackInfo callback) {
|
||||||
|
if (CONFIG == null) CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class);
|
||||||
#if PRE_MC_1_17_1
|
#if PRE_MC_1_17_1
|
||||||
FluidState fluidState = camera.getFluidInCamera();
|
FluidState fluidState = camera.getFluidInCamera();
|
||||||
boolean cameraNotInFluid = fluidState.isEmpty();
|
boolean cameraNotInFluid = fluidState.isEmpty();
|
||||||
+1
-1
@@ -17,7 +17,7 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.seibel.lod.fabric.mixins;
|
package com.seibel.lod.fabric_like.mixins;
|
||||||
|
|
||||||
import com.seibel.lod.common.wrappers.config.ConfigGui;
|
import com.seibel.lod.common.wrappers.config.ConfigGui;
|
||||||
import com.seibel.lod.common.wrappers.config.TexturedButtonWidget;
|
import com.seibel.lod.common.wrappers.config.TexturedButtonWidget;
|
||||||
+1
-1
@@ -17,7 +17,7 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.seibel.lod.fabric.mixins;
|
package com.seibel.lod.fabric_like.mixins;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.mojang.math.Matrix4f;
|
import com.mojang.math.Matrix4f;
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.seibel.lod.fabric.mixins.events;
|
package com.seibel.lod.fabric_like.mixins.events;
|
||||||
|
|
||||||
|
|
||||||
import com.mojang.blaze3d.platform.NativeImage;
|
import com.mojang.blaze3d.platform.NativeImage;
|
||||||
+1
-1
@@ -17,7 +17,7 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.seibel.lod.fabric.mixins.unsafe;
|
package com.seibel.lod.fabric_like.mixins.unsafe;
|
||||||
|
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"required": true,
|
||||||
|
"minVersion": "0.8",
|
||||||
|
"package": "com.seibel.lod.fabric_like.mixins",
|
||||||
|
"mixins": [
|
||||||
|
"unsafe.MixinThreadingDectector"
|
||||||
|
],
|
||||||
|
"client": [
|
||||||
|
"MixinOptionsScreen",
|
||||||
|
"MixinWorldRenderer",
|
||||||
|
"MixinFogRenderer",
|
||||||
|
"MixinChunkGenerator",
|
||||||
|
"events.MixinLightmap"
|
||||||
|
],
|
||||||
|
"injectors": {
|
||||||
|
"defaultRequire": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
-6
@@ -1,5 +1,5 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id "com.github.johnrengelman.shadow" version "7.1.0"
|
id "com.github.johnrengelman.shadow" version "7.1.2"
|
||||||
}
|
}
|
||||||
|
|
||||||
version = rootProject.mod_version+"-"+rootProject.minecraft_version+"-"+new Date().format("yyyy_MM_dd_HH_mm")
|
version = rootProject.mod_version+"-"+rootProject.minecraft_version+"-"+new Date().format("yyyy_MM_dd_HH_mm")
|
||||||
@@ -19,11 +19,6 @@ configurations {
|
|||||||
modImplementation.extendsFrom addModJar
|
modImplementation.extendsFrom addModJar
|
||||||
}
|
}
|
||||||
|
|
||||||
repositories {
|
|
||||||
// Required for ModMenu
|
|
||||||
maven { url "https://maven.terraformersmc.com/" }
|
|
||||||
}
|
|
||||||
|
|
||||||
def addMod(path, enabled) {
|
def addMod(path, enabled) {
|
||||||
if (enabled == "2")
|
if (enabled == "2")
|
||||||
dependencies { modImplementation(path) }
|
dependencies { modImplementation(path) }
|
||||||
@@ -114,6 +109,7 @@ runClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
shadowJar {
|
shadowJar {
|
||||||
|
exclude "architectury.common.json"
|
||||||
configurations = [project.configurations.shadowMe]
|
configurations = [project.configurations.shadowMe]
|
||||||
relocate 'org.tukaani', 'shaded.tukaani'
|
relocate 'org.tukaani', 'shaded.tukaani'
|
||||||
relocate 'org.apache.commons.compress', 'shaded.apache.commons.compress'
|
relocate 'org.apache.commons.compress', 'shaded.apache.commons.compress'
|
||||||
|
|||||||
@@ -47,23 +47,17 @@ import net.fabricmc.api.ClientModInitializer;
|
|||||||
* @author Ran
|
* @author Ran
|
||||||
* @version 12-1-2021
|
* @version 12-1-2021
|
||||||
*/
|
*/
|
||||||
public class Main implements ClientModInitializer
|
public class Main
|
||||||
{
|
{
|
||||||
// This is a client mod so it should implement ClientModInitializer and in fabric.mod.json it should have "environment": "client"
|
// This is a client mod so it should implement ClientModInitializer and in fabric.mod.json it should have "environment": "client"
|
||||||
// Once it works on servers change the implement to ModInitializer and in fabric.mod.json it should be "environment": "*"
|
// Once it works on servers change the implement to ModInitializer and in fabric.mod.json it should be "environment": "*"
|
||||||
|
|
||||||
public static ClientProxy client_proxy;
|
public static ClientProxy client_proxy;
|
||||||
|
public static boolean isQuilt;
|
||||||
|
|
||||||
// Do if implements ClientModInitializer
|
|
||||||
// This loads the mod before minecraft loads which causes a lot of issues
|
|
||||||
@Override
|
|
||||||
public void onInitializeClient() {
|
|
||||||
// no.
|
|
||||||
}
|
|
||||||
|
|
||||||
// This loads the mod after minecraft loads which doesn't causes a lot of issues
|
// This loads the mod after minecraft loads which doesn't causes a lot of issues
|
||||||
public static void init() {
|
public static void init() {
|
||||||
|
scuffedQuiltChecker();
|
||||||
LodCommonMain.initConfig();
|
LodCommonMain.initConfig();
|
||||||
LodCommonMain.startup(null, false, new NetworkHandler());
|
LodCommonMain.startup(null, false, new NetworkHandler());
|
||||||
FabricDependencySetup.createInitialBindings();
|
FabricDependencySetup.createInitialBindings();
|
||||||
@@ -93,4 +87,13 @@ public class Main implements ClientModInitializer
|
|||||||
FabricDependencySetup.finishBinding();
|
FabricDependencySetup.finishBinding();
|
||||||
ApiShared.LOGGER.info(ModInfo.READABLE_NAME + ", Version: " + ModInfo.VERSION);
|
ApiShared.LOGGER.info(ModInfo.READABLE_NAME + ", Version: " + ModInfo.VERSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void scuffedQuiltChecker() {
|
||||||
|
try {
|
||||||
|
Class.forName("org.quiltmc.loader.api.QuiltLoader");
|
||||||
|
isQuilt = true;
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
isQuilt = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package com.seibel.lod.fabric.quilt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to call classes that are in Quilt
|
||||||
|
* @author Ran
|
||||||
|
*/
|
||||||
|
public class QuiltUtils {
|
||||||
|
public static boolean isModLoaded(String modId) {
|
||||||
|
try {
|
||||||
|
return (boolean) Class.forName("org.quiltmc.loader.api.QuiltLoader").getDeclaredMethod("isModLoaded", String.class).invoke(null, modId);
|
||||||
|
} catch (Exception ignored) { }
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,6 +20,8 @@
|
|||||||
package com.seibel.lod.fabric.wrappers.modAccessor;
|
package com.seibel.lod.fabric.wrappers.modAccessor;
|
||||||
|
|
||||||
import com.seibel.lod.core.wrapperInterfaces.modAccessor.IModChecker;
|
import com.seibel.lod.core.wrapperInterfaces.modAccessor.IModChecker;
|
||||||
|
import com.seibel.lod.fabric.Main;
|
||||||
|
import com.seibel.lod.fabric.quilt.QuiltUtils;
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
|
|
||||||
public class ModChecker implements IModChecker {
|
public class ModChecker implements IModChecker {
|
||||||
@@ -27,6 +29,10 @@ public class ModChecker implements IModChecker {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isModLoaded(String modid) {
|
public boolean isModLoaded(String modid) {
|
||||||
return FabricLoader.getInstance().isModLoaded(modid);
|
if (Main.isQuilt) {
|
||||||
|
return QuiltUtils.isModLoaded(modid);
|
||||||
|
} else {
|
||||||
|
return FabricLoader.getInstance().isModLoaded(modid);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,20 +3,14 @@
|
|||||||
"minVersion": "0.8",
|
"minVersion": "0.8",
|
||||||
"package": "com.seibel.lod.fabric.mixins",
|
"package": "com.seibel.lod.fabric.mixins",
|
||||||
"mixins": [
|
"mixins": [
|
||||||
"unsafe.MixinThreadingDectector",
|
|
||||||
"MixinUtilBackgroudThread",
|
"MixinUtilBackgroudThread",
|
||||||
"events.MixinServerLevel"
|
"events.MixinServerLevel"
|
||||||
],
|
],
|
||||||
"client": [
|
"client": [
|
||||||
"MixinMinecraft",
|
"MixinMinecraft",
|
||||||
"MixinOptionsScreen",
|
|
||||||
"MixinWorldRenderer",
|
|
||||||
"MixinFogRenderer",
|
|
||||||
"MixinChunkGenerator",
|
|
||||||
"events.MixinClientLevel",
|
"events.MixinClientLevel",
|
||||||
"events.MixinMinecraft",
|
"events.MixinMinecraft",
|
||||||
"events.MixinBlockUpdate",
|
"events.MixinBlockUpdate"
|
||||||
"events.MixinLightmap"
|
|
||||||
],
|
],
|
||||||
"server": [
|
"server": [
|
||||||
"MixinDedicatedServer"
|
"MixinDedicatedServer"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
"name": "${mod_name}",
|
"name": "${mod_name}",
|
||||||
"description": "${description}",
|
"description": "${description}",
|
||||||
"authors": ${authors},
|
"authors": $authors,
|
||||||
|
|
||||||
"contact": {
|
"contact": {
|
||||||
"homepage": "${homepage}",
|
"homepage": "${homepage}",
|
||||||
@@ -18,16 +18,14 @@
|
|||||||
|
|
||||||
"environment": "client",
|
"environment": "client",
|
||||||
"entrypoints": {
|
"entrypoints": {
|
||||||
"client": [
|
|
||||||
"com.seibel.lod.fabric.Main"
|
|
||||||
],
|
|
||||||
"modmenu": [
|
"modmenu": [
|
||||||
"com.seibel.lod.fabric.wrappers.config.ModMenuIntegration"
|
"com.seibel.lod.fabric.wrappers.config.ModMenuIntegration"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
"mixins": [
|
"mixins": [
|
||||||
"fabric.lod.mixins.json"
|
"fabric.lod.mixins.json",
|
||||||
|
"fabric-like.lod.mixins.json"
|
||||||
],
|
],
|
||||||
|
|
||||||
"accessWidener" : "lod.accesswidener",
|
"accessWidener" : "lod.accesswidener",
|
||||||
@@ -36,7 +34,7 @@
|
|||||||
"fabric-lifecycle-events-v1": "*",
|
"fabric-lifecycle-events-v1": "*",
|
||||||
"fabric-key-binding-api-v1": "*",
|
"fabric-key-binding-api-v1": "*",
|
||||||
"fabric-networking-api-v1": "*",
|
"fabric-networking-api-v1": "*",
|
||||||
"minecraft": ${compatible_minecraft_versions},
|
"minecraft": $compatible_minecraft_versions,
|
||||||
"java": ">=${java_version}"
|
"java": ">=${java_version}"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -1,5 +1,5 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id "com.github.johnrengelman.shadow" version "7.1.0"
|
id "com.github.johnrengelman.shadow" version "7.1.2"
|
||||||
}
|
}
|
||||||
|
|
||||||
version = rootProject.mod_version+"-"+rootProject.minecraft_version+"-"+new Date().format("yyyy_MM_dd_HH_mm")
|
version = rootProject.mod_version+"-"+rootProject.minecraft_version+"-"+new Date().format("yyyy_MM_dd_HH_mm")
|
||||||
@@ -63,6 +63,7 @@ processResources {
|
|||||||
}
|
}
|
||||||
|
|
||||||
shadowJar {
|
shadowJar {
|
||||||
|
exclude "architectury.common.json"
|
||||||
dependencies {
|
dependencies {
|
||||||
exclude(dependency("net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"))
|
exclude(dependency("net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ mod_issues=https://gitlab.com/jeseibel/minecraft-lod-mod/-/issues
|
|||||||
toml_version=3.6.4
|
toml_version=3.6.4
|
||||||
manifold_version=2022.1.7
|
manifold_version=2022.1.7
|
||||||
mcVersions=1.16.5,1.17.1,1.18.1,1.18.2
|
mcVersions=1.16.5,1.17.1,1.18.1,1.18.2
|
||||||
|
enabled_platforms=quilt,fabric,forge
|
||||||
|
|
||||||
##### FOR IDE SUPPORT AND TELL IDE TO USE CERTIAN MC VERSION: SWITCH THIS:
|
##### FOR IDE SUPPORT AND TELL IDE TO USE CERTIAN MC VERSION: SWITCH THIS:
|
||||||
mcVer=1.18.2
|
mcVer=1.18.2
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.2-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|||||||
@@ -0,0 +1,134 @@
|
|||||||
|
plugins {
|
||||||
|
id "com.github.johnrengelman.shadow" version "7.1.2"
|
||||||
|
}
|
||||||
|
|
||||||
|
version = rootProject.mod_version+"-"+rootProject.minecraft_version+"-"+new Date().format("yyyy_MM_dd_HH_mm")
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
maven { url "https://maven.quiltmc.org/repository/release/" }
|
||||||
|
}
|
||||||
|
|
||||||
|
architectury {
|
||||||
|
platformSetupLoomIde()
|
||||||
|
loader("quilt")
|
||||||
|
}
|
||||||
|
|
||||||
|
configurations {
|
||||||
|
common
|
||||||
|
shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this.
|
||||||
|
compileClasspath.extendsFrom common
|
||||||
|
runtimeClasspath.extendsFrom common
|
||||||
|
developmentQuilt.extendsFrom common
|
||||||
|
|
||||||
|
addModJar
|
||||||
|
include.extendsFrom addModJar
|
||||||
|
modImplementation.extendsFrom addModJar
|
||||||
|
}
|
||||||
|
|
||||||
|
def addMod(path, enabled) {
|
||||||
|
if (enabled == "2")
|
||||||
|
dependencies { modImplementation(path) }
|
||||||
|
else if (enabled == "1")
|
||||||
|
dependencies { modCompileOnly(path) }
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
// Quilt loader
|
||||||
|
modImplementation "org.quiltmc:quilt-loader:${rootProject.quilt_loader_version}"
|
||||||
|
|
||||||
|
// Fabric API
|
||||||
|
addModJar(fabricApi.module("fabric-lifecycle-events-v1", rootProject.fabric_api_version))
|
||||||
|
addModJar(fabricApi.module("fabric-key-binding-api-v1", rootProject.fabric_api_version))
|
||||||
|
addModJar(fabricApi.module("fabric-networking-api-v1", rootProject.fabric_api_version))
|
||||||
|
|
||||||
|
// Mod Menu
|
||||||
|
modImplementation("com.terraformersmc:modmenu:${rootProject.modmenu_version}")
|
||||||
|
|
||||||
|
// Sodium
|
||||||
|
addMod("curse.maven:sodium-394468:${rootProject.sodium_version}", rootProject.enable_sodium)
|
||||||
|
implementation "org.joml:joml:1.10.2"
|
||||||
|
modImplementation(fabricApi.module("fabric-rendering-data-attachment-v1", rootProject.fabric_api_version))
|
||||||
|
modImplementation(fabricApi.module("fabric-rendering-fluids-v1", rootProject.fabric_api_version))
|
||||||
|
|
||||||
|
|
||||||
|
// Toml
|
||||||
|
shadowMe("com.electronwill.night-config:toml:${rootProject.toml_version}") {}
|
||||||
|
|
||||||
|
common(project(path: ":common", configuration: "namedElements")) { transitive false }
|
||||||
|
shadowCommon(project(path: ":common", configuration: "transformProductionQuilt")) { transitive false }
|
||||||
|
common(project(path: ":fabric-like", configuration: "namedElements")) { transitive false }
|
||||||
|
shadowCommon(project(path: ":fabric-like", configuration: "transformProductionQuilt")) { transitive false }
|
||||||
|
|
||||||
|
// Compression
|
||||||
|
common 'org.tukaani:xz:1.9'
|
||||||
|
common 'org.apache.commons:commons-compress:1.21'
|
||||||
|
shadowMe 'org.tukaani:xz:1.9'
|
||||||
|
shadowMe 'org.apache.commons:commons-compress:1.21'
|
||||||
|
}
|
||||||
|
|
||||||
|
task deleteResources(type: Delete) {
|
||||||
|
delete file("build/resources/main")
|
||||||
|
}
|
||||||
|
|
||||||
|
processResources {
|
||||||
|
dependsOn(copyCoreResources)
|
||||||
|
dependsOn(copyCommonResources)
|
||||||
|
dependsOn(copyAccessWidener)
|
||||||
|
}
|
||||||
|
|
||||||
|
runClient {
|
||||||
|
dependsOn(copyCoreResources)
|
||||||
|
dependsOn(copyCommonResources)
|
||||||
|
dependsOn(copyAccessWidener)
|
||||||
|
jvmArgs "-XX:-OmitStackTraceInFastThrow"
|
||||||
|
finalizedBy(deleteResources)
|
||||||
|
}
|
||||||
|
|
||||||
|
shadowJar {
|
||||||
|
exclude "architectury.common.json"
|
||||||
|
configurations = [project.configurations.shadowCommon]
|
||||||
|
relocate 'org.tukaani', 'shaded.tukaani'
|
||||||
|
relocate 'org.apache.commons.compress', 'shaded.apache.commons.compress'
|
||||||
|
relocate 'com.electronwill.nightconfig', 'shaded.electronwill.nightconfig'
|
||||||
|
|
||||||
|
relocate 'com.seibel.lod.common', 'quilt.com.seibel.lod.common'
|
||||||
|
|
||||||
|
classifier "dev-shadow"
|
||||||
|
}
|
||||||
|
|
||||||
|
remapJar {
|
||||||
|
injectAccessWidener = true // Quilt is weird with access wideners
|
||||||
|
input.set shadowJar.archiveFile
|
||||||
|
dependsOn shadowJar
|
||||||
|
classifier null
|
||||||
|
}
|
||||||
|
|
||||||
|
jar {
|
||||||
|
classifier "dev"
|
||||||
|
}
|
||||||
|
|
||||||
|
sourcesJar {
|
||||||
|
def commonSources = project(":common").sourcesJar
|
||||||
|
dependsOn commonSources
|
||||||
|
from commonSources.archiveFile.map { zipTree(it) }
|
||||||
|
}
|
||||||
|
|
||||||
|
components.java {
|
||||||
|
withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) {
|
||||||
|
skip()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
publishing {
|
||||||
|
publications {
|
||||||
|
mavenQuilt(MavenPublication) {
|
||||||
|
artifactId = rootProject.archives_base_name + "-" + project.name
|
||||||
|
from components.java
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
|
||||||
|
repositories {
|
||||||
|
// Add repositories to publish to here.
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
loom.platform=quilt
|
||||||
@@ -0,0 +1,199 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
|
||||||
|
* licensed under the GNU GPL v3 License.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020-2022 James Seibel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.seibel.lod.quilt;
|
||||||
|
|
||||||
|
import com.seibel.lod.common.wrappers.worldGeneration.BatchGenerationEnvironment;
|
||||||
|
import com.seibel.lod.core.api.ClientApi;
|
||||||
|
import com.seibel.lod.core.api.EventApi;
|
||||||
|
import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler;
|
||||||
|
import com.mojang.blaze3d.platform.InputConstants;
|
||||||
|
import com.seibel.lod.common.wrappers.chunk.ChunkWrapper;
|
||||||
|
import com.seibel.lod.common.wrappers.world.DimensionTypeWrapper;
|
||||||
|
import com.seibel.lod.common.wrappers.world.WorldWrapper;
|
||||||
|
import com.seibel.lod.core.wrapperInterfaces.chunk.IChunkWrapper;
|
||||||
|
import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton;
|
||||||
|
|
||||||
|
import com.seibel.lod.quilt.mixins.MixinUtilBackgroudThread;
|
||||||
|
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientChunkEvents;
|
||||||
|
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
|
||||||
|
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
|
||||||
|
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
||||||
|
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerWorldEvents;
|
||||||
|
import net.minecraft.client.KeyMapping;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.gui.screens.TitleScreen;
|
||||||
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.LevelAccessor;
|
||||||
|
import net.minecraft.world.level.chunk.LevelChunk;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This handles all events sent to the client,
|
||||||
|
* and is the starting point for most of the mod.
|
||||||
|
*
|
||||||
|
* @author coolGi2007
|
||||||
|
* @author Ran
|
||||||
|
* @version 11-23-2021
|
||||||
|
*/
|
||||||
|
public class ClientProxy
|
||||||
|
{
|
||||||
|
private final EventApi eventApi = EventApi.INSTANCE;
|
||||||
|
private final ClientApi clientApi = ClientApi.INSTANCE;
|
||||||
|
|
||||||
|
public static Supplier<Boolean> isGenerationThreadChecker = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers Fabric Events
|
||||||
|
* @author Ran
|
||||||
|
*/
|
||||||
|
public void registerEvents() {
|
||||||
|
/* Registor the mod accessor*/
|
||||||
|
|
||||||
|
/* World Events */
|
||||||
|
//ServerTickEvents.START_SERVER_TICK.register(this::serverTickEvent);
|
||||||
|
ServerTickEvents.END_SERVER_TICK.register(this::serverTickEvent);
|
||||||
|
|
||||||
|
/* World Events */
|
||||||
|
//ServerChunkEvents.CHUNK_LOAD.register(this::chunkLoadEvent);
|
||||||
|
#if PRE_MC_1_18_1 // in 1.18+, we use mixin hook in setClientLightReady(true)
|
||||||
|
ClientChunkEvents.CHUNK_LOAD.register(this::chunkLoadEvent);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* World Events */
|
||||||
|
ServerWorldEvents.LOAD.register((server, level) -> this.worldLoadEvent(level));
|
||||||
|
ServerWorldEvents.UNLOAD.register((server, level) -> this.worldUnloadEvent(level));
|
||||||
|
|
||||||
|
/* The Client World Events are in the mixins
|
||||||
|
Client world load event is in MixinClientLevel
|
||||||
|
Client world unload event is in MixinMinecraft */
|
||||||
|
/* The save events are in MixinServerLevel */
|
||||||
|
|
||||||
|
/* Keyboard Events */
|
||||||
|
ClientTickEvents.END_CLIENT_TICK.register(client -> {
|
||||||
|
if (client.player != null) onKeyInput();
|
||||||
|
});
|
||||||
|
isGenerationThreadChecker = BatchGenerationEnvironment::isCurrentThreadDistantGeneratorThread;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void serverTickEvent(MinecraftServer server)
|
||||||
|
{
|
||||||
|
eventApi.serverTickEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void chunkLoadEvent(LevelAccessor level, LevelChunk chunk)
|
||||||
|
{
|
||||||
|
clientApi.clientChunkLoadEvent(new ChunkWrapper(chunk, level),
|
||||||
|
WorldWrapper.getWorldWrapper(level));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void worldSaveEvent()
|
||||||
|
{
|
||||||
|
eventApi.worldSaveEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This is also called when a new dimension loads */
|
||||||
|
public void worldLoadEvent(Level level)
|
||||||
|
{
|
||||||
|
if (Minecraft.getInstance().screen instanceof TitleScreen) return;
|
||||||
|
if (level != null) {
|
||||||
|
eventApi.worldLoadEvent(WorldWrapper.getWorldWrapper(level));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void worldUnloadEvent(Level level)
|
||||||
|
{
|
||||||
|
if (level != null) {
|
||||||
|
eventApi.worldUnloadEvent(WorldWrapper.getWorldWrapper(level));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Can someone tell me how to make this better
|
||||||
|
* @author Ran
|
||||||
|
*
|
||||||
|
* public void blockChangeEvent(BlockEventData event) {
|
||||||
|
* // we only care about certain block events
|
||||||
|
* if (event.getClass() == BlockEventData.BreakEvent.class ||
|
||||||
|
* event.getClass() == BlockEventData.EntityPlaceEvent.class ||
|
||||||
|
* event.getClass() == BlockEventData.EntityMultiPlaceEvent.class ||
|
||||||
|
* event.getClass() == BlockEventData.FluidPlaceBlockEvent.class ||
|
||||||
|
* event.getClass() == BlockEventData.PortalSpawnEvent.class)
|
||||||
|
* {
|
||||||
|
* IChunkWrapper chunk = new ChunkWrapper(event.getWorld().getChunk(event.getPos()));
|
||||||
|
* DimensionTypeWrapper dimType = DimensionTypeWrapper.getDimensionTypeWrapper(event.getWorld().dimensionType());
|
||||||
|
*
|
||||||
|
* // recreate the LOD where the blocks were changed
|
||||||
|
* eventApi.blockChangeEvent(chunk, dimType);
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
public void blockChangeEvent(LevelAccessor world, BlockPos pos) {
|
||||||
|
IChunkWrapper chunk = new ChunkWrapper(world.getChunk(pos), world);
|
||||||
|
DimensionTypeWrapper dimType = DimensionTypeWrapper.getDimensionTypeWrapper(world.dimensionType());
|
||||||
|
|
||||||
|
// recreate the LOD where the blocks were changed
|
||||||
|
eventApi.blockChangeEvent(chunk, dimType);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final int[] KEY_TO_CHECK_FOR = {GLFW.GLFW_KEY_F6, GLFW.GLFW_KEY_F8};
|
||||||
|
|
||||||
|
HashSet<Integer> previousKeyDown = new HashSet<Integer>();
|
||||||
|
|
||||||
|
public void onKeyInput() {
|
||||||
|
ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class);
|
||||||
|
if (CONFIG.client().advanced().debugging().getDebugKeybindingsEnabled())
|
||||||
|
{
|
||||||
|
HashSet<Integer> currectKeyDown = new HashSet<Integer>();
|
||||||
|
|
||||||
|
// Note: Minecraft's InputConstants is same as GLFW Key values
|
||||||
|
//TODO: Use mixin to hook directly into the GLFW Keyboard event in minecraft KeyboardHandler
|
||||||
|
// Check all keys we need
|
||||||
|
for (int i = GLFW.GLFW_KEY_A; i <= GLFW.GLFW_KEY_Z; i++) {
|
||||||
|
if (InputConstants.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), i)) {
|
||||||
|
currectKeyDown.add(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int i : KEY_TO_CHECK_FOR) {
|
||||||
|
if (InputConstants.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), i)) {
|
||||||
|
currectKeyDown.add(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Diff and trigger events
|
||||||
|
for (int c : currectKeyDown) {
|
||||||
|
if (!previousKeyDown.contains(c)) {
|
||||||
|
ClientApi.INSTANCE.keyPressedEvent(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the set
|
||||||
|
previousKeyDown = currectKeyDown;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
|
||||||
|
* licensed under the GNU GPL v3 License.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020-2022 James Seibel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.seibel.lod.quilt;
|
||||||
|
|
||||||
|
import com.seibel.lod.common.LodCommonMain;
|
||||||
|
import com.seibel.lod.core.ModInfo;
|
||||||
|
import com.seibel.lod.core.api.ApiShared;
|
||||||
|
import com.seibel.lod.core.api.ClientApi;
|
||||||
|
import com.seibel.lod.core.handlers.dependencyInjection.ModAccessorHandler;
|
||||||
|
import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler;
|
||||||
|
import com.seibel.lod.core.wrapperInterfaces.modAccessor.IModChecker;
|
||||||
|
import com.seibel.lod.core.wrapperInterfaces.modAccessor.IOptifineAccessor;
|
||||||
|
import com.seibel.lod.core.wrapperInterfaces.modAccessor.ISodiumAccessor;
|
||||||
|
import com.seibel.lod.core.wrapperInterfaces.modAccessor.IStarlightAccessor;
|
||||||
|
import com.seibel.lod.quilt.networking.NetworkHandler;
|
||||||
|
import com.seibel.lod.quilt.wrappers.modAccessor.ModChecker;
|
||||||
|
import com.seibel.lod.quilt.wrappers.modAccessor.OptifineAccessor;
|
||||||
|
import com.seibel.lod.quilt.wrappers.modAccessor.SodiumAccessor;
|
||||||
|
import com.seibel.lod.quilt.wrappers.modAccessor.StarlightAccessor;
|
||||||
|
import com.seibel.lod.quilt.wrappers.FabricDependencySetup;
|
||||||
|
|
||||||
|
import net.fabricmc.api.ClientModInitializer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize and setup the Mod. <br>
|
||||||
|
* If you are looking for the real start of the mod
|
||||||
|
* check out the ClientProxy.
|
||||||
|
*
|
||||||
|
* @author coolGi2007
|
||||||
|
* @author Ran
|
||||||
|
* @version 12-1-2021
|
||||||
|
*/
|
||||||
|
public class Main
|
||||||
|
{
|
||||||
|
// This is a client mod so it should implement ClientModInitializer and in fabric.mod.json it should have "environment": "client"
|
||||||
|
// Once it works on servers change the implement to ModInitializer and in fabric.mod.json it should be "environment": "*"
|
||||||
|
|
||||||
|
public static ClientProxy client_proxy;
|
||||||
|
|
||||||
|
// This loads the mod after minecraft loads which doesn't causes a lot of issues
|
||||||
|
public static void init() {
|
||||||
|
LodCommonMain.initConfig();
|
||||||
|
LodCommonMain.startup(null, false, new NetworkHandler());
|
||||||
|
FabricDependencySetup.createInitialBindings();
|
||||||
|
FabricDependencySetup.finishBinding();
|
||||||
|
ApiShared.LOGGER.info(ModInfo.READABLE_NAME + ", Version: " + ModInfo.VERSION);
|
||||||
|
|
||||||
|
// Check if this works
|
||||||
|
client_proxy = new ClientProxy();
|
||||||
|
client_proxy.registerEvents();
|
||||||
|
if (SingletonHandler.get(IModChecker.class).isModLoaded("sodium")) {
|
||||||
|
ModAccessorHandler.bind(ISodiumAccessor.class, new SodiumAccessor());
|
||||||
|
}
|
||||||
|
if (SingletonHandler.get(IModChecker.class).isModLoaded("starlight")) {
|
||||||
|
ModAccessorHandler.bind(IStarlightAccessor.class, new StarlightAccessor());
|
||||||
|
}
|
||||||
|
if (SingletonHandler.get(IModChecker.class).isModLoaded("optifine")) {
|
||||||
|
ModAccessorHandler.bind(IOptifineAccessor.class, new OptifineAccessor());
|
||||||
|
}
|
||||||
|
|
||||||
|
ModAccessorHandler.finishBinding();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void initServer() {
|
||||||
|
LodCommonMain.initConfig();
|
||||||
|
LodCommonMain.startup(null, true, new NetworkHandler());
|
||||||
|
FabricDependencySetup.createInitialBindings();
|
||||||
|
FabricDependencySetup.finishBinding();
|
||||||
|
ApiShared.LOGGER.info(ModInfo.READABLE_NAME + ", Version: " + ModInfo.VERSION);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
|
||||||
|
* licensed under the GNU GPL v3 License.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020-2022 James Seibel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.seibel.lod.quilt.mixins;
|
||||||
|
|
||||||
|
import com.seibel.lod.quilt.Main;
|
||||||
|
import net.minecraft.server.dedicated.DedicatedServer;
|
||||||
|
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;
|
||||||
|
|
||||||
|
@Mixin(DedicatedServer.class)
|
||||||
|
public class MixinDedicatedServer {
|
||||||
|
@Inject(method = "initServer", at = @At("TAIL"))
|
||||||
|
public void initServer(CallbackInfoReturnable<Boolean> cir) {
|
||||||
|
Main.initServer();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
|
||||||
|
* licensed under the GNU GPL v3 License.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020-2022 James Seibel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.seibel.lod.quilt.mixins;
|
||||||
|
|
||||||
|
import com.seibel.lod.quilt.Main;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.main.GameConfig;
|
||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the mod after minecraft loads.
|
||||||
|
* @author Ran
|
||||||
|
*/
|
||||||
|
@Mixin(value = Minecraft.class)
|
||||||
|
public class MixinMinecraft {
|
||||||
|
@Inject(method = "<init>", at = @At("TAIL"))
|
||||||
|
private void startMod(GameConfig gameConfig, CallbackInfo ci) {
|
||||||
|
Main.init();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
|
||||||
|
* licensed under the GNU GPL v3 License.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020-2022 James Seibel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.seibel.lod.quilt.mixins;
|
||||||
|
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
import com.seibel.lod.quilt.ClientProxy;
|
||||||
|
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 com.seibel.lod.core.util.DummyRunExecutorService;
|
||||||
|
|
||||||
|
import net.minecraft.Util;
|
||||||
|
|
||||||
|
@Mixin(Util.class)
|
||||||
|
public class MixinUtilBackgroudThread
|
||||||
|
{
|
||||||
|
@Inject(method = "backgroundExecutor", at = @At("HEAD"), cancellable = true)
|
||||||
|
private static void overrideUtil$backgroundExecutor(CallbackInfoReturnable<ExecutorService> ci)
|
||||||
|
{
|
||||||
|
if (ClientProxy.isGenerationThreadChecker != null && ClientProxy.isGenerationThreadChecker.get())
|
||||||
|
{
|
||||||
|
//ApiShared.LOGGER.info("util backgroundExecutor triggered");
|
||||||
|
ci.setReturnValue(new DummyRunExecutorService());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if POST_MC_1_17_1
|
||||||
|
@Inject(method = "wrapThreadWithTaskName(Ljava/lang/String;Ljava/lang/Runnable;)Ljava/lang/Runnable;",
|
||||||
|
at = @At("HEAD"), cancellable = true)
|
||||||
|
private static void overrideUtil$wrapThreadWithTaskName(String string, Runnable r, CallbackInfoReturnable<Runnable> ci)
|
||||||
|
{
|
||||||
|
if (ClientProxy.isGenerationThreadChecker != null && ClientProxy.isGenerationThreadChecker.get())
|
||||||
|
{
|
||||||
|
//ApiShared.LOGGER.info("util wrapThreadWithTaskName(Runnable) triggered");
|
||||||
|
ci.setReturnValue(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if POST_MC_1_18_1
|
||||||
|
@Inject(method = "wrapThreadWithTaskName(Ljava/lang/String;Ljava/util/function/Supplier;)Ljava/util/function/Supplier;",
|
||||||
|
at = @At("HEAD"), cancellable = true)
|
||||||
|
private static void overrideUtil$wrapThreadWithTaskNameForSupplier(String string, Supplier<?> r, CallbackInfoReturnable<Supplier<?>> ci)
|
||||||
|
{
|
||||||
|
if (ClientProxy.isGenerationThreadChecker != null && ClientProxy.isGenerationThreadChecker.get())
|
||||||
|
{
|
||||||
|
//ApiShared.LOGGER.info("util wrapThreadWithTaskName(Supplier) triggered");
|
||||||
|
ci.setReturnValue(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
|
||||||
|
* licensed under the GNU GPL v3 License.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020-2022 James Seibel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.seibel.lod.quilt.mixins.events;
|
||||||
|
|
||||||
|
import com.seibel.lod.quilt.Main;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.network.protocol.game.ClientGamePacketListener;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket;
|
||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If someone has a better way to do this then please let me know.
|
||||||
|
*
|
||||||
|
* @author Ran
|
||||||
|
*/
|
||||||
|
@Mixin(ClientboundBlockUpdatePacket.class)
|
||||||
|
public abstract class MixinBlockUpdate {
|
||||||
|
@Shadow public abstract BlockPos getPos();
|
||||||
|
|
||||||
|
@Inject(method = "handle(Lnet/minecraft/network/protocol/game/ClientGamePacketListener;)V", at = @At("TAIL"))
|
||||||
|
private void onBlockUpdate(ClientGamePacketListener clientGamePacketListener, CallbackInfo ci) {
|
||||||
|
Main.client_proxy.blockChangeEvent(Minecraft.getInstance().player.clientLevel, this.getPos());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
|
||||||
|
* licensed under the GNU GPL v3 License.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020-2022 James Seibel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.seibel.lod.quilt.mixins.events;
|
||||||
|
|
||||||
|
import com.seibel.lod.quilt.Main;
|
||||||
|
import net.minecraft.client.multiplayer.ClientLevel;
|
||||||
|
import net.minecraft.client.multiplayer.ClientPacketListener;
|
||||||
|
import net.minecraft.client.renderer.LevelRenderer;
|
||||||
|
#if POST_MC_1_18_2
|
||||||
|
import net.minecraft.core.Holder;
|
||||||
|
#endif
|
||||||
|
import net.minecraft.resources.ResourceKey;
|
||||||
|
import net.minecraft.util.profiling.ProfilerFiller;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.chunk.LevelChunk;
|
||||||
|
import net.minecraft.world.level.dimension.DimensionType;
|
||||||
|
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 java.util.function.Supplier;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is used for world loading events
|
||||||
|
* @author Ran
|
||||||
|
*
|
||||||
|
* FIXME: Why does forge not have the 1.18+ onChunkLightReady mixin?
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Mixin(ClientLevel.class)
|
||||||
|
public class MixinClientLevel {
|
||||||
|
@Inject(method = "<init>", at = @At("TAIL"))
|
||||||
|
private void loadWorldEvent(ClientPacketListener clientPacketListener, ClientLevel.ClientLevelData clientLevelData, ResourceKey resourceKey,
|
||||||
|
#if POST_MC_1_18_2 Holder holder, #else DimensionType dimensionType, #endif int i,
|
||||||
|
#if POST_MC_1_18_1 int j, #endif Supplier supplier, LevelRenderer levelRenderer, boolean bl, long l, CallbackInfo ci) {
|
||||||
|
Main.client_proxy.worldLoadEvent((ClientLevel) (Object) this);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if POST_MC_1_18_1
|
||||||
|
@Inject(method = "setLightReady", at = @At("HEAD"))
|
||||||
|
private void onChunkLightReady(int x, int z, CallbackInfo ci) {
|
||||||
|
ClientLevel l = (ClientLevel) (Object) this;
|
||||||
|
LevelChunk chunk = l.getChunkSource().getChunk(x, z, false);
|
||||||
|
if (chunk!=null&& !chunk.isClientLightReady())
|
||||||
|
Main.client_proxy.chunkLoadEvent(l, chunk);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
|
||||||
|
* licensed under the GNU GPL v3 License.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020-2022 James Seibel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.seibel.lod.quilt.mixins.events;
|
||||||
|
|
||||||
|
import com.seibel.lod.quilt.Main;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
|
import net.minecraft.client.multiplayer.ClientLevel;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is used for world unloading events
|
||||||
|
* @author Ran
|
||||||
|
*/
|
||||||
|
@Mixin(Minecraft.class)
|
||||||
|
public class MixinMinecraft {
|
||||||
|
@Shadow @Nullable public ClientLevel level;
|
||||||
|
|
||||||
|
@Inject(method = "setLevel", at = @At("HEAD"))
|
||||||
|
private void unloadWorldEvent_sL(ClientLevel clientLevel, CallbackInfo ci) {
|
||||||
|
if (level != null) Main.client_proxy.worldUnloadEvent(level);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "clearLevel(Lnet/minecraft/client/gui/screens/Screen;)V", at = @At("HEAD"))
|
||||||
|
private void unloadWorldEvent_cL(Screen screen, CallbackInfo ci) {
|
||||||
|
if (this.level != null) Main.client_proxy.worldUnloadEvent(this.level);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
|
||||||
|
* licensed under the GNU GPL v3 License.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020-2022 James Seibel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.seibel.lod.quilt.mixins.events;
|
||||||
|
|
||||||
|
import com.seibel.lod.quilt.Main;
|
||||||
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
import net.minecraft.util.ProgressListener;
|
||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is used for world saving events
|
||||||
|
* @author Ran
|
||||||
|
*/
|
||||||
|
@Mixin(ServerLevel.class)
|
||||||
|
public class MixinServerLevel {
|
||||||
|
#if PRE_MC_1_17_1
|
||||||
|
@Inject(method = "save", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerChunkCache;save(Z)V", shift = At.Shift.AFTER))
|
||||||
|
private void saveWorldEvent(ProgressListener progressListener, boolean bl, boolean bl2, CallbackInfo ci) {
|
||||||
|
Main.client_proxy.worldSaveEvent();
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
@Inject(method = "save", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/entity/PersistentEntitySectionManager;saveAll()V", shift = At.Shift.AFTER))
|
||||||
|
private void saveWorldEvent_sA(ProgressListener progressListener, boolean bl, boolean bl2, CallbackInfo ci) {
|
||||||
|
Main.client_proxy.worldSaveEvent();
|
||||||
|
}
|
||||||
|
@Inject(method = "save", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/entity/PersistentEntitySectionManager;autoSave()V", shift = At.Shift.AFTER))
|
||||||
|
private void saveWorldEvent_aS(ProgressListener progressListener, boolean bl, boolean bl2, CallbackInfo ci) {
|
||||||
|
Main.client_proxy.worldSaveEvent();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
|
||||||
|
* licensed under the GNU GPL v3 License.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020-2022 James Seibel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.seibel.lod.quilt.networking;
|
||||||
|
|
||||||
|
import com.seibel.lod.common.networking.NetworkInterface;
|
||||||
|
import com.seibel.lod.common.networking.Networking;
|
||||||
|
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
|
||||||
|
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Ran
|
||||||
|
*/
|
||||||
|
public class NetworkHandler implements NetworkInterface {
|
||||||
|
@Override
|
||||||
|
public void register_Client() {
|
||||||
|
ClientPlayNetworking.registerGlobalReceiver(Networking.resourceLocation_meow, (client, handler, buf, responseSender) -> {
|
||||||
|
com.seibel.lod.common.networking.NetworkHandler.receivePacketClient(client, handler, buf);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void register_Server() {
|
||||||
|
ServerPlayNetworking.registerGlobalReceiver(Networking.resourceLocation_meow, (server, player, handler, buf, responseSender) -> {
|
||||||
|
com.seibel.lod.common.networking.NetworkHandler.receivePacketServer(server, player, handler, buf);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
|
||||||
|
* licensed under the GNU GPL v3 License.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020-2022 James Seibel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.seibel.lod.quilt.wrappers;
|
||||||
|
|
||||||
|
import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler;
|
||||||
|
import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton;
|
||||||
|
import com.seibel.lod.common.wrappers.config.LodConfigWrapperSingleton;
|
||||||
|
import com.seibel.lod.core.wrapperInterfaces.modAccessor.IModChecker;
|
||||||
|
import com.seibel.lod.quilt.wrappers.modAccessor.ModChecker;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Binds all necessary dependencies, so we
|
||||||
|
* can access them in Core. <br>
|
||||||
|
* This needs to be called before any Core classes
|
||||||
|
* are loaded.
|
||||||
|
*
|
||||||
|
* @author James Seibel
|
||||||
|
* @author Ran
|
||||||
|
* @version 3-5-2022
|
||||||
|
*/
|
||||||
|
public class FabricDependencySetup
|
||||||
|
{
|
||||||
|
public static void createInitialBindings()
|
||||||
|
{
|
||||||
|
SingletonHandler.bind(IModChecker.class, ModChecker.INSTANCE);
|
||||||
|
|
||||||
|
SingletonHandler.bind(ILodConfigWrapperSingleton.class, LodConfigWrapperSingleton.INSTANCE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void finishBinding() {
|
||||||
|
SingletonHandler.finishBinding();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
|
||||||
|
* licensed under the GNU GPL v3 License.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020-2022 James Seibel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.seibel.lod.quilt.wrappers.config;
|
||||||
|
|
||||||
|
import com.seibel.lod.common.wrappers.config.ConfigGui;
|
||||||
|
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
|
||||||
|
import com.terraformersmc.modmenu.api.ModMenuApi;
|
||||||
|
import net.fabricmc.api.EnvType;
|
||||||
|
import net.fabricmc.api.Environment;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For making the config show up in modmenu
|
||||||
|
*/
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
|
public class ModMenuIntegration implements ModMenuApi {
|
||||||
|
// For the custom config code
|
||||||
|
@Override
|
||||||
|
public ConfigScreenFactory<?> getModConfigScreenFactory() {
|
||||||
|
return parent -> ConfigGui.getScreen(parent, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
|
||||||
|
* licensed under the GNU GPL v3 License.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020-2022 James Seibel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.seibel.lod.quilt.wrappers.modAccessor;
|
||||||
|
|
||||||
|
import com.seibel.lod.core.wrapperInterfaces.modAccessor.IModChecker;
|
||||||
|
import org.quiltmc.loader.api.QuiltLoader;
|
||||||
|
|
||||||
|
public class ModChecker implements IModChecker {
|
||||||
|
public static final ModChecker INSTANCE = new ModChecker();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isModLoaded(String modid) {
|
||||||
|
return QuiltLoader.isModLoaded(modid);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
|
||||||
|
* licensed under the GNU GPL v3 License.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020-2022 James Seibel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.seibel.lod.quilt.wrappers.modAccessor;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
|
||||||
|
import com.seibel.lod.core.wrapperInterfaces.chunk.AbstractChunkPosWrapper;
|
||||||
|
import com.seibel.lod.core.wrapperInterfaces.modAccessor.IOptifineAccessor;
|
||||||
|
|
||||||
|
public class OptifineAccessor implements IOptifineAccessor
|
||||||
|
{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getModName()
|
||||||
|
{
|
||||||
|
return "Optifine-Fabric-1.18.X";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HashSet<AbstractChunkPosWrapper> getNormalRenderedChunks()
|
||||||
|
{
|
||||||
|
// TODO: Impl proper methods here
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
|
||||||
|
* licensed under the GNU GPL v3 License.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020-2022 James Seibel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.seibel.lod.quilt.wrappers.modAccessor;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler;
|
||||||
|
import com.seibel.lod.core.wrapperInterfaces.IWrapperFactory;
|
||||||
|
import com.seibel.lod.core.wrapperInterfaces.chunk.AbstractChunkPosWrapper;
|
||||||
|
import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
|
||||||
|
import com.seibel.lod.core.wrapperInterfaces.modAccessor.ISodiumAccessor;
|
||||||
|
|
||||||
|
|
||||||
|
import me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
#if PRE_MC_1_17_1
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
|
import net.minecraft.network.protocol.Packet;
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
|
import net.minecraft.world.entity.EntityType;
|
||||||
|
import net.minecraft.world.level.LevelAccessor;
|
||||||
|
import net.minecraft.world.phys.AABB;
|
||||||
|
#else
|
||||||
|
import net.minecraft.world.level.LevelHeightAccessor;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
public class SodiumAccessor implements ISodiumAccessor {
|
||||||
|
private final IWrapperFactory factory = SingletonHandler.get(IWrapperFactory.class);
|
||||||
|
private final IMinecraftRenderWrapper MC_RENDER = SingletonHandler.get(IMinecraftRenderWrapper.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getModName() {
|
||||||
|
return "Sodium-Fabric";
|
||||||
|
}
|
||||||
|
|
||||||
|
#if POST_MC_1_17_1
|
||||||
|
@Override
|
||||||
|
public HashSet<AbstractChunkPosWrapper> getNormalRenderedChunks() {
|
||||||
|
SodiumWorldRenderer renderer = SodiumWorldRenderer.instance();
|
||||||
|
LevelHeightAccessor height = Minecraft.getInstance().level;
|
||||||
|
|
||||||
|
#if POST_MC_1_18_1
|
||||||
|
// 0b11 = Lighted chunk & loaded chunk
|
||||||
|
return renderer.getChunkTracker().getChunks(0b00).filter(
|
||||||
|
(long l) -> {
|
||||||
|
return true;
|
||||||
|
}).mapToObj((long l) -> {
|
||||||
|
return (AbstractChunkPosWrapper)factory.createChunkPos(l);
|
||||||
|
}).collect(Collectors.toCollection(HashSet::new));
|
||||||
|
#else
|
||||||
|
// TODO: Maybe use a mixin to make this more efficient, and maybe ignore changes behind the camera
|
||||||
|
return MC_RENDER.getMaximumRenderedChunks().stream().filter((AbstractChunkPosWrapper chunk) -> {
|
||||||
|
return (renderer.isBoxVisible(
|
||||||
|
chunk.getMinBlockX()+1, height.getMinBuildHeight()+1, chunk.getMinBlockZ()+1,
|
||||||
|
chunk.getMinBlockX()+15, height.getMaxBuildHeight()-1, chunk.getMinBlockZ()+15));
|
||||||
|
}).collect(Collectors.toCollection(HashSet::new));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
@Override
|
||||||
|
public HashSet<AbstractChunkPosWrapper> getNormalRenderedChunks() {
|
||||||
|
SodiumWorldRenderer renderer = SodiumWorldRenderer.getInstance();
|
||||||
|
LevelAccessor height = Minecraft.getInstance().level;
|
||||||
|
// TODO: Maybe use a mixin to make this more efficient
|
||||||
|
return MC_RENDER.getMaximumRenderedChunks().stream().filter((AbstractChunkPosWrapper chunk) -> {
|
||||||
|
FakeChunkEntity AABB = new FakeChunkEntity(chunk.getX(), chunk.getZ(), height.getMaxBuildHeight());
|
||||||
|
return (renderer.isEntityVisible(AABB));
|
||||||
|
}).collect(Collectors.toCollection(HashSet::new));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class FakeChunkEntity extends Entity {
|
||||||
|
public int cx;
|
||||||
|
public int cz;
|
||||||
|
public int my;
|
||||||
|
public FakeChunkEntity(int chunkX, int chunkZ, int maxHeight) {
|
||||||
|
super(EntityType.AREA_EFFECT_CLOUD, null);
|
||||||
|
cx = chunkX;
|
||||||
|
cz = chunkZ;
|
||||||
|
my = maxHeight;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public AABB getBoundingBoxForCulling() {
|
||||||
|
return new AABB(cx*16+1, 1, cz*16+1,
|
||||||
|
cx*16+15, my-1, cz*16+15);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
protected void defineSynchedData() {}
|
||||||
|
@Override
|
||||||
|
protected void readAdditionalSaveData(CompoundTag paramCompoundTag) {}
|
||||||
|
@Override
|
||||||
|
protected void addAdditionalSaveData(CompoundTag paramCompoundTag) {}
|
||||||
|
@Override
|
||||||
|
public Packet<?> getAddEntityPacket() {
|
||||||
|
throw new UnsupportedOperationException("This is a FAKE CHUNK ENTITY... For tricking the Sodium to check a AABB.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
|
||||||
|
* licensed under the GNU GPL v3 License.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020-2022 James Seibel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.seibel.lod.quilt.wrappers.modAccessor;
|
||||||
|
|
||||||
|
import com.seibel.lod.core.wrapperInterfaces.modAccessor.IStarlightAccessor;
|
||||||
|
|
||||||
|
|
||||||
|
public class StarlightAccessor implements IStarlightAccessor {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getModName() {
|
||||||
|
return "Starlight-Fabric-1.18.X";
|
||||||
|
}
|
||||||
|
|
||||||
|
public StarlightAccessor() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"required": true,
|
||||||
|
"minVersion": "0.8",
|
||||||
|
"package": "com.seibel.lod.quilt.mixins",
|
||||||
|
"mixins": [
|
||||||
|
"MixinUtilBackgroudThread",
|
||||||
|
"events.MixinServerLevel"
|
||||||
|
],
|
||||||
|
"client": [
|
||||||
|
"MixinMinecraft",
|
||||||
|
"events.MixinClientLevel",
|
||||||
|
"events.MixinMinecraft",
|
||||||
|
"events.MixinBlockUpdate"
|
||||||
|
],
|
||||||
|
"server": [
|
||||||
|
"MixinDedicatedServer"
|
||||||
|
],
|
||||||
|
"injectors": {
|
||||||
|
"defaultRequire": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
"schema_version": 1,
|
||||||
|
"mixins": [
|
||||||
|
"quilt.lod.mixins.json",
|
||||||
|
"fabric-like.lod.mixins.json"
|
||||||
|
],
|
||||||
|
"accessWidener" : "lod.accesswidener",
|
||||||
|
"quilt_loader": {
|
||||||
|
"group": "com.seibel.lod",
|
||||||
|
"id": "lod",
|
||||||
|
"version": "${version}",
|
||||||
|
"environment": "client",
|
||||||
|
"metadata": {
|
||||||
|
"name": "${mod_name}",
|
||||||
|
"description": "${description}",
|
||||||
|
"contributors": $quilt_authors,
|
||||||
|
"icon": "icon.png"
|
||||||
|
},
|
||||||
|
"entrypoints": {
|
||||||
|
"modmenu": "com.seibel.lod.fabric.wrappers.config.ModMenuIntegration"
|
||||||
|
},
|
||||||
|
"intermediate_mappings": "net.fabricmc:intermediary",
|
||||||
|
"depends": [
|
||||||
|
{
|
||||||
|
"id": "quilt_loader",
|
||||||
|
"versions": "*"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "fabric-lifecycle-events-v1",
|
||||||
|
"versions": "*"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "fabric-key-binding-api-v1",
|
||||||
|
"versions": "*"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "fabric-networking-api-v1",
|
||||||
|
"versions": "*"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "minecraft",
|
||||||
|
"versions": $compatible_minecraft_versions
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,7 +8,9 @@ pluginManagement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
include("common")
|
include("common")
|
||||||
|
include("fabric-like")
|
||||||
include("fabric")
|
include("fabric")
|
||||||
|
include("quilt")
|
||||||
include("forge")
|
include("forge")
|
||||||
include("core")
|
include("core")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user