Compare commits
72 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c84ee721e3 | |||
| c46c056980 | |||
| d486878876 | |||
| b0b0b38bf8 | |||
| 9e43896864 | |||
| d09ddf57d3 | |||
| 486edac1d8 | |||
| 3b3731a137 | |||
| 563ec70154 | |||
| 175f5ed6d6 | |||
| 1e63607233 | |||
| 4dd8be23fa | |||
| 7fac5b4c6e | |||
| f2ec1ecf3f | |||
| 2674e6b2e9 | |||
| bcbe3f0fb7 | |||
| f85108ed11 | |||
| 2bc5169ce5 | |||
| 1edd809708 | |||
| 475111b38b | |||
| b44a967e56 | |||
| acea685e75 | |||
| 20f15a6b39 | |||
| debf52418c | |||
| cf71491381 | |||
| 0a4a8466cf | |||
| 31fac60d34 | |||
| c335020c2f | |||
| 4db4f2fbc6 | |||
| f9f4a208e7 | |||
| b5fa5936b3 | |||
| 6ceabe7895 | |||
| ec3d8afbfc | |||
| e9a0c6d097 | |||
| 0238568370 | |||
| 74be00e025 | |||
| c10af6dd04 | |||
| 85ee5ac833 | |||
| 21877d67a5 | |||
| ae33a79d6e | |||
| 9204b357d8 | |||
| 78b1b74036 | |||
| 864c5b5f86 | |||
| b271c8e119 | |||
| 79bdae5b8b | |||
| d5dc9f6b79 | |||
| a50f13caa0 | |||
| 75b3649a97 | |||
| 69adb54b91 | |||
| 458c1ae7e0 | |||
| a647551d26 | |||
| 3a45bdd2a2 | |||
| 4806cd2445 | |||
| af7f90f128 | |||
| f72ad60f58 | |||
| 6015afbf4c | |||
| 0369ae63f3 | |||
| 278d5063fb | |||
| a64e72034e | |||
| fcdb56660c | |||
| 0c26261cd5 | |||
| b50525fff9 | |||
| 92e403823b | |||
| e02f56f4ef | |||
| aa4681e044 | |||
| 1c9130c3f1 | |||
| c3597cd843 | |||
| d4a52ac5a3 | |||
| 1b9d14e7b4 | |||
| 0ea27b676e | |||
| cd73608b07 | |||
| 03fc22f611 |
+1
-1
@@ -35,7 +35,7 @@ build:
|
|||||||
stage: build
|
stage: build
|
||||||
parallel:
|
parallel:
|
||||||
matrix:
|
matrix:
|
||||||
- MC_VER: ["1.16.5", "1.17.1", "1.18.2", "1.19.2", "1.19.4", "1.20.1", "1.20.2", "1.20.4", "1.20.6", "1.21.1", "1.21.3", "1.21.4", "1.21.5"]
|
- MC_VER: ["1.16.5", "1.17.1", "1.18.2", "1.19.2", "1.19.4", "1.20.1", "1.20.2", "1.20.4", "1.20.6", "1.21.1", "1.21.3", "1.21.4", "1.21.5", "1.21.6", "1.21.8"]
|
||||||
script:
|
script:
|
||||||
# this both runs the unit tests and assembles the code
|
# this both runs the unit tests and assembles the code
|
||||||
- ./gradlew clean -PmcVer="${MC_VER}" -PinfoGitCommit="${CI_COMMIT_SHA}" -PinfoGitBranch="${CI_COMMIT_BRANCH}" -PinfoBuildSource="GitLab CI (${CI_PIPELINE_ID})" --gradle-user-home cache/;
|
- ./gradlew clean -PmcVer="${MC_VER}" -PinfoGitCommit="${CI_COMMIT_SHA}" -PinfoGitBranch="${CI_COMMIT_BRANCH}" -PinfoBuildSource="GitLab CI (${CI_PIPELINE_ID})" --gradle-user-home cache/;
|
||||||
|
|||||||
+5
-1
@@ -245,7 +245,9 @@ subprojects { p ->
|
|||||||
// Note: MC 1.16 uses 8.2.1, and versions after use 8.5.12
|
// Note: MC 1.16 uses 8.2.1, and versions after use 8.5.12
|
||||||
// We cannot relocate this library since we call some MC classes that reference it
|
// We cannot relocate this library since we call some MC classes that reference it
|
||||||
implementation("it.unimi.dsi:fastutil:${rootProject.fastutil_version}")
|
implementation("it.unimi.dsi:fastutil:${rootProject.fastutil_version}")
|
||||||
|
|
||||||
|
//forgeShadowMe("com.github.luben:zstd-jni:1.5.7-3")
|
||||||
|
//forgeShadowMe("org.apache.commons:commons-compress:1.27.1")
|
||||||
|
|
||||||
// Compression
|
// Compression
|
||||||
forgeShadowMe("org.lz4:lz4-java:${rootProject.lz4_version}") // LZ4
|
forgeShadowMe("org.lz4:lz4-java:${rootProject.lz4_version}") // LZ4
|
||||||
@@ -445,6 +447,8 @@ subprojects { p ->
|
|||||||
|
|
||||||
fabric_incompatibility_list : fabric_incompatibility_list,
|
fabric_incompatibility_list : fabric_incompatibility_list,
|
||||||
fabric_recommend_list : fabric_recommend_list,
|
fabric_recommend_list : fabric_recommend_list,
|
||||||
|
|
||||||
|
neoforge_version_range : neoforge_version_range,
|
||||||
]
|
]
|
||||||
|
|
||||||
// replace any properties in the sub-projects with the values defined here
|
// replace any properties in the sub-projects with the values defined here
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ for d in versionProperties/*; do
|
|||||||
echo "==================== Merging $version ===================="
|
echo "==================== Merging $version ===================="
|
||||||
sh gradlew mergeJars -PmcVer=$version
|
sh gradlew mergeJars -PmcVer=$version
|
||||||
if [ $? != 0 ]; then continue; fi
|
if [ $? != 0 ]; then continue; fi
|
||||||
|
|
||||||
echo "==================== Moving jar ===================="
|
echo "==================== Moving jar ===================="
|
||||||
mv Merged/*.jar buildAllJars/
|
mv build/merged/*.jar buildAllJars/
|
||||||
done
|
done
|
||||||
|
|||||||
+6
-3
@@ -15,12 +15,15 @@ for %%f in (versionProperties\*) do (
|
|||||||
@rem Clean out the folders, build it, and merge it
|
@rem Clean out the folders, build it, and merge it
|
||||||
echo ==================== Cleaning workspace to build !version! ====================
|
echo ==================== Cleaning workspace to build !version! ====================
|
||||||
call .\gradlew.bat clean
|
call .\gradlew.bat clean
|
||||||
echo ==================== Building !version! ====================
|
|
||||||
|
echo ==================== Building !version! ====================
|
||||||
call .\gradlew.bat build -PmcVer="!version!"
|
call .\gradlew.bat build -PmcVer="!version!"
|
||||||
echo ==================== Merging !version! ====================
|
|
||||||
|
echo ==================== Merging !version! ====================
|
||||||
call .\gradlew.bat mergeJars -PmcVer="!version!"
|
call .\gradlew.bat mergeJars -PmcVer="!version!"
|
||||||
|
|
||||||
echo ==================== Moving jar ====================
|
echo ==================== Moving jar ====================
|
||||||
move Merged\*.jar buildAllJars\
|
move build\merged\*.jar buildAllJars\
|
||||||
)
|
)
|
||||||
|
|
||||||
endlocal
|
endlocal
|
||||||
|
|||||||
+11
-10
@@ -66,7 +66,7 @@ public abstract class AbstractModInitializer
|
|||||||
{
|
{
|
||||||
DependencySetup.createClientBindings();
|
DependencySetup.createClientBindings();
|
||||||
|
|
||||||
LOGGER.info("Initializing " + ModInfo.READABLE_NAME + " client.");
|
LOGGER.info("Initializing " + ModInfo.READABLE_NAME + " client, firing DhApiBeforeDhInitEvent...");
|
||||||
ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeDhInitEvent.class, null);
|
ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeDhInitEvent.class, null);
|
||||||
|
|
||||||
this.startup();
|
this.startup();
|
||||||
@@ -77,13 +77,12 @@ public abstract class AbstractModInitializer
|
|||||||
|
|
||||||
this.initializeModCompat();
|
this.initializeModCompat();
|
||||||
|
|
||||||
LOGGER.info(ModInfo.READABLE_NAME + " client Initialized.");
|
|
||||||
ApiEventInjector.INSTANCE.fireAllEvents(DhApiAfterDhInitEvent.class, null);
|
|
||||||
|
|
||||||
// Client uses config for auto-updater, so it's initialized here instead of post-init stage
|
// Client uses config for auto-updater, so it's initialized here instead of post-init stage
|
||||||
this.initConfig();
|
this.initConfig();
|
||||||
logModIncompatibilityWarnings(); // needs to be called after config loading
|
logModIncompatibilityWarnings(); // needs to be called after config loading
|
||||||
|
|
||||||
|
LOGGER.info(ModInfo.READABLE_NAME + " client Initialized.");
|
||||||
|
|
||||||
this.subscribeClientStartedEvent(this::postInit);
|
this.subscribeClientStartedEvent(this::postInit);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,7 +90,7 @@ public abstract class AbstractModInitializer
|
|||||||
{
|
{
|
||||||
DependencySetup.createServerBindings();
|
DependencySetup.createServerBindings();
|
||||||
|
|
||||||
LOGGER.info("Initializing " + ModInfo.READABLE_NAME + " server.");
|
LOGGER.info("Initializing " + ModInfo.READABLE_NAME + " server, firing DhApiBeforeDhInitEvent event...");
|
||||||
ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeDhInitEvent.class, null);
|
ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeDhInitEvent.class, null);
|
||||||
|
|
||||||
this.startup();
|
this.startup();
|
||||||
@@ -106,8 +105,7 @@ public abstract class AbstractModInitializer
|
|||||||
|
|
||||||
this.initializeModCompat();
|
this.initializeModCompat();
|
||||||
|
|
||||||
LOGGER.info(ModInfo.READABLE_NAME + " server Initialized.");
|
LOGGER.info(ModInfo.READABLE_NAME + " server Initialized, adding event subscribers...");
|
||||||
ApiEventInjector.INSTANCE.fireAllEvents(DhApiAfterDhInitEvent.class, null);
|
|
||||||
|
|
||||||
this.subscribeRegisterCommandsEvent(dispatcher -> { this.commandInitializer = new CommandInitializer(dispatcher); });
|
this.subscribeRegisterCommandsEvent(dispatcher -> { this.commandInitializer = new CommandInitializer(dispatcher); });
|
||||||
|
|
||||||
@@ -121,7 +119,7 @@ public abstract class AbstractModInitializer
|
|||||||
|
|
||||||
this.checkForUpdates();
|
this.checkForUpdates();
|
||||||
|
|
||||||
LOGGER.info("Dedicated server initialized at " + server.getServerDirectory());
|
LOGGER.info(ModInfo.READABLE_NAME + " server Initialized at " + server.getServerDirectory());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,9 +181,12 @@ public abstract class AbstractModInitializer
|
|||||||
|
|
||||||
private void postInit()
|
private void postInit()
|
||||||
{
|
{
|
||||||
LOGGER.info("Post-Initializing Mod");
|
LOGGER.info("Running Delayed setup...");
|
||||||
this.runDelayedSetup();
|
this.runDelayedSetup();
|
||||||
LOGGER.info("Mod Post-Initialized");
|
LOGGER.info("Delayed setup complete, firing DhApiAfterDhInitEvent event...");
|
||||||
|
|
||||||
|
// should be fired after all delayed setup so singletons and config can be accessed
|
||||||
|
ApiEventInjector.INSTANCE.fireAllEvents(DhApiAfterDhInitEvent.class, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+6
-2
@@ -49,7 +49,9 @@ public class McObjectConverter
|
|||||||
@Deprecated
|
@Deprecated
|
||||||
public static Mat4f Convert(
|
public static Mat4f Convert(
|
||||||
#if MC_VER < MC_1_19_4 com.mojang.math.Matrix4f
|
#if MC_VER < MC_1_19_4 com.mojang.math.Matrix4f
|
||||||
#else org.joml.Matrix4f #endif
|
#elif MC_VER < MC_1_21_6 org.joml.Matrix4f
|
||||||
|
#else org.joml.Matrix4fc
|
||||||
|
#endif
|
||||||
mcMatrix)
|
mcMatrix)
|
||||||
{
|
{
|
||||||
FloatBuffer buffer = FloatBuffer.allocate(16);
|
FloatBuffer buffer = FloatBuffer.allocate(16);
|
||||||
@@ -63,7 +65,9 @@ public class McObjectConverter
|
|||||||
/** Taken from Minecraft's com.mojang.math.Matrix4f class from 1.18.2 */
|
/** Taken from Minecraft's com.mojang.math.Matrix4f class from 1.18.2 */
|
||||||
private static void storeMatrix(
|
private static void storeMatrix(
|
||||||
#if MC_VER < MC_1_19_4 com.mojang.math.Matrix4f
|
#if MC_VER < MC_1_19_4 com.mojang.math.Matrix4f
|
||||||
#else org.joml.Matrix4f #endif
|
#elif MC_VER < MC_1_21_6 org.joml.Matrix4f
|
||||||
|
#else org.joml.Matrix4fc
|
||||||
|
#endif
|
||||||
matrix,
|
matrix,
|
||||||
FloatBuffer buffer)
|
FloatBuffer buffer)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -74,6 +74,10 @@ public class VersionConstants implements IVersionConstants
|
|||||||
return "1.21.4";
|
return "1.21.4";
|
||||||
#elif MC_VER == MC_1_21_5
|
#elif MC_VER == MC_1_21_5
|
||||||
return "1.21.5";
|
return "1.21.5";
|
||||||
|
#elif MC_VER == MC_1_21_6
|
||||||
|
return "1.21.6";
|
||||||
|
#elif MC_VER == MC_1_21_8
|
||||||
|
return "1.21.8";
|
||||||
#else
|
#else
|
||||||
ERROR MC version constant missing
|
ERROR MC version constant missing
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+43
-23
@@ -56,20 +56,20 @@ import org.apache.logging.log4j.LogManager;
|
|||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import static com.seibel.distanthorizons.common.wrappers.gui.GuiHelper.*;
|
import static com.seibel.distanthorizons.common.wrappers.gui.GuiHelper.*;
|
||||||
|
import static com.seibel.distanthorizons.common.wrappers.gui.GuiHelper.Translatable;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Based upon TinyConfig but is highly modified
|
* Based upon TinyConfig but is highly modified
|
||||||
* https://github.com/Minenash/TinyConfig
|
* https://github.com/Minenash/TinyConfig
|
||||||
*
|
*
|
||||||
|
* Note: floats don't work with this system, use doubles.
|
||||||
|
*
|
||||||
* Credits to Motschen
|
* Credits to Motschen
|
||||||
*
|
*
|
||||||
* @author coolGi
|
* @author coolGi
|
||||||
* @version 5-21-2022
|
* @version 5-21-2022
|
||||||
*/
|
*/
|
||||||
// FLOATS DONT WORK WITH THIS
|
|
||||||
|
|
||||||
/** This file is going to be removed sometime soon, please dont hook onto anything within this file until the new UI is compleated */
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public class ClassicConfigGUI
|
public class ClassicConfigGUI
|
||||||
{
|
{
|
||||||
@@ -178,7 +178,7 @@ public class ClassicConfigGUI
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
((ConfigEntry) info).uiSetWithoutSaving(value.intValue());
|
((ConfigEntry) info).uiSetWithoutSaving(value != null ? value.intValue() : 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -249,7 +249,7 @@ public class ClassicConfigGUI
|
|||||||
protected void init()
|
protected void init()
|
||||||
{
|
{
|
||||||
super.init();
|
super.init();
|
||||||
if (!reload)
|
if (!this.reload)
|
||||||
{
|
{
|
||||||
ConfigBase.INSTANCE.configFileINSTANCE.loadFromFile();
|
ConfigBase.INSTANCE.configFileINSTANCE.loadFromFile();
|
||||||
}
|
}
|
||||||
@@ -276,7 +276,7 @@ public class ClassicConfigGUI
|
|||||||
(buttonWidget) -> {
|
(buttonWidget) -> {
|
||||||
ChangelogScreen changelogScreen = new ChangelogScreen(this);
|
ChangelogScreen changelogScreen = new ChangelogScreen(this);
|
||||||
if (changelogScreen.usable)
|
if (changelogScreen.usable)
|
||||||
Objects.requireNonNull(minecraft).setScreen(changelogScreen);
|
Objects.requireNonNull(this.minecraft).setScreen(changelogScreen);
|
||||||
else
|
else
|
||||||
LOGGER.warn("Changelog was not able to open");
|
LOGGER.warn("Changelog was not able to open");
|
||||||
},
|
},
|
||||||
@@ -286,17 +286,17 @@ public class ClassicConfigGUI
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
addBtn(MakeBtn(Translatable("distanthorizons.general.cancel"),
|
this.addBtn(MakeBtn(Translatable("distanthorizons.general.cancel"),
|
||||||
this.width / 2 - 154, this.height - 28,
|
this.width / 2 - 154, this.height - 28,
|
||||||
150, 20,
|
150, 20,
|
||||||
button ->
|
button ->
|
||||||
{
|
{
|
||||||
ConfigBase.INSTANCE.configFileINSTANCE.loadFromFile();
|
ConfigBase.INSTANCE.configFileINSTANCE.loadFromFile();
|
||||||
Objects.requireNonNull(minecraft).setScreen(parent);
|
Objects.requireNonNull(this.minecraft).setScreen(this.parent);
|
||||||
}));
|
}));
|
||||||
doneButton = addBtn(MakeBtn(Translatable("distanthorizons.general.done"), this.width / 2 + 4, this.height - 28, 150, 20, (button) -> {
|
this.doneButton = this.addBtn(MakeBtn(Translatable("distanthorizons.general.done"), this.width / 2 + 4, this.height - 28, 150, 20, (button) -> {
|
||||||
ConfigBase.INSTANCE.configFileINSTANCE.saveToFile();
|
ConfigBase.INSTANCE.configFileINSTANCE.saveToFile();
|
||||||
Objects.requireNonNull(minecraft).setScreen(parent);
|
Objects.requireNonNull(this.minecraft).setScreen(this.parent);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this.list = new ConfigListWidget(this.minecraft, this.width * 2, this.height, 32, 32, 25);
|
this.list = new ConfigListWidget(this.minecraft, this.width * 2, this.height, 32, 32, 25);
|
||||||
@@ -312,8 +312,8 @@ public class ClassicConfigGUI
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (info.getCategory().matches(category) && info.getAppearance().showInGui)
|
if (info.getCategory().matches(this.category) && info.getAppearance().showInGui)
|
||||||
addMenuItem(info);
|
this.addMenuItem(info);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@@ -336,7 +336,7 @@ public class ClassicConfigGUI
|
|||||||
private void addMenuItem(AbstractConfigType info)
|
private void addMenuItem(AbstractConfigType info)
|
||||||
{
|
{
|
||||||
initEntry(info, this.translationPrefix);
|
initEntry(info, this.translationPrefix);
|
||||||
Component name = Translatable(translationPrefix + info.getNameWCategory());
|
Component name = Translatable(this.translationPrefix + info.getNameWCategory());
|
||||||
|
|
||||||
|
|
||||||
if (ConfigEntry.class.isAssignableFrom(info.getClass()))
|
if (ConfigEntry.class.isAssignableFrom(info.getClass()))
|
||||||
@@ -345,7 +345,7 @@ public class ClassicConfigGUI
|
|||||||
((ConfigEntry) info).uiSetWithoutSaving(((ConfigEntry) info).getDefaultValue());
|
((ConfigEntry) info).uiSetWithoutSaving(((ConfigEntry) info).getDefaultValue());
|
||||||
((EntryInfo) info.guiValue).index = 0;
|
((EntryInfo) info.guiValue).index = 0;
|
||||||
this.reload = true;
|
this.reload = true;
|
||||||
Objects.requireNonNull(minecraft).setScreen(this);
|
Objects.requireNonNull(this.minecraft).setScreen(this);
|
||||||
};
|
};
|
||||||
int posX = this.width - ConfigScreenConfigs.SpaceFromRightScreen - 150 - ConfigScreenConfigs.ButtonWidthSpacing - ConfigScreenConfigs.ResetButtonWidth;
|
int posX = this.width - ConfigScreenConfigs.SpaceFromRightScreen - 150 - ConfigScreenConfigs.ButtonWidthSpacing - ConfigScreenConfigs.ResetButtonWidth;
|
||||||
int posZ = 0;
|
int posZ = 0;
|
||||||
@@ -359,17 +359,17 @@ public class ClassicConfigGUI
|
|||||||
Map.Entry<Button.OnPress, Function<Object, Component>> widget = (Map.Entry<Button.OnPress, Function<Object, Component>>) ((EntryInfo) info.guiValue).widget;
|
Map.Entry<Button.OnPress, Function<Object, Component>> widget = (Map.Entry<Button.OnPress, Function<Object, Component>>) ((EntryInfo) info.guiValue).widget;
|
||||||
if (info.getType().isEnum())
|
if (info.getType().isEnum())
|
||||||
{
|
{
|
||||||
widget.setValue(value -> Translatable(translationPrefix + "enum." + info.getType().getSimpleName() + "." + info.get().toString()));
|
widget.setValue(value -> Translatable(this.translationPrefix + "enum." + info.getType().getSimpleName() + "." + info.get().toString()));
|
||||||
}
|
}
|
||||||
this.list.addButton(MakeBtn(widget.getValue().apply(info.get()), this.width - 150 - ConfigScreenConfigs.SpaceFromRightScreen, 0, 150, 20, widget.getKey()), resetButton, null, name);
|
this.list.addButton(MakeBtn(widget.getValue().apply(info.get()), this.width - 150 - ConfigScreenConfigs.SpaceFromRightScreen, 0, 150, 20, widget.getKey()), resetButton, null, name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (((EntryInfo) info.guiValue).widget != null)
|
else if (((EntryInfo) info.guiValue).widget != null)
|
||||||
{
|
{
|
||||||
EditBox widget = new EditBox(font, this.width - 150 - ConfigScreenConfigs.SpaceFromRightScreen + 2, 0, 150 - 4, 20, null);
|
EditBox widget = new EditBox(this.font, this.width - 150 - ConfigScreenConfigs.SpaceFromRightScreen + 2, 0, 150 - 4, 20, Translatable(""));
|
||||||
widget.setMaxLength(150);
|
widget.setMaxLength(150);
|
||||||
widget.insertText(String.valueOf(info.get()));
|
widget.insertText(String.valueOf(info.get()));
|
||||||
Predicate<String> processor = ((BiFunction<EditBox, Button, Predicate<String>>) ((EntryInfo) info.guiValue).widget).apply(widget, doneButton);
|
Predicate<String> processor = ((BiFunction<EditBox, Button, Predicate<String>>) ((EntryInfo) info.guiValue).widget).apply(widget, this.doneButton);
|
||||||
widget.setFilter(processor);
|
widget.setFilter(processor);
|
||||||
this.list.addButton(widget, resetButton, null, name);
|
this.list.addButton(widget, resetButton, null, name);
|
||||||
return;
|
return;
|
||||||
@@ -379,7 +379,7 @@ public class ClassicConfigGUI
|
|||||||
{
|
{
|
||||||
Button widget = MakeBtn(name, this.width / 2 - 100, this.height - 28, 100 * 2, 20, (button -> {
|
Button widget = MakeBtn(name, this.width / 2 - 100, this.height - 28, 100 * 2, 20, (button -> {
|
||||||
ConfigBase.INSTANCE.configFileINSTANCE.saveToFile();
|
ConfigBase.INSTANCE.configFileINSTANCE.saveToFile();
|
||||||
Objects.requireNonNull(minecraft).setScreen(ClassicConfigGUI.getScreen(this.configBase, this, ((ConfigCategory) info).getDestination()));
|
Objects.requireNonNull(this.minecraft).setScreen(ClassicConfigGUI.getScreen(this.configBase, this, ((ConfigCategory) info).getDestination()));
|
||||||
}));
|
}));
|
||||||
this.list.addButton(widget, null, null, null);
|
this.list.addButton(widget, null, null, null);
|
||||||
return;
|
return;
|
||||||
@@ -420,16 +420,34 @@ public class ClassicConfigGUI
|
|||||||
#endif
|
#endif
|
||||||
this.list.render(matrices, mouseX, mouseY, delta); // Render buttons
|
this.list.render(matrices, mouseX, mouseY, delta); // Render buttons
|
||||||
|
|
||||||
DhDrawCenteredString(matrices, font, title, width / 2, 15, 0xFFFFFF); // Render title
|
// Render title
|
||||||
|
this.DhDrawCenteredString(matrices, this.font, this.title, this.width / 2, 15,
|
||||||
|
#if MC_VER < MC_1_21_6
|
||||||
|
0xFFFFFF // RGB white
|
||||||
|
#else
|
||||||
|
0xFFFFFFFF // ARGB white
|
||||||
|
#endif);
|
||||||
|
|
||||||
if (this.configBase.modID.equals("distanthorizons"))
|
if (this.configBase.modID.equals("distanthorizons"))
|
||||||
{
|
{
|
||||||
// Display version
|
// Display version
|
||||||
DhDrawString(matrices, font, TextOrLiteral(ModInfo.VERSION), 2, height - 10, 0xAAAAAA);
|
this.DhDrawString(matrices, this.font, TextOrLiteral(ModInfo.VERSION), 2, this.height - 10,
|
||||||
|
#if MC_VER < MC_1_21_6
|
||||||
|
0xAAAAAA // RGB white
|
||||||
|
#else
|
||||||
|
0xFFAAAAAA // ARGB white
|
||||||
|
#endif);
|
||||||
|
|
||||||
// If the update is pending, display this message to inform the user that it will apply when the game restarts
|
// If the update is pending, display this message to inform the user that it will apply when the game restarts
|
||||||
if (SelfUpdater.deleteOldJarOnJvmShutdown)
|
if (SelfUpdater.deleteOldJarOnJvmShutdown)
|
||||||
DhDrawString(matrices, font, Translatable(configBase.modID + ".updater.waitingForClose"), 4, height - 38, 0xFFFFFF);
|
{
|
||||||
|
this.DhDrawString(matrices, this.font, Translatable(this.configBase.modID + ".updater.waitingForClose"), 4, this.height - 38,
|
||||||
|
#if MC_VER < MC_1_21_6
|
||||||
|
0xFFFFFF // RGB white
|
||||||
|
#else
|
||||||
|
0xFFFFFFFF // ARGB white
|
||||||
|
#endif);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -659,8 +677,10 @@ public class ClassicConfigGUI
|
|||||||
if (text != null && (!text.getString().contains("spacer") || button != null))
|
if (text != null && (!text.getString().contains("spacer") || button != null))
|
||||||
#if MC_VER < MC_1_20_1
|
#if MC_VER < MC_1_20_1
|
||||||
GuiComponent.drawString(matrices, textRenderer, text, 12, y + 5, 0xFFFFFF);
|
GuiComponent.drawString(matrices, textRenderer, text, 12, y + 5, 0xFFFFFF);
|
||||||
|
#elif MC_VER < MC_1_21_6
|
||||||
|
matrices.drawString(textRenderer, this.text, 12, y + 5, 0xFFFFFF);
|
||||||
#else
|
#else
|
||||||
matrices.drawString(textRenderer, text, 12, y + 5, 0xFFFFFF);
|
matrices.drawString(textRenderer, this.text, 12, y + 5, 0xFFFFFFFF);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,27 @@ public class DhScreen extends Screen
|
|||||||
{
|
{
|
||||||
renderTooltip(guiStack, comp, x, y);
|
renderTooltip(guiStack, comp, x, y);
|
||||||
}
|
}
|
||||||
|
#elif MC_VER < MC_1_21_6
|
||||||
|
protected void DhDrawCenteredString(GuiGraphics guiStack, Font font, Component text, int x, int y, int color)
|
||||||
|
{
|
||||||
|
guiStack.drawCenteredString(font, text, x, y, color);
|
||||||
|
}
|
||||||
|
protected void DhDrawString(GuiGraphics guiStack, Font font, Component text, int x, int y, int color)
|
||||||
|
{
|
||||||
|
guiStack.drawString(font, text, x, y, color);
|
||||||
|
}
|
||||||
|
//protected void DhRenderTooltip(GuiGraphics guiStack, Font font, List<? extends net.minecraft.util.FormattedCharSequence> text, int x, int y)
|
||||||
|
//{
|
||||||
|
// guiStack.renderTooltip(font, text, x, y);
|
||||||
|
//}
|
||||||
|
protected void DhRenderComponentTooltip(GuiGraphics guiStack, Font font, List<Component> comp, int x, int y)
|
||||||
|
{
|
||||||
|
guiStack.renderComponentTooltip(font, comp, x, y);
|
||||||
|
}
|
||||||
|
protected void DhRenderTooltip(GuiGraphics guiStack, Font font, Component text, int x, int y)
|
||||||
|
{
|
||||||
|
guiStack.renderTooltip(font, text, x, y);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
protected void DhDrawCenteredString(GuiGraphics guiStack, Font font, Component text, int x, int y, int color)
|
protected void DhDrawCenteredString(GuiGraphics guiStack, Font font, Component text, int x, int y, int color)
|
||||||
{
|
{
|
||||||
@@ -61,17 +82,20 @@ public class DhScreen extends Screen
|
|||||||
{
|
{
|
||||||
guiStack.drawString(font, text, x, y, color);
|
guiStack.drawString(font, text, x, y, color);
|
||||||
}
|
}
|
||||||
protected void DhRenderTooltip(GuiGraphics guiStack, Font font, List<? extends net.minecraft.util.FormattedCharSequence> text, int x, int y)
|
//protected void DhRenderTooltip(GuiGraphics guiStack, Font font, List<? extends net.minecraft.util.FormattedCharSequence> text, int x, int y)
|
||||||
{
|
//{
|
||||||
guiStack.renderTooltip(font, text, x, y);
|
// //guiStack.renderTooltip(font, text, x, y);
|
||||||
}
|
//}
|
||||||
protected void DhRenderComponentTooltip(GuiGraphics guiStack, Font font, List<Component> comp, int x, int y)
|
protected void DhRenderComponentTooltip(GuiGraphics guiStack, Font font, List<Component> comp, int x, int y)
|
||||||
{
|
{
|
||||||
guiStack.renderComponentTooltip(font, comp, x, y);
|
guiStack.setComponentTooltipForNextFrame(font, comp, x, y);
|
||||||
}
|
}
|
||||||
protected void DhRenderTooltip(GuiGraphics guiStack, Font font, Component text, int x, int y)
|
protected void DhRenderTooltip(GuiGraphics guiStack, Font font, Component text, int x, int y)
|
||||||
{
|
{
|
||||||
guiStack.renderTooltip(font, text, x, y);
|
guiStack.setTooltipForNextFrame(font, text, x, y);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-2
@@ -39,9 +39,13 @@ import net.minecraft.client.renderer.GameRenderer;
|
|||||||
#elif MC_VER < MC_1_20_2
|
#elif MC_VER < MC_1_20_2
|
||||||
import net.minecraft.client.gui.components.ImageButton;
|
import net.minecraft.client.gui.components.ImageButton;
|
||||||
import net.minecraft.client.gui.GuiGraphics;
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
|
#elif MC_VER < MC_1_21_6
|
||||||
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
|
import net.minecraft.client.renderer.RenderType;
|
||||||
#else
|
#else
|
||||||
import net.minecraft.client.gui.GuiGraphics;
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
import net.minecraft.client.renderer.RenderType;
|
||||||
|
import net.minecraft.client.renderer.RenderPipelines;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -172,9 +176,15 @@ public class TexturedButtonWidget extends Button
|
|||||||
{
|
{
|
||||||
#if MC_VER < MC_1_21_3
|
#if MC_VER < MC_1_21_3
|
||||||
matrices.blitSprite(SPRITES.get(this.active, this.isHoveredOrFocused()), this.getX(), this.getY(), this.getWidth(), this.getHeight());
|
matrices.blitSprite(SPRITES.get(this.active, this.isHoveredOrFocused()), this.getX(), this.getY(), this.getWidth(), this.getHeight());
|
||||||
|
#elif MC_VER < MC_1_21_6
|
||||||
|
matrices.blitSprite(
|
||||||
|
RenderType::guiTextured,
|
||||||
|
SPRITES.get(this.active, this.isHoveredOrFocused()),
|
||||||
|
this.getX(), this.getY(),
|
||||||
|
this.getWidth(), this.getHeight());
|
||||||
#else
|
#else
|
||||||
matrices.blitSprite(
|
matrices.blitSprite(
|
||||||
RenderType::guiTextured,
|
RenderPipelines.GUI_TEXTURED,
|
||||||
SPRITES.get(this.active, this.isHoveredOrFocused()),
|
SPRITES.get(this.active, this.isHoveredOrFocused()),
|
||||||
this.getX(), this.getY(),
|
this.getX(), this.getY(),
|
||||||
this.getWidth(), this.getHeight());
|
this.getWidth(), this.getHeight());
|
||||||
@@ -196,7 +206,7 @@ public class TexturedButtonWidget extends Button
|
|||||||
|
|
||||||
#if MC_VER < MC_1_21_3
|
#if MC_VER < MC_1_21_3
|
||||||
matrices.blit(this.textureResourceLocation, this.getX(), this.getY(), this.u, this.v + (this.hoveredVOffset * i), this.width, this.height, this.textureWidth, this.textureHeight);
|
matrices.blit(this.textureResourceLocation, this.getX(), this.getY(), this.u, this.v + (this.hoveredVOffset * i), this.width, this.height, this.textureWidth, this.textureHeight);
|
||||||
#else
|
#elif MC_VER < MC_1_21_6
|
||||||
matrices.blit(
|
matrices.blit(
|
||||||
RenderType::guiTextured,
|
RenderType::guiTextured,
|
||||||
this.textureResourceLocation,
|
this.textureResourceLocation,
|
||||||
@@ -204,6 +214,14 @@ public class TexturedButtonWidget extends Button
|
|||||||
this.u, this.v + (this.hoveredVOffset * i),
|
this.u, this.v + (this.hoveredVOffset * i),
|
||||||
this.width, this.height,
|
this.width, this.height,
|
||||||
this.textureWidth, this.textureHeight);
|
this.textureWidth, this.textureHeight);
|
||||||
|
#else
|
||||||
|
matrices.blit(
|
||||||
|
RenderPipelines.GUI_TEXTURED,
|
||||||
|
this.textureResourceLocation,
|
||||||
|
this.getX(), this.getY(),
|
||||||
|
this.u, this.v + (this.hoveredVOffset * i),
|
||||||
|
this.width, this.height,
|
||||||
|
this.textureWidth, this.textureHeight);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
+22
-6
@@ -169,8 +169,10 @@ public class UpdateModScreen extends DhScreen
|
|||||||
{
|
{
|
||||||
#if MC_VER < MC_1_20_2
|
#if MC_VER < MC_1_20_2
|
||||||
this.renderBackground(matrices); // Render background
|
this.renderBackground(matrices); // Render background
|
||||||
#else
|
#elif MC_VER < MC_1_21_6
|
||||||
this.renderBackground(matrices, mouseX, mouseY, delta); // Render background
|
this.renderBackground(matrices, mouseX, mouseY, delta); // Render background
|
||||||
|
#else
|
||||||
|
// background blur is already being rendered, rendering again causes the game to crash
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// TODO: add the tooltips for the buttons
|
// TODO: add the tooltips for the buttons
|
||||||
@@ -178,16 +180,30 @@ public class UpdateModScreen extends DhScreen
|
|||||||
// TODO: Add tooltips
|
// TODO: Add tooltips
|
||||||
|
|
||||||
// Render the text's
|
// Render the text's
|
||||||
DhDrawCenteredString(matrices, this.font, Translatable(ModInfo.ID + ".updater.text1"), this.width / 2, this.height / 2 - 35, 0xFFFFFF);
|
this.DhDrawCenteredString(matrices, this.font,
|
||||||
DhDrawCenteredString(matrices, this.font,
|
Translatable(ModInfo.ID + ".updater.text1"),
|
||||||
Translatable(ModInfo.ID + ".updater.text2", currentVer, nextVer),
|
this.width / 2, this.height / 2 - 35,
|
||||||
this.width / 2, this.height / 2 - 20, 0x52FD52);
|
#if MC_VER < MC_1_21_6
|
||||||
|
0xFFFFFF // RGB
|
||||||
|
#else
|
||||||
|
0xFFFFFFFF // ARGB
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
this.DhDrawCenteredString(matrices, this.font,
|
||||||
|
Translatable(ModInfo.ID + ".updater.text2", this.currentVer, this.nextVer),
|
||||||
|
this.width / 2, this.height / 2 - 20,
|
||||||
|
#if MC_VER < MC_1_21_6
|
||||||
|
0x52FD52 // RGB
|
||||||
|
#else
|
||||||
|
0xFF52FD52 // ARGB
|
||||||
|
#endif
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClose()
|
public void onClose()
|
||||||
{
|
{
|
||||||
Objects.requireNonNull(minecraft).setScreen(this.parent); // Goto the parent screen
|
Objects.requireNonNull(this.minecraft).setScreen(this.parent); // Go to the parent screen
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+2
-2
@@ -36,9 +36,9 @@ public class KeyedClientLevelManager implements IKeyedClientLevelManager
|
|||||||
public IServerKeyedClientLevel getServerKeyedLevel() { return this.serverKeyedLevel; }
|
public IServerKeyedClientLevel getServerKeyedLevel() { return this.serverKeyedLevel; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IServerKeyedClientLevel setServerKeyedLevel(IClientLevelWrapper clientLevel, String levelKey)
|
public IServerKeyedClientLevel setServerKeyedLevel(IClientLevelWrapper clientLevel, String serverKey, String levelKey)
|
||||||
{
|
{
|
||||||
IServerKeyedClientLevel keyedLevel = new ServerKeyedClientLevel((ClientLevel) clientLevel.getWrappedMcObject(), levelKey);
|
IServerKeyedClientLevel keyedLevel = new ServerKeyedClientLevel((ClientLevel) clientLevel.getWrappedMcObject(), serverKey, levelKey);
|
||||||
this.serverKeyedLevel = keyedLevel;
|
this.serverKeyedLevel = keyedLevel;
|
||||||
this.enabled = true;
|
this.enabled = true;
|
||||||
return keyedLevel;
|
return keyedLevel;
|
||||||
|
|||||||
+7
-3
@@ -2,24 +2,28 @@ package com.seibel.distanthorizons.common.wrappers.level;
|
|||||||
|
|
||||||
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
|
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
|
||||||
import com.seibel.distanthorizons.core.level.IServerKeyedClientLevel;
|
import com.seibel.distanthorizons.core.level.IServerKeyedClientLevel;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper;
|
|
||||||
import com.seibel.distanthorizons.coreapi.util.StringUtil;
|
|
||||||
import net.minecraft.client.multiplayer.ClientLevel;
|
import net.minecraft.client.multiplayer.ClientLevel;
|
||||||
|
|
||||||
public class ServerKeyedClientLevel extends ClientLevelWrapper implements IServerKeyedClientLevel
|
public class ServerKeyedClientLevel extends ClientLevelWrapper implements IServerKeyedClientLevel
|
||||||
{
|
{
|
||||||
|
/** Returns the folder name the server wants the client to use. */
|
||||||
|
private final String serverKey;
|
||||||
|
|
||||||
/** A unique identifier (generally the level's name) for differentiating multiverse levels */
|
/** A unique identifier (generally the level's name) for differentiating multiverse levels */
|
||||||
private final String serverLevelKey;
|
private final String serverLevelKey;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public ServerKeyedClientLevel(ClientLevel level, String serverLevelKey)
|
public ServerKeyedClientLevel(ClientLevel level, String serverKey, String serverLevelKey)
|
||||||
{
|
{
|
||||||
super(level);
|
super(level);
|
||||||
|
this.serverKey = serverKey;
|
||||||
this.serverLevelKey = serverLevelKey;
|
this.serverLevelKey = serverLevelKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getServerKey() { return this.serverKey; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getServerLevelKey() { return this.serverLevelKey; }
|
public String getServerLevelKey() { return this.serverLevelKey; }
|
||||||
|
|||||||
+2
-2
@@ -21,7 +21,7 @@ package com.seibel.distanthorizons.common.wrappers.minecraft;
|
|||||||
|
|
||||||
#if MC_VER < MC_1_21_5
|
#if MC_VER < MC_1_21_5
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
#elif MC_VER == MC_1_21_5
|
#elif MC_VER >= MC_1_21_5
|
||||||
import com.mojang.blaze3d.opengl.GlStateManager;
|
import com.mojang.blaze3d.opengl.GlStateManager;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -233,7 +233,7 @@ public class MinecraftGLWrapper implements IMinecraftGLWrapper
|
|||||||
GlStateManager._activeTexture(textureId);
|
GlStateManager._activeTexture(textureId);
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public int getActiveTexture() { return GL32.glGetInteger(GL32.GL_ACTIVE_TEXTURE); }
|
public int getActiveTexture() { return GL32.glGetInteger(GL32.GL_TEXTURE_BINDING_2D); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Always binds to {@link GL32#GL_TEXTURE_2D}
|
* Always binds to {@link GL32#GL_TEXTURE_2D}
|
||||||
|
|||||||
+49
-8
@@ -33,9 +33,12 @@ import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
|||||||
import com.seibel.distanthorizons.core.util.ColorUtil;
|
import com.seibel.distanthorizons.core.util.ColorUtil;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.misc.ILightMapWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.misc.ILightMapWrapper;
|
||||||
|
|
||||||
#if MC_VER >= MC_1_17_1
|
#if MC_VER < MC_1_17_1
|
||||||
|
#elif MC_VER < MC_1_21_6
|
||||||
import net.minecraft.client.renderer.FogRenderer;
|
import net.minecraft.client.renderer.FogRenderer;
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
|
#else
|
||||||
|
import net.minecraft.client.renderer.fog.FogRenderer;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if MC_VER < MC_1_19_4
|
#if MC_VER < MC_1_19_4
|
||||||
@@ -43,8 +46,6 @@ import org.joml.Matrix4f;
|
|||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
#else
|
#else
|
||||||
#endif
|
#endif
|
||||||
#if MC_VER >= MC_1_20_2
|
|
||||||
#endif
|
|
||||||
|
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.AbstractOptifineAccessor;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.AbstractOptifineAccessor;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper;
|
||||||
@@ -73,7 +74,6 @@ import org.joml.Vector4f;
|
|||||||
|
|
||||||
#if MC_VER >= MC_1_21_5
|
#if MC_VER >= MC_1_21_5
|
||||||
import com.mojang.blaze3d.opengl.GlTexture;
|
import com.mojang.blaze3d.opengl.GlTexture;
|
||||||
import org.lwjgl.opengl.GL32;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -109,6 +109,11 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper
|
|||||||
public boolean colorTextureCastFailLogged = false;
|
public boolean colorTextureCastFailLogged = false;
|
||||||
public boolean depthTextureCastFailLogged = false;
|
public boolean depthTextureCastFailLogged = false;
|
||||||
|
|
||||||
|
#if MC_VER < MC_1_21_6
|
||||||
|
#else
|
||||||
|
private static FogRenderer mcFogRenderer = null;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//=========//
|
//=========//
|
||||||
@@ -126,11 +131,22 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper
|
|||||||
/** Unless you really need to know if the player is blind, use {@link MinecraftRenderWrapper#isFogStateSpecial()}/{@link IMinecraftRenderWrapper#isFogStateSpecial()} instead */
|
/** Unless you really need to know if the player is blind, use {@link MinecraftRenderWrapper#isFogStateSpecial()}/{@link IMinecraftRenderWrapper#isFogStateSpecial()} instead */
|
||||||
public boolean playerHasBlindingEffect()
|
public boolean playerHasBlindingEffect()
|
||||||
{
|
{
|
||||||
return MC.player.getActiveEffectsMap().get(MobEffects.BLINDNESS) != null
|
if (MC.player == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (MC.player.getActiveEffectsMap() == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return MC.player.getActiveEffectsMap().get(MobEffects.BLINDNESS) != null
|
||||||
#if MC_VER >= MC_1_19_2
|
#if MC_VER >= MC_1_19_2
|
||||||
|| MC.player.getActiveEffectsMap().get(MobEffects.DARKNESS) != null // Deep dark effect
|
|| MC.player.getActiveEffectsMap().get(MobEffects.DARKNESS) != null // Deep dark effect
|
||||||
#endif
|
#endif
|
||||||
;
|
;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -163,7 +179,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper
|
|||||||
Math.max(0f, Math.min(colorValues[2], 1f)), // b
|
Math.max(0f, Math.min(colorValues[2], 1f)), // b
|
||||||
Math.max(0f, Math.min(colorValues[3], 1f)) // a
|
Math.max(0f, Math.min(colorValues[3], 1f)) // a
|
||||||
);
|
);
|
||||||
#else
|
#elif MC_VER < MC_1_21_6
|
||||||
Vector4f colorValues = FogRenderer.computeFogColor(MC.gameRenderer.getMainCamera(), partialTicks, MC.level, 1, MC.gameRenderer.getDarkenWorldAmount(partialTicks));
|
Vector4f colorValues = FogRenderer.computeFogColor(MC.gameRenderer.getMainCamera(), partialTicks, MC.level, 1, MC.gameRenderer.getDarkenWorldAmount(partialTicks));
|
||||||
return new Color(
|
return new Color(
|
||||||
Math.max(0f, Math.min(colorValues.x, 1f)), // r
|
Math.max(0f, Math.min(colorValues.x, 1f)), // r
|
||||||
@@ -171,6 +187,31 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper
|
|||||||
Math.max(0f, Math.min(colorValues.z, 1f)), // b
|
Math.max(0f, Math.min(colorValues.z, 1f)), // b
|
||||||
Math.max(0f, Math.min(colorValues.w, 1f)) // a
|
Math.max(0f, Math.min(colorValues.w, 1f)) // a
|
||||||
);
|
);
|
||||||
|
#else
|
||||||
|
|
||||||
|
if (mcFogRenderer == null)
|
||||||
|
{
|
||||||
|
mcFogRenderer = new FogRenderer();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (MC.level == null)
|
||||||
|
{
|
||||||
|
// shouldn't happen, but just in case
|
||||||
|
return Color.white;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean isFoggy =
|
||||||
|
MC.level.effects().isFoggyAt(
|
||||||
|
MC.gameRenderer.getMainCamera().getBlockPosition().getX(),
|
||||||
|
MC.gameRenderer.getMainCamera().getBlockPosition().getZ())
|
||||||
|
|| MC.gui.getBossOverlay().shouldCreateWorldFog();
|
||||||
|
Vector4f colorValues = mcFogRenderer.setupFog(MC.gameRenderer.getMainCamera(), MC.options.getEffectiveRenderDistance(), isFoggy, MC.deltaTracker, MC.gameRenderer.getDarkenWorldAmount(MC.deltaTracker.getGameTimeDeltaPartialTick(true)), MC.level);
|
||||||
|
return new Color(
|
||||||
|
Math.max(0f, Math.min(colorValues.x, 1f)), // r
|
||||||
|
Math.max(0f, Math.min(colorValues.y, 1f)), // g
|
||||||
|
Math.max(0f, Math.min(colorValues.z, 1f)), // b
|
||||||
|
Math.max(0f, Math.min(colorValues.w, 1f)) // a
|
||||||
|
);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
// getSpecialFogColor() is the same as getFogColor()
|
// getSpecialFogColor() is the same as getFogColor()
|
||||||
|
|||||||
+11
-2
@@ -54,8 +54,10 @@ public class ServerPlayerWrapper implements IServerPlayerWrapper
|
|||||||
{
|
{
|
||||||
#if MC_VER < MC_1_20_1
|
#if MC_VER < MC_1_20_1
|
||||||
level = this.getServerPlayer().getLevel();
|
level = this.getServerPlayer().getLevel();
|
||||||
#else
|
#elif MC_VER < MC_1_21_6
|
||||||
level = this.getServerPlayer().serverLevel();
|
level = this.getServerPlayer().serverLevel();
|
||||||
|
#else
|
||||||
|
level = this.getServerPlayer().level();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,7 +72,14 @@ public class ServerPlayerWrapper implements IServerPlayerWrapper
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getViewDistance() { return this.getServerPlayer().server.getPlayerList().getViewDistance(); }
|
public int getViewDistance()
|
||||||
|
{
|
||||||
|
#if MC_VER < MC_1_21_6
|
||||||
|
return this.getServerPlayer().server.getPlayerList().getViewDistance();
|
||||||
|
#else
|
||||||
|
return this.getServerPlayer().getServer().getPlayerList().getViewDistance();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SocketAddress getRemoteAddress()
|
public SocketAddress getRemoteAddress()
|
||||||
|
|||||||
+25
-5
@@ -37,6 +37,7 @@ import java.util.Collections;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
#if MC_VER <= MC_1_20_4
|
#if MC_VER <= MC_1_20_4
|
||||||
import net.minecraft.world.level.chunk.ChunkStatus;
|
import net.minecraft.world.level.chunk.ChunkStatus;
|
||||||
@@ -66,6 +67,10 @@ public class ClientLevelWrapper implements IClientLevelWrapper
|
|||||||
private final ClientLevel level;
|
private final ClientLevel level;
|
||||||
private final ConcurrentHashMap<BlockState, ClientBlockStateColorCache> blockCache = new ConcurrentHashMap<>();
|
private final ConcurrentHashMap<BlockState, ClientBlockStateColorCache> blockCache = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
/** cached method reference to reduce GC overhead */
|
||||||
|
private final Function<BlockState, ClientBlockStateColorCache> cachedBlockColorCacheFunction = (blockState) -> this.createBlockColorCache(blockState);
|
||||||
|
|
||||||
|
|
||||||
private BlockStateWrapper dirtBlockWrapper;
|
private BlockStateWrapper dirtBlockWrapper;
|
||||||
private BiomeWrapper plainsBiomeWrapper;
|
private BiomeWrapper plainsBiomeWrapper;
|
||||||
@Deprecated // TODO circular references are bad
|
@Deprecated // TODO circular references are bad
|
||||||
@@ -105,14 +110,26 @@ public class ClientLevelWrapper implements IClientLevelWrapper
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return LEVEL_WRAPPER_REF_BY_CLIENT_LEVEL.compute(level, (newLevel, levelRef) ->
|
|
||||||
|
WeakReference<ClientLevelWrapper> levelRef = LEVEL_WRAPPER_REF_BY_CLIENT_LEVEL.get(level);
|
||||||
|
if (levelRef != null)
|
||||||
{
|
{
|
||||||
if (levelRef != null)
|
ClientLevelWrapper levelWrapper = levelRef.get();
|
||||||
|
if (levelWrapper != null)
|
||||||
{
|
{
|
||||||
ClientLevelWrapper oldLevelWrapper = levelRef.get();
|
return levelWrapper;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return LEVEL_WRAPPER_REF_BY_CLIENT_LEVEL.compute(level, (newLevel, newLevelRef) ->
|
||||||
|
{
|
||||||
|
if (newLevelRef != null)
|
||||||
|
{
|
||||||
|
ClientLevelWrapper oldLevelWrapper = newLevelRef.get();
|
||||||
if (oldLevelWrapper != null)
|
if (oldLevelWrapper != null)
|
||||||
{
|
{
|
||||||
return levelRef;
|
return newLevelRef;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,10 +179,13 @@ public class ClientLevelWrapper implements IClientLevelWrapper
|
|||||||
{
|
{
|
||||||
ClientBlockStateColorCache blockColorCache = this.blockCache.computeIfAbsent(
|
ClientBlockStateColorCache blockColorCache = this.blockCache.computeIfAbsent(
|
||||||
((BlockStateWrapper) blockWrapper).blockState,
|
((BlockStateWrapper) blockWrapper).blockState,
|
||||||
(block) -> new ClientBlockStateColorCache(block, this));
|
this.cachedBlockColorCacheFunction);
|
||||||
|
|
||||||
return blockColorCache.getColor((BiomeWrapper) biome, pos);
|
return blockColorCache.getColor((BiomeWrapper) biome, pos);
|
||||||
}
|
}
|
||||||
|
/** used by {@link ClientLevelWrapper#cachedBlockColorCacheFunction} */
|
||||||
|
private ClientBlockStateColorCache createBlockColorCache(BlockState block) { return new ClientBlockStateColorCache(block, this); }
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getDirtBlockColor()
|
public int getDirtBlockColor()
|
||||||
|
|||||||
+10
-1
@@ -162,7 +162,7 @@ public class ChunkLoader
|
|||||||
#if MC_VER < MC_1_18_2
|
#if MC_VER < MC_1_18_2
|
||||||
if (chunkType != ChunkStatus.ChunkType.LEVELCHUNK)
|
if (chunkType != ChunkStatus.ChunkType.LEVELCHUNK)
|
||||||
return null;
|
return null;
|
||||||
#else
|
#elif MC_VER < MC_1_21_6
|
||||||
|
|
||||||
BlendingData blendingData = readBlendingData(tagLevel);
|
BlendingData blendingData = readBlendingData(tagLevel);
|
||||||
#if MC_VER < MC_1_19_2
|
#if MC_VER < MC_1_19_2
|
||||||
@@ -172,7 +172,15 @@ public class ChunkLoader
|
|||||||
if (chunkType == #if MC_VER < MC_1_20_6 ChunkStatus.ChunkType.PROTOCHUNK #else ChunkType.PROTOCHUNK #endif && blendingData == null)
|
if (chunkType == #if MC_VER < MC_1_20_6 ChunkStatus.ChunkType.PROTOCHUNK #else ChunkType.PROTOCHUNK #endif && blendingData == null)
|
||||||
return null;
|
return null;
|
||||||
#endif
|
#endif
|
||||||
|
#else
|
||||||
|
|
||||||
|
// ignore blending data, there appears to be an issue with parsing it in 1.21.6
|
||||||
|
BlendingData blendingData = null;
|
||||||
|
|
||||||
|
if (chunkType == ChunkType.PROTOCHUNK)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
long inhabitedTime = tagGetLong(tagLevel, "InhabitedTime");
|
long inhabitedTime = tagGetLong(tagLevel, "InhabitedTime");
|
||||||
@@ -489,6 +497,7 @@ public class ChunkLoader
|
|||||||
#if MC_VER < MC_1_21_3
|
#if MC_VER < MC_1_21_3
|
||||||
blendingData = BlendingData.CODEC.parse(blendingDataTag).resultOrPartial((message) -> logParsingWarningOnce(message)).orElse(null);
|
blendingData = BlendingData.CODEC.parse(blendingDataTag).resultOrPartial((message) -> logParsingWarningOnce(message)).orElse(null);
|
||||||
#else
|
#else
|
||||||
|
// blending data appears to have changed as of 1.21.6 causing a class cast exception here due to it being wrapped in a Java.Optional
|
||||||
blendingData = BlendingData.unpack(BlendingData.Packed.CODEC.parse(blendingDataTag).resultOrPartial((message) -> logParsingWarningOnce(message)).orElse(null));
|
blendingData = BlendingData.unpack(BlendingData.Packed.CODEC.parse(blendingDataTag).resultOrPartial((message) -> logParsingWarningOnce(message)).orElse(null));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
Submodule coreSubProjects updated: 91743bf742...034ec7d656
@@ -228,6 +228,14 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy
|
|||||||
modelViewMatrix = McObjectConverter.Convert(renderContext.positionMatrix());
|
modelViewMatrix = McObjectConverter.Convert(renderContext.positionMatrix());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
//LOGGER.info("\n\n" +
|
||||||
|
// "Level Render\n" +
|
||||||
|
// "Mc MVM: \n" + modelViewMatrix.toString() + "\n" +
|
||||||
|
// "Mc Proj: \n" + projectionMatrix.toString()
|
||||||
|
//);
|
||||||
|
|
||||||
|
|
||||||
this.clientApi.renderLods(ClientLevelWrapper.getWrapper(renderContext.world()),
|
this.clientApi.renderLods(ClientLevelWrapper.getWrapper(renderContext.world()),
|
||||||
modelViewMatrix,
|
modelViewMatrix,
|
||||||
projectionMatrix,
|
projectionMatrix,
|
||||||
@@ -276,6 +284,17 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy
|
|||||||
modelViewMatrix = McObjectConverter.Convert(renderContext.positionMatrix());
|
modelViewMatrix = McObjectConverter.Convert(renderContext.positionMatrix());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if MC_VER < MC_1_21_6
|
||||||
|
// rendered in MixinLevelRenderer
|
||||||
|
#else
|
||||||
|
ClientApi.INSTANCE.renderDeferredLodsForShaders(ClientLevelWrapper.getWrapper(renderContext.world()),
|
||||||
|
ClientApi.RENDER_STATE.mcModelViewMatrix,
|
||||||
|
ClientApi.RENDER_STATE.mcProjectionMatrix,
|
||||||
|
ClientApi.RENDER_STATE.frameTime
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
|
||||||
this.clientApi.renderFade(
|
this.clientApi.renderFade(
|
||||||
modelViewMatrix,
|
modelViewMatrix,
|
||||||
projectionMatrix,
|
projectionMatrix,
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
package com.seibel.distanthorizons.fabric;
|
package com.seibel.distanthorizons.fabric;
|
||||||
|
|
||||||
import com.mojang.brigadier.CommandDispatcher;
|
import com.mojang.brigadier.CommandDispatcher;
|
||||||
|
import com.seibel.distanthorizons.api.enums.config.EDhApiMcRenderingFadeMode;
|
||||||
import com.seibel.distanthorizons.common.AbstractModInitializer;
|
import com.seibel.distanthorizons.common.AbstractModInitializer;
|
||||||
import com.seibel.distanthorizons.core.config.Config;
|
import com.seibel.distanthorizons.core.config.Config;
|
||||||
import com.seibel.distanthorizons.core.config.ConfigBase;
|
import com.seibel.distanthorizons.core.config.ConfigBase;
|
||||||
@@ -126,7 +127,8 @@ public class FabricMain extends AbstractModInitializer implements ClientModIniti
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void subscribeClientStartedEvent(Runnable eventHandler) { ClientLifecycleEvents.CLIENT_STARTED.register((mc) -> eventHandler.run()); }
|
protected void subscribeClientStartedEvent(Runnable eventHandler)
|
||||||
|
{ ClientLifecycleEvents.CLIENT_STARTED.register((mc) -> eventHandler.run()); }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void subscribeServerStartingEvent(Consumer<MinecraftServer> eventHandler)
|
protected void subscribeServerStartingEvent(Consumer<MinecraftServer> eventHandler)
|
||||||
|
|||||||
+106
-15
@@ -22,31 +22,51 @@ package com.seibel.distanthorizons.fabric.mixins.client;
|
|||||||
import com.seibel.distanthorizons.core.config.Config;
|
import com.seibel.distanthorizons.core.config.Config;
|
||||||
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
||||||
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
|
||||||
|
|
||||||
import net.minecraft.client.Camera;
|
import net.minecraft.client.Camera;
|
||||||
import net.minecraft.client.renderer.FogRenderer;
|
|
||||||
import net.minecraft.client.renderer.FogRenderer.FogMode;
|
|
||||||
import net.minecraft.world.effect.MobEffects;
|
import net.minecraft.world.effect.MobEffects;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
|
|
||||||
#if MC_VER < MC_1_17_1
|
#if MC_VER < MC_1_17_1
|
||||||
import net.minecraft.world.level.material.FluidState;
|
import net.minecraft.world.level.material.FluidState;
|
||||||
|
import net.minecraft.client.renderer.FogRenderer;
|
||||||
|
import net.minecraft.client.renderer.FogRenderer.FogMode;
|
||||||
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
|
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
#elif MC_VER < MC_1_21_3
|
#elif MC_VER < MC_1_21_3
|
||||||
import net.minecraft.world.level.material.FogType;
|
import net.minecraft.world.level.material.FogType;
|
||||||
#else
|
import net.minecraft.client.renderer.FogRenderer;
|
||||||
|
import net.minecraft.client.renderer.FogRenderer.FogMode;
|
||||||
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
|
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
#elif MC_VER < MC_1_21_6
|
||||||
import net.minecraft.world.level.material.FogType;
|
import net.minecraft.world.level.material.FogType;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
import com.mojang.blaze3d.shaders.FogShape;
|
import com.mojang.blaze3d.shaders.FogShape;
|
||||||
|
import net.minecraft.client.renderer.FogRenderer;
|
||||||
|
import net.minecraft.client.renderer.FogRenderer.FogMode;
|
||||||
import net.minecraft.client.renderer.FogParameters;
|
import net.minecraft.client.renderer.FogParameters;
|
||||||
import org.joml.Vector4f;
|
import org.joml.Vector4f;
|
||||||
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
|
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
#else
|
||||||
|
import net.minecraft.world.level.material.FogType;
|
||||||
|
import net.minecraft.client.renderer.fog.FogRenderer;
|
||||||
|
import net.minecraft.client.renderer.fog.FogData;
|
||||||
|
|
||||||
|
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
|
||||||
|
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@Mixin(FogRenderer.class)
|
@Mixin(FogRenderer.class)
|
||||||
@@ -66,18 +86,23 @@ public class MixinFogRenderer
|
|||||||
#elif MC_VER < MC_1_21_3
|
#elif MC_VER < MC_1_21_3
|
||||||
@Inject(at = @At("RETURN"), method = "setupFog")
|
@Inject(at = @At("RETURN"), method = "setupFog")
|
||||||
private static void disableSetupFog(Camera camera, FogMode fogMode, float f, boolean bl, float g, CallbackInfo callback)
|
private static void disableSetupFog(Camera camera, FogMode fogMode, float f, boolean bl, float g, CallbackInfo callback)
|
||||||
#else
|
#elif MC_VER < MC_1_21_6
|
||||||
@Inject(at = @At("RETURN"), method = "setupFog", cancellable = true)
|
@Inject(at = @At("RETURN"), method = "setupFog", cancellable = true)
|
||||||
private static void disableSetupFog(Camera camera, FogMode fogMode, Vector4f vector4f, float f, boolean bl, float g, CallbackInfoReturnable<FogParameters> callback)
|
private static void disableSetupFog(Camera camera, FogMode fogMode, Vector4f vector4f, float f, boolean bl, float g, CallbackInfoReturnable<FogParameters> callback)
|
||||||
|
#else
|
||||||
|
@Unique
|
||||||
|
private static void unused()
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
boolean cameraNotInFluid = cameraNotInFluid(camera);
|
#if MC_VER < MC_1_21_6
|
||||||
|
boolean cancelFog = cancelFog(camera, fogMode);
|
||||||
|
#elif MC_VER < MC_1_21_6
|
||||||
|
boolean cancelFog = cancelFog(camera);
|
||||||
|
#else
|
||||||
|
boolean cancelFog = cancelFog();
|
||||||
|
#endif
|
||||||
|
|
||||||
Entity entity = camera.getEntity();
|
if (cancelFog)
|
||||||
boolean isSpecialFog = (entity instanceof LivingEntity) && ((LivingEntity) entity).hasEffect(MobEffects.BLINDNESS);
|
|
||||||
if (!isSpecialFog && cameraNotInFluid && fogMode == FogMode.FOG_TERRAIN
|
|
||||||
&& !SingletonInjector.INSTANCE.get(IMinecraftRenderWrapper.class).isFogStateSpecial()
|
|
||||||
&& !Config.Client.Advanced.Graphics.Fog.enableVanillaFog.get())
|
|
||||||
{
|
{
|
||||||
#if MC_VER < MC_1_17_1
|
#if MC_VER < MC_1_17_1
|
||||||
RenderSystem.fogStart(A_REALLY_REALLY_BIG_VALUE);
|
RenderSystem.fogStart(A_REALLY_REALLY_BIG_VALUE);
|
||||||
@@ -85,10 +110,74 @@ public class MixinFogRenderer
|
|||||||
#elif MC_VER < MC_1_21_3
|
#elif MC_VER < MC_1_21_3
|
||||||
RenderSystem.setShaderFogStart(A_REALLY_REALLY_BIG_VALUE);
|
RenderSystem.setShaderFogStart(A_REALLY_REALLY_BIG_VALUE);
|
||||||
RenderSystem.setShaderFogEnd(A_EVEN_LARGER_VALUE);
|
RenderSystem.setShaderFogEnd(A_EVEN_LARGER_VALUE);
|
||||||
#else
|
#elif MC_VER < MC_1_21_6
|
||||||
callback.setReturnValue(FogParameters.NO_FOG);
|
callback.setReturnValue(FogParameters.NO_FOG);
|
||||||
|
#else
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if MC_VER < MC_1_21_6
|
||||||
|
#else
|
||||||
|
|
||||||
|
// In MC's FogRenderer they clamp the "renderDistanceEnd" fog field to the render distance,
|
||||||
|
// which prevents us from disabling the vanilla fog.
|
||||||
|
// This mixin fires after they set the "renderDistanceEnd" so we can change it.
|
||||||
|
@WrapOperation(
|
||||||
|
method = "setupFog",
|
||||||
|
at = @At(
|
||||||
|
value = "FIELD",
|
||||||
|
target = "Lnet/minecraft/client/renderer/fog/FogData;renderDistanceEnd:F",
|
||||||
|
opcode = org.objectweb.asm.Opcodes.PUTFIELD
|
||||||
|
)
|
||||||
|
)
|
||||||
|
private void onSetRenderDistanceEnd(FogData instance, float value, Operation<Void> original)
|
||||||
|
{
|
||||||
|
if (cancelFog())
|
||||||
|
{
|
||||||
|
instance.environmentalStart = A_REALLY_REALLY_BIG_VALUE;
|
||||||
|
instance.environmentalEnd = A_EVEN_LARGER_VALUE;
|
||||||
|
|
||||||
|
instance.renderDistanceStart = A_REALLY_REALLY_BIG_VALUE;
|
||||||
|
instance.renderDistanceEnd = A_EVEN_LARGER_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Always call the original with the modified or original value
|
||||||
|
original.call(instance, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@Unique
|
||||||
|
#if MC_VER < MC_1_21_6
|
||||||
|
private static boolean cancelFog(Camera camera, FogMode fogMode)
|
||||||
|
#else
|
||||||
|
private static boolean cancelFog()
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
#if MC_VER < MC_1_21_6
|
||||||
|
Entity entity = camera.getEntity();
|
||||||
|
#else
|
||||||
|
Camera camera = Minecraft.getInstance().gameRenderer.getMainCamera();
|
||||||
|
Entity entity = camera.getEntity();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
boolean cameraNotInFluid = cameraNotInFluid(camera);
|
||||||
|
boolean isSpecialFog = (entity instanceof LivingEntity) && ((LivingEntity) entity).hasEffect(MobEffects.BLINDNESS);
|
||||||
|
|
||||||
|
boolean cancelFog = !isSpecialFog;
|
||||||
|
cancelFog = cancelFog && cameraNotInFluid;
|
||||||
|
#if MC_VER < MC_1_21_6
|
||||||
|
cancelFog = cancelFog && (fogMode == FogMode.FOG_TERRAIN);
|
||||||
|
#endif
|
||||||
|
cancelFog = cancelFog && !SingletonInjector.INSTANCE.get(IMinecraftRenderWrapper.class).isFogStateSpecial();
|
||||||
|
cancelFog = cancelFog && !Config.Client.Advanced.Graphics.Fog.enableVanillaFog.get();
|
||||||
|
|
||||||
|
return cancelFog;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Unique
|
@Unique
|
||||||
@@ -105,4 +194,6 @@ public class MixinFogRenderer
|
|||||||
return cameraNotInFluid;
|
return cameraNotInFluid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+58
-39
@@ -19,51 +19,54 @@
|
|||||||
|
|
||||||
package com.seibel.distanthorizons.fabric.mixins.client;
|
package com.seibel.distanthorizons.fabric.mixins.client;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
#if MC_VER < MC_1_19_4
|
#if MC_VER < MC_1_19_4
|
||||||
|
import net.minecraft.client.renderer.RenderType;
|
||||||
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.mojang.math.Matrix4f;
|
import com.mojang.math.Matrix4f;
|
||||||
import org.lwjgl.opengl.GL32;
|
import org.lwjgl.opengl.GL32;
|
||||||
#else
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
#elif MC_VER < MC_1_21_6
|
||||||
|
import net.minecraft.client.renderer.RenderType;
|
||||||
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import org.joml.Matrix4f;
|
import org.joml.Matrix4f;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
#else
|
||||||
|
import net.minecraft.client.renderer.chunk.ChunkSectionsToRender;
|
||||||
|
import org.joml.Matrix4fc;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
#endif
|
#endif
|
||||||
import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper;
|
|
||||||
|
|
||||||
import com.seibel.distanthorizons.common.wrappers.McObjectConverter;
|
import com.seibel.distanthorizons.common.wrappers.McObjectConverter;
|
||||||
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
|
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
|
||||||
import com.seibel.distanthorizons.core.api.internal.ClientApi;
|
import com.seibel.distanthorizons.core.api.internal.ClientApi;
|
||||||
|
import com.seibel.distanthorizons.coreapi.ModInfo;
|
||||||
|
import com.seibel.distanthorizons.fabric.FabricClientProxy;
|
||||||
import com.seibel.distanthorizons.core.util.math.Mat4f;
|
import com.seibel.distanthorizons.core.util.math.Mat4f;
|
||||||
import net.minecraft.client.Camera;
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.GameRenderer;
|
|
||||||
import net.minecraft.client.renderer.LightTexture;
|
|
||||||
import com.seibel.distanthorizons.core.config.Config;
|
import com.seibel.distanthorizons.core.config.Config;
|
||||||
import net.minecraft.client.multiplayer.ClientLevel;
|
import net.minecraft.client.multiplayer.ClientLevel;
|
||||||
import net.minecraft.client.renderer.LevelRenderer;
|
import net.minecraft.client.renderer.LevelRenderer;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
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;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
||||||
|
|
||||||
/**
|
import org.apache.logging.log4j.Logger;
|
||||||
* This class is used to mix in my rendering code
|
|
||||||
* before Minecraft starts rendering blocks.
|
|
||||||
* If this wasn't done, and we used Forge's
|
|
||||||
* render last event, the LODs would render on top
|
|
||||||
* of the normal terrain.
|
|
||||||
*
|
|
||||||
* This is also the mixin for rendering the clouds
|
|
||||||
*
|
|
||||||
* @author coolGi
|
|
||||||
* @author James Seibel
|
|
||||||
* @version 12-31-2021
|
|
||||||
*/
|
|
||||||
@Mixin(LevelRenderer.class)
|
@Mixin(LevelRenderer.class)
|
||||||
public class MixinLevelRenderer
|
public class MixinLevelRenderer
|
||||||
{
|
{
|
||||||
@Shadow
|
@Shadow
|
||||||
private ClientLevel level;
|
private ClientLevel level;
|
||||||
|
|
||||||
|
@Unique
|
||||||
|
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
||||||
|
|
||||||
|
|
||||||
#if MC_VER < MC_1_17_1
|
#if MC_VER < MC_1_17_1
|
||||||
@Inject(at = @At("HEAD"),
|
@Inject(at = @At("HEAD"),
|
||||||
method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDD)V",
|
method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDD)V",
|
||||||
@@ -84,51 +87,65 @@ public class MixinLevelRenderer
|
|||||||
method = "Lnet/minecraft/client/renderer/LevelRenderer;renderSectionLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V",
|
method = "Lnet/minecraft/client/renderer/LevelRenderer;renderSectionLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V",
|
||||||
cancellable = true)
|
cancellable = true)
|
||||||
private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double camX, double camY, double camZ, Matrix4f projectionMatrix, CallbackInfo callback)
|
private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double camX, double camY, double camZ, Matrix4f projectionMatrix, CallbackInfo callback)
|
||||||
#else
|
#elif MC_VER < MC_1_21_6
|
||||||
@Inject(at = @At("HEAD"),
|
@Inject(at = @At("HEAD"),
|
||||||
method = "Lnet/minecraft/client/renderer/LevelRenderer;renderSectionLayer(Lnet/minecraft/client/renderer/RenderType;DDDLorg/joml/Matrix4f;Lorg/joml/Matrix4f;)V",
|
method = "Lnet/minecraft/client/renderer/LevelRenderer;renderSectionLayer(Lnet/minecraft/client/renderer/RenderType;DDDLorg/joml/Matrix4f;Lorg/joml/Matrix4f;)V",
|
||||||
cancellable = true)
|
cancellable = true)
|
||||||
private void renderChunkLayer(RenderType renderType, double x, double y, double z, Matrix4f projectionMatrix, Matrix4f frustumMatrix, CallbackInfo callback)
|
private void renderChunkLayer(RenderType renderType, double x, double y, double z, Matrix4f projectionMatrix, Matrix4f frustumMatrix, CallbackInfo callback)
|
||||||
|
#else
|
||||||
|
@Inject(at = @At("HEAD"), method = "prepareChunkRenders", cancellable = true)
|
||||||
|
private void prepareChunkRenders(Matrix4fc projectionMatrix, double d, double e, double f, CallbackInfoReturnable<ChunkSectionsToRender> callback)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#if MC_VER == MC_1_16_5
|
#if MC_VER == MC_1_16_5
|
||||||
// get the matrices from the OpenGL fixed pipeline
|
// get the matrices from the OpenGL fixed pipeline
|
||||||
float[] mcProjMatrixRaw = new float[16];
|
float[] mcProjMatrixRaw = new float[16];
|
||||||
GL32.glGetFloatv(GL32.GL_PROJECTION_MATRIX, mcProjMatrixRaw);
|
GL32.glGetFloatv(GL32.GL_PROJECTION_MATRIX, mcProjMatrixRaw);
|
||||||
Mat4f mcProjectionMatrix = new Mat4f(mcProjMatrixRaw);
|
ClientApi.RENDER_STATE.mcProjectionMatrix = new Mat4f(mcProjMatrixRaw);
|
||||||
mcProjectionMatrix.transpose();
|
ClientApi.RENDER_STATE.mcProjectionMatrix.transpose();
|
||||||
|
|
||||||
Mat4f mcModelViewMatrix = McObjectConverter.Convert(matrixStackIn.last().pose());
|
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(matrixStackIn.last().pose());
|
||||||
|
|
||||||
#elif MC_VER <= MC_1_20_4
|
#elif MC_VER <= MC_1_20_4
|
||||||
// get the matrices directly from MC
|
// get the matrices directly from MC
|
||||||
Mat4f mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrixStack.last().pose());
|
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrixStack.last().pose());
|
||||||
Mat4f mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix);
|
ClientApi.RENDER_STATE.mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix);
|
||||||
#else
|
#else
|
||||||
// MC combined the model view and projection matricies
|
// MC combined the model view and projection matricies
|
||||||
Mat4f mcModelViewMatrix = McObjectConverter.Convert(projectionMatrix);
|
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(projectionMatrix);
|
||||||
Mat4f mcProjectionMatrix = new Mat4f();
|
ClientApi.RENDER_STATE.mcProjectionMatrix = new Mat4f();
|
||||||
mcProjectionMatrix.setIdentity();
|
ClientApi.RENDER_STATE.mcProjectionMatrix.setIdentity();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// TODO move this into a common place
|
// TODO move this into a common place
|
||||||
float frameTime;
|
|
||||||
#if MC_VER < MC_1_21_1
|
#if MC_VER < MC_1_21_1
|
||||||
frameTime = Minecraft.getInstance().getFrameTime();
|
ClientApi.RENDER_STATE.frameTime = Minecraft.getInstance().getFrameTime();
|
||||||
#elif MC_VER < MC_1_21_3
|
#elif MC_VER < MC_1_21_3
|
||||||
frameTime = Minecraft.getInstance().getTimer().getRealtimeDeltaTicks();
|
ClientApi.RENDER_STATE.frameTime = Minecraft.getInstance().getTimer().getRealtimeDeltaTicks();
|
||||||
#else
|
#else
|
||||||
frameTime = Minecraft.getInstance().deltaTracker.getRealtimeDeltaTicks();
|
ClientApi.RENDER_STATE.frameTime = Minecraft.getInstance().deltaTracker.getRealtimeDeltaTicks();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
//LOGGER.info("\n\n" +
|
||||||
|
// "Level Mixin\n" +
|
||||||
|
// "Mc MVM: \n" + mcModelViewMatrix.toString() + "\n" +
|
||||||
|
// "Mc Proj: \n" + mcProjectionMatrix.toString()
|
||||||
|
//);
|
||||||
|
|
||||||
|
|
||||||
|
#if MC_VER < MC_1_21_6
|
||||||
if (renderType.equals(RenderType.translucent()))
|
if (renderType.equals(RenderType.translucent()))
|
||||||
{
|
{
|
||||||
ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(this.level),
|
ClientApi.INSTANCE.renderDeferredLodsForShaders(ClientLevelWrapper.getWrapper(this.level),
|
||||||
mcModelViewMatrix,
|
ClientApi.RENDER_STATE.mcModelViewMatrix,
|
||||||
mcProjectionMatrix,
|
ClientApi.RENDER_STATE.mcProjectionMatrix,
|
||||||
frameTime
|
ClientApi.RENDER_STATE.frameTime
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
// rendering handled via Fabric Api render event
|
||||||
|
#endif
|
||||||
|
|
||||||
// FIXME completely disables rendering when sodium is installed
|
// FIXME completely disables rendering when sodium is installed
|
||||||
if (Config.Client.Advanced.Debugging.lodOnlyMode.get())
|
if (Config.Client.Advanced.Debugging.lodOnlyMode.get())
|
||||||
@@ -137,4 +154,6 @@ public class MixinLevelRenderer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
package com.seibel.distanthorizons.fabric.mixins.server;
|
||||||
|
|
||||||
|
#if MC_VER < MC_1_21_4
|
||||||
|
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
|
||||||
|
@Mixin(Entity.class)
|
||||||
|
public class MixinLevelTicks<T>
|
||||||
|
{
|
||||||
|
// dummy mixin to make the loader happy
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
import com.seibel.distanthorizons.common.wrappers.DependencySetupDoneCheck;
|
||||||
|
|
||||||
|
import net.minecraft.world.ticks.LevelTicks;
|
||||||
|
import net.minecraft.world.ticks.ScheduledTick;
|
||||||
|
|
||||||
|
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(LevelTicks.class) // available in 1.18.2+, but only needed in 1.21.4+
|
||||||
|
public class MixinLevelTicks<T>
|
||||||
|
{
|
||||||
|
// TODO put in a common location
|
||||||
|
private static boolean isWorldGenThread()
|
||||||
|
{ return DependencySetupDoneCheck.isDone && DependencySetupDoneCheck.getIsCurrentThreadDistantGeneratorThread.get(); }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Inject(method = "schedule", at = @At(value = "HEAD"), cancellable = true)
|
||||||
|
private void onChunkSave(ScheduledTick<T> tick, CallbackInfo ci)
|
||||||
|
{
|
||||||
|
// In MC 1.21.4 an error check was added to log attempting to schedule ticks for unloaded chunks
|
||||||
|
// this caused a lot of unnecessary errors when generating sand (FallingBlock.class).
|
||||||
|
if (isWorldGenThread())
|
||||||
|
{
|
||||||
|
ci.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -8,7 +8,8 @@
|
|||||||
"server.MixinEntity",
|
"server.MixinEntity",
|
||||||
"server.MixinServerPlayer",
|
"server.MixinServerPlayer",
|
||||||
"server.MixinTracingExecutor",
|
"server.MixinTracingExecutor",
|
||||||
"server.MixinUtilBackgroundThread"
|
"server.MixinUtilBackgroundThread",
|
||||||
|
"server.MixinLevelTicks"
|
||||||
],
|
],
|
||||||
"client": [
|
"client": [
|
||||||
"client.MixinClientLevel",
|
"client.MixinClientLevel",
|
||||||
|
|||||||
@@ -118,14 +118,14 @@ public class ForgeMain extends AbstractModInitializer
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void subscribeRegisterCommandsEvent(Consumer<CommandDispatcher<CommandSourceStack>> eventHandler)
|
protected void subscribeRegisterCommandsEvent(Consumer<CommandDispatcher<CommandSourceStack>> eventHandler)
|
||||||
{
|
{ MinecraftForge.EVENT_BUS.addListener((RegisterCommandsEvent e) -> { eventHandler.accept(e.getDispatcher()); }); }
|
||||||
MinecraftForge.EVENT_BUS.addListener((RegisterCommandsEvent e) -> { eventHandler.accept(e.getDispatcher()); });
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void subscribeClientStartedEvent(Runnable eventHandler)
|
protected void subscribeClientStartedEvent(Runnable eventHandler)
|
||||||
{
|
{
|
||||||
// FIXME What event is this?
|
// Just run the event handler, since there are no proper ClientLifecycleEvent for the client
|
||||||
|
// to signify readiness other than FmlClientSetupEvent
|
||||||
|
eventHandler.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-1
@@ -156,7 +156,7 @@ public class MixinLevelRenderer
|
|||||||
}
|
}
|
||||||
else if (renderType.equals(RenderType.translucent()))
|
else if (renderType.equals(RenderType.translucent()))
|
||||||
{
|
{
|
||||||
ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, frameTime);
|
ClientApi.INSTANCE.renderDeferredLodsForShaders(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, frameTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
// render fade
|
// render fade
|
||||||
|
|||||||
+3
-3
@@ -5,7 +5,7 @@ org.gradle.caching=true
|
|||||||
|
|
||||||
# Mod Info
|
# Mod Info
|
||||||
mod_name=DistantHorizons
|
mod_name=DistantHorizons
|
||||||
mod_version=2.3.3-b-dev
|
mod_version=2.3.5-b-dev
|
||||||
api_version=4.0.0
|
api_version=4.0.0
|
||||||
maven_group=com.seibel.distanthorizons
|
maven_group=com.seibel.distanthorizons
|
||||||
mod_readable_name=Distant Horizons
|
mod_readable_name=Distant Horizons
|
||||||
@@ -18,7 +18,7 @@ mod_issues=https://gitlab.com/jeseibel/distant-horizons/-/issues
|
|||||||
mod_discord=https://discord.gg/xAB8G4cENx
|
mod_discord=https://discord.gg/xAB8G4cENx
|
||||||
|
|
||||||
# Global Plugin Versions
|
# Global Plugin Versions
|
||||||
manifold_version=2024.1.37
|
manifold_version=2025.1.20
|
||||||
# 2023.1.17 can be used if there are mystery Java compiler issues
|
# 2023.1.17 can be used if there are mystery Java compiler issues
|
||||||
nightconfig_version=3.6.6
|
nightconfig_version=3.6.6
|
||||||
lz4_version=1.8.0
|
lz4_version=1.8.0
|
||||||
@@ -51,7 +51,7 @@ versionStr=
|
|||||||
|
|
||||||
# This defines what MC version Intellij will use for the preprocessor
|
# This defines what MC version Intellij will use for the preprocessor
|
||||||
# and what version is used automatically by build and run commands
|
# and what version is used automatically by build and run commands
|
||||||
mcVer=1.21.5
|
mcVer=1.21.8
|
||||||
|
|
||||||
# Defines the maximum amount of memory Minecraft is allowed when run in a development environment
|
# Defines the maximum amount of memory Minecraft is allowed when run in a development environment
|
||||||
#minecraftMemoryJavaArg="-Xmx4G"
|
#minecraftMemoryJavaArg="-Xmx4G"
|
||||||
|
|||||||
+52
-17
@@ -78,13 +78,6 @@ public class NeoforgeClientProxy implements AbstractModInitializer.IEventProxy
|
|||||||
private static final IMinecraftClientWrapper MC = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class);
|
private static final IMinecraftClientWrapper MC = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class);
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
||||||
|
|
||||||
// private static SimpleChannel multiversePluginChannel;
|
|
||||||
|
|
||||||
// Not the cleanest way of passing this to the LOD renderer, but it'll have to do for now
|
|
||||||
public static Mat4f currentModelViewMatrix = new Mat4f();
|
|
||||||
public static Mat4f currentProjectionMatrix = new Mat4f();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -244,16 +237,7 @@ public class NeoforgeClientProxy implements AbstractModInitializer.IEventProxy
|
|||||||
// rendering //
|
// rendering //
|
||||||
//===========//
|
//===========//
|
||||||
|
|
||||||
@SubscribeEvent
|
#if MC_VER < MC_1_21_6
|
||||||
public void beforeLevelRenderEvent(RenderLevelStageEvent event)
|
|
||||||
{
|
|
||||||
if (event.getStage() == RenderLevelStageEvent.Stage.AFTER_SKY)
|
|
||||||
{
|
|
||||||
currentModelViewMatrix = McObjectConverter.Convert(event.getModelViewMatrix());
|
|
||||||
currentProjectionMatrix = McObjectConverter.Convert(event.getProjectionMatrix());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void afterLevelRenderEvent(RenderLevelStageEvent event)
|
public void afterLevelRenderEvent(RenderLevelStageEvent event)
|
||||||
{
|
{
|
||||||
@@ -272,6 +256,56 @@ public class NeoforgeClientProxy implements AbstractModInitializer.IEventProxy
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public void afterLevelEntityRenderEvent(RenderLevelStageEvent.AfterEntities event)
|
||||||
|
{
|
||||||
|
ClientApi.INSTANCE.renderFade(
|
||||||
|
ClientApi.RENDER_STATE.mcModelViewMatrix,
|
||||||
|
ClientApi.RENDER_STATE.mcProjectionMatrix,
|
||||||
|
ClientApi.RENDER_STATE.frameTime,
|
||||||
|
ClientLevelWrapper.getWrapper((ClientLevel)event.getLevel())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public void afterLevelTranslucentRenderEvent(RenderLevelStageEvent.AfterTranslucentBlocks event)
|
||||||
|
{
|
||||||
|
ClientApi.INSTANCE.renderDeferredLodsForShaders(ClientLevelWrapper.getWrapper((ClientLevel)event.getLevel()),
|
||||||
|
ClientApi.RENDER_STATE.mcModelViewMatrix,
|
||||||
|
ClientApi.RENDER_STATE.mcProjectionMatrix,
|
||||||
|
ClientApi.RENDER_STATE.frameTime
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public void afterLevelRenderEvent(RenderLevelStageEvent.AfterLevel event)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// should generally only need to be set once per game session
|
||||||
|
// allows DH to render directly to Optifine's level frame buffer,
|
||||||
|
// allowing better shader support
|
||||||
|
MinecraftRenderWrapper.INSTANCE.finalLevelFrameBufferId = GL32.glGetInteger(GL32.GL_FRAMEBUFFER_BINDING);
|
||||||
|
}
|
||||||
|
catch (Exception | Error e)
|
||||||
|
{
|
||||||
|
LOGGER.error("Unexpected error in afterLevelRenderEvent: "+e.getMessage(), e);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ClientApi.INSTANCE.renderFadeOpaque(
|
||||||
|
ClientApi.RENDER_STATE.mcModelViewMatrix,
|
||||||
|
ClientApi.RENDER_STATE.mcProjectionMatrix,
|
||||||
|
ClientApi.RENDER_STATE.frameTime,
|
||||||
|
ClientLevelWrapper.getWrapper((ClientLevel)event.getLevel())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -282,4 +316,5 @@ public class NeoforgeClientProxy implements AbstractModInitializer.IEventProxy
|
|||||||
private static LevelAccessor GetEventLevel(LevelEvent e) { return e.getLevel(); }
|
private static LevelAccessor GetEventLevel(LevelEvent e) { return e.getLevel(); }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import com.mojang.brigadier.CommandDispatcher;
|
|||||||
import com.seibel.distanthorizons.common.AbstractModInitializer;
|
import com.seibel.distanthorizons.common.AbstractModInitializer;
|
||||||
import com.seibel.distanthorizons.common.wrappers.gui.GetConfigScreen;
|
import com.seibel.distanthorizons.common.wrappers.gui.GetConfigScreen;
|
||||||
import com.seibel.distanthorizons.core.api.internal.ClientApi;
|
import com.seibel.distanthorizons.core.api.internal.ClientApi;
|
||||||
import com.seibel.distanthorizons.core.config.Config;
|
|
||||||
import com.seibel.distanthorizons.core.api.internal.ServerApi;
|
import com.seibel.distanthorizons.core.api.internal.ServerApi;
|
||||||
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
||||||
import com.seibel.distanthorizons.core.network.messages.AbstractNetworkMessage;
|
import com.seibel.distanthorizons.core.network.messages.AbstractNetworkMessage;
|
||||||
@@ -51,9 +50,13 @@ import java.util.function.Consumer;
|
|||||||
|
|
||||||
#if MC_VER < MC_1_20_6
|
#if MC_VER < MC_1_20_6
|
||||||
import net.neoforged.neoforge.client.ConfigScreenHandler;
|
import net.neoforged.neoforge.client.ConfigScreenHandler;
|
||||||
|
#elif MC_VER < MC_1_21_8
|
||||||
|
import net.neoforged.neoforge.client.gui.IConfigScreenFactory;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
#else
|
#else
|
||||||
import net.neoforged.neoforge.client.gui.IConfigScreenFactory;
|
import net.neoforged.neoforge.client.gui.IConfigScreenFactory;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import net.neoforged.neoforge.client.network.event.RegisterClientPayloadHandlersEvent;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -72,6 +75,11 @@ public class NeoforgeMain extends AbstractModInitializer
|
|||||||
{
|
{
|
||||||
this.onInitializeClient();
|
this.onInitializeClient();
|
||||||
eventBus.addListener(this::registerNetworkingClientServer);
|
eventBus.addListener(this::registerNetworkingClientServer);
|
||||||
|
|
||||||
|
#if MC_VER < MC_1_21_8
|
||||||
|
#else
|
||||||
|
eventBus.addListener(this::registerClientPayloadEvent);
|
||||||
|
#endif
|
||||||
});
|
});
|
||||||
|
|
||||||
// handles dedicated servers
|
// handles dedicated servers
|
||||||
@@ -99,6 +107,12 @@ public class NeoforgeMain extends AbstractModInitializer
|
|||||||
public void registerNetworkingServer(RegisterPayloadHandlersEvent event)
|
public void registerNetworkingServer(RegisterPayloadHandlersEvent event)
|
||||||
{ NeoforgePluginPacketSender.setPacketHandler(event, ServerApi.INSTANCE::pluginMessageReceived); }
|
{ NeoforgePluginPacketSender.setPacketHandler(event, ServerApi.INSTANCE::pluginMessageReceived); }
|
||||||
|
|
||||||
|
#if MC_VER < MC_1_21_8
|
||||||
|
#else
|
||||||
|
public void registerClientPayloadEvent(RegisterClientPayloadHandlersEvent event)
|
||||||
|
{ NeoforgePluginPacketSender.registerClientPacketHandler(event); }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -141,7 +155,9 @@ public class NeoforgeMain extends AbstractModInitializer
|
|||||||
@Override
|
@Override
|
||||||
protected void subscribeClientStartedEvent(Runnable eventHandler)
|
protected void subscribeClientStartedEvent(Runnable eventHandler)
|
||||||
{
|
{
|
||||||
// FIXME What event is this?
|
// Just run the event handler, since there are no proper ClientLifecycleEvent for the client
|
||||||
|
// to signify readiness other than FmlClientSetupEvent
|
||||||
|
eventHandler.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+32
-1
@@ -14,10 +14,19 @@ import java.util.Optional;
|
|||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
#if MC_VER < MC_1_21_8
|
||||||
|
#else
|
||||||
|
import net.neoforged.neoforge.client.network.ClientPacketDistributor;
|
||||||
|
import net.neoforged.neoforge.client.network.event.RegisterClientPayloadHandlersEvent;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
public class NeoforgePluginPacketSender extends AbstractPluginPacketSender
|
public class NeoforgePluginPacketSender extends AbstractPluginPacketSender
|
||||||
{
|
{
|
||||||
private static BiConsumer<IServerPlayerWrapper, AbstractNetworkMessage> packetConsumer;
|
private static BiConsumer<IServerPlayerWrapper, AbstractNetworkMessage> packetConsumer;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static void setPacketHandler(RegisterPayloadHandlersEvent event, Consumer<AbstractNetworkMessage> consumer)
|
public static void setPacketHandler(RegisterPayloadHandlersEvent event, Consumer<AbstractNetworkMessage> consumer)
|
||||||
{ setPacketHandler(event, (player, buffer) -> consumer.accept(buffer)); }
|
{ setPacketHandler(event, (player, buffer) -> consumer.accept(buffer)); }
|
||||||
public static void setPacketHandler(RegisterPayloadHandlersEvent event, BiConsumer<IServerPlayerWrapper, AbstractNetworkMessage> consumer)
|
public static void setPacketHandler(RegisterPayloadHandlersEvent event, BiConsumer<IServerPlayerWrapper, AbstractNetworkMessage> consumer)
|
||||||
@@ -39,9 +48,31 @@ public class NeoforgePluginPacketSender extends AbstractPluginPacketSender
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if MC_VER < MC_1_21_8
|
||||||
|
#else
|
||||||
|
public static void registerClientPacketHandler(RegisterClientPayloadHandlersEvent event)
|
||||||
|
{
|
||||||
|
// as of MC 1.21.7 Neo added a separate client network register
|
||||||
|
// https://github.com/neoforged/NeoForge/pull/2272
|
||||||
|
event.register(CommonPacketPayload.TYPE, (payload, context) ->
|
||||||
|
{
|
||||||
|
if (payload.message() != null)
|
||||||
|
{
|
||||||
|
packetConsumer.accept(null, payload.message());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendToServer(AbstractNetworkMessage message)
|
public void sendToServer(AbstractNetworkMessage message)
|
||||||
{ PacketDistributor.sendToServer(new CommonPacketPayload(message)); }
|
{
|
||||||
|
#if MC_VER < MC_1_21_8
|
||||||
|
PacketDistributor.sendToServer(new CommonPacketPayload(message));
|
||||||
|
#else
|
||||||
|
ClientPacketDistributor.sendToServer(new CommonPacketPayload(message));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendToClient(ServerPlayer serverPlayer, AbstractNetworkMessage message)
|
public void sendToClient(ServerPlayer serverPlayer, AbstractNetworkMessage message)
|
||||||
|
|||||||
+117
-31
@@ -22,67 +22,87 @@ package com.seibel.distanthorizons.neoforge.mixins.client;
|
|||||||
import com.seibel.distanthorizons.core.config.Config;
|
import com.seibel.distanthorizons.core.config.Config;
|
||||||
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
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.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
|
||||||
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
|
||||||
|
|
||||||
import net.minecraft.client.Camera;
|
import net.minecraft.client.Camera;
|
||||||
import net.minecraft.client.renderer.FogRenderer;
|
|
||||||
import net.minecraft.client.renderer.FogRenderer.FogMode;
|
|
||||||
import net.minecraft.world.effect.MobEffects;
|
import net.minecraft.world.effect.MobEffects;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
|
|
||||||
#if MC_VER < MC_1_17_1
|
#if MC_VER < MC_1_17_1
|
||||||
import net.minecraft.world.level.material.FluidState;
|
import net.minecraft.world.level.material.FluidState;
|
||||||
org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import net.minecraft.client.renderer.FogRenderer;
|
||||||
|
import net.minecraft.client.renderer.FogRenderer.FogMode;
|
||||||
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
|
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
#elif MC_VER < MC_1_21_3
|
#elif MC_VER < MC_1_21_3
|
||||||
import net.minecraft.world.level.material.FogType;
|
import net.minecraft.world.level.material.FogType;
|
||||||
|
import net.minecraft.client.renderer.FogRenderer;
|
||||||
|
import net.minecraft.client.renderer.FogRenderer.FogMode;
|
||||||
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
|
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
#elif MC_VER < MC_1_21_6
|
||||||
|
import net.minecraft.world.level.material.FogType;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
import com.mojang.blaze3d.shaders.FogShape;
|
||||||
|
import net.minecraft.client.renderer.FogRenderer;
|
||||||
|
import net.minecraft.client.renderer.FogRenderer.FogMode;
|
||||||
|
import net.minecraft.client.renderer.FogParameters;
|
||||||
|
import org.joml.Vector4f;
|
||||||
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
|
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
#else
|
#else
|
||||||
import net.minecraft.client.renderer.FogParameters;
|
|
||||||
import net.minecraft.world.level.material.FogType;
|
import net.minecraft.world.level.material.FogType;
|
||||||
import org.joml.Vector4f;
|
import net.minecraft.client.renderer.fog.FogRenderer;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
import net.minecraft.client.renderer.fog.FogData;
|
||||||
|
|
||||||
|
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
|
||||||
|
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Mixin(FogRenderer.class)
|
@Mixin(FogRenderer.class)
|
||||||
public class MixinFogRenderer
|
public class MixinFogRenderer
|
||||||
{
|
{
|
||||||
// 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.
|
||||||
|
@Unique
|
||||||
private static final float A_REALLY_REALLY_BIG_VALUE = 420694206942069.F;
|
private static final float A_REALLY_REALLY_BIG_VALUE = 420694206942069.F;
|
||||||
|
@Unique
|
||||||
private static final float A_EVEN_LARGER_VALUE = 42069420694206942069.F;
|
private static final float A_EVEN_LARGER_VALUE = 42069420694206942069.F;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if MC_VER == MC_1_17_1 || MC_VER == MC_1_18_2
|
#if MC_VER < MC_1_19_2
|
||||||
@Inject(at = @At("RETURN"),
|
@Inject(at = @At("RETURN"), method = "setupFog")
|
||||||
method = "setupFog(Lnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/FogRenderer$FogMode;FZF)V",
|
private static void disableSetupFog(Camera camera, FogMode fogMode, float f, boolean bl, CallbackInfo callback)
|
||||||
remap = false)
|
|
||||||
private static void disableSetupFog(Camera camera, FogMode fogMode, float f, boolean bl, float partTick, CallbackInfo callback)
|
|
||||||
#elif MC_VER < MC_1_21_3
|
#elif MC_VER < MC_1_21_3
|
||||||
@Inject(at = @At("RETURN"),
|
@Inject(at = @At("RETURN"), method = "setupFog")
|
||||||
method = "setupFog(Lnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/FogRenderer$FogMode;FZF)V",
|
private static void disableSetupFog(Camera camera, FogMode fogMode, float f, boolean bl, float g, CallbackInfo callback)
|
||||||
remap = true)
|
#elif MC_VER < MC_1_21_6
|
||||||
private static void disableSetupFog(Camera camera, FogMode fogMode, float f, boolean bl, float partTick, CallbackInfo callback)
|
@Inject(at = @At("RETURN"), method = "setupFog", cancellable = true)
|
||||||
|
private static void disableSetupFog(Camera camera, FogMode fogMode, Vector4f vector4f, float f, boolean bl, float g, CallbackInfoReturnable<FogParameters> callback)
|
||||||
#else
|
#else
|
||||||
@Inject(at = @At("RETURN"),
|
@Unique
|
||||||
method = "setupFog(Lnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/FogRenderer$FogMode;Lorg/joml/Vector4f;FZF)Lnet/minecraft/client/renderer/FogParameters;",
|
private static void unused()
|
||||||
remap = true, cancellable = true)
|
|
||||||
private static void disableSetupFog(Camera camera, FogMode fogMode, Vector4f vector4f, float f, boolean bl, float partTick, CallbackInfoReturnable<FogParameters> callback)
|
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
boolean cameraNotInFluid = cameraNotInFluid(camera);
|
#if MC_VER < MC_1_21_6
|
||||||
|
boolean cancelFog = cancelFog(camera, fogMode);
|
||||||
|
#elif MC_VER < MC_1_21_6
|
||||||
|
boolean cancelFog = cancelFog(camera);
|
||||||
|
#else
|
||||||
|
boolean cancelFog = cancelFog();
|
||||||
|
#endif
|
||||||
|
|
||||||
Entity entity = camera.getEntity();
|
if (cancelFog)
|
||||||
boolean isSpecialFog = (entity instanceof LivingEntity) && ((LivingEntity) entity).hasEffect(MobEffects.BLINDNESS);
|
|
||||||
if (!isSpecialFog && cameraNotInFluid && fogMode == FogMode.FOG_TERRAIN
|
|
||||||
&& !SingletonInjector.INSTANCE.get(IMinecraftRenderWrapper.class).isFogStateSpecial()
|
|
||||||
&& !Config.Client.Advanced.Graphics.Fog.enableVanillaFog.get())
|
|
||||||
{
|
{
|
||||||
#if MC_VER < MC_1_17_1
|
#if MC_VER < MC_1_17_1
|
||||||
RenderSystem.fogStart(A_REALLY_REALLY_BIG_VALUE);
|
RenderSystem.fogStart(A_REALLY_REALLY_BIG_VALUE);
|
||||||
@@ -90,12 +110,77 @@ public class MixinFogRenderer
|
|||||||
#elif MC_VER < MC_1_21_3
|
#elif MC_VER < MC_1_21_3
|
||||||
RenderSystem.setShaderFogStart(A_REALLY_REALLY_BIG_VALUE);
|
RenderSystem.setShaderFogStart(A_REALLY_REALLY_BIG_VALUE);
|
||||||
RenderSystem.setShaderFogEnd(A_EVEN_LARGER_VALUE);
|
RenderSystem.setShaderFogEnd(A_EVEN_LARGER_VALUE);
|
||||||
#else
|
#elif MC_VER < MC_1_21_6
|
||||||
callback.setReturnValue(FogParameters.NO_FOG);
|
callback.setReturnValue(FogParameters.NO_FOG);
|
||||||
|
#else
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if MC_VER < MC_1_21_6
|
||||||
|
#else
|
||||||
|
|
||||||
|
// In MC's FogRenderer they clamp the "renderDistanceEnd" fog field to the render distance,
|
||||||
|
// which prevents us from disabling the vanilla fog.
|
||||||
|
// This mixin fires after they set the "renderDistanceEnd" so we can change it.
|
||||||
|
@WrapOperation(
|
||||||
|
method = "setupFog",
|
||||||
|
at = @At(
|
||||||
|
value = "FIELD",
|
||||||
|
target = "Lnet/minecraft/client/renderer/fog/FogData;renderDistanceEnd:F",
|
||||||
|
opcode = org.objectweb.asm.Opcodes.PUTFIELD
|
||||||
|
)
|
||||||
|
)
|
||||||
|
private void onSetRenderDistanceEnd(FogData instance, float value, Operation<Void> original)
|
||||||
|
{
|
||||||
|
if (cancelFog())
|
||||||
|
{
|
||||||
|
instance.environmentalStart = A_REALLY_REALLY_BIG_VALUE;
|
||||||
|
instance.environmentalEnd = A_EVEN_LARGER_VALUE;
|
||||||
|
|
||||||
|
instance.renderDistanceStart = A_REALLY_REALLY_BIG_VALUE;
|
||||||
|
instance.renderDistanceEnd = A_EVEN_LARGER_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Always call the original with the modified or original value
|
||||||
|
original.call(instance, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@Unique
|
||||||
|
#if MC_VER < MC_1_21_6
|
||||||
|
private static boolean cancelFog(Camera camera, FogMode fogMode)
|
||||||
|
#else
|
||||||
|
private static boolean cancelFog()
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
#if MC_VER < MC_1_21_6
|
||||||
|
Entity entity = camera.getEntity();
|
||||||
|
#else
|
||||||
|
Camera camera = Minecraft.getInstance().gameRenderer.getMainCamera();
|
||||||
|
Entity entity = camera.getEntity();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
boolean cameraNotInFluid = cameraNotInFluid(camera);
|
||||||
|
boolean isSpecialFog = (entity instanceof LivingEntity) && ((LivingEntity) entity).hasEffect(MobEffects.BLINDNESS);
|
||||||
|
|
||||||
|
boolean cancelFog = !isSpecialFog;
|
||||||
|
cancelFog = cancelFog && cameraNotInFluid;
|
||||||
|
#if MC_VER < MC_1_21_6
|
||||||
|
cancelFog = cancelFog && (fogMode == FogMode.FOG_TERRAIN);
|
||||||
|
#endif
|
||||||
|
cancelFog = cancelFog && !SingletonInjector.INSTANCE.get(IMinecraftRenderWrapper.class).isFogStateSpecial();
|
||||||
|
cancelFog = cancelFog && !Config.Client.Advanced.Graphics.Fog.enableVanillaFog.get();
|
||||||
|
|
||||||
|
return cancelFog;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Unique
|
||||||
private static boolean cameraNotInFluid(Camera camera)
|
private static boolean cameraNotInFluid(Camera camera)
|
||||||
{
|
{
|
||||||
#if MC_VER < MC_1_17_1
|
#if MC_VER < MC_1_17_1
|
||||||
@@ -110,4 +195,5 @@ public class MixinFogRenderer
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+111
-77
@@ -19,39 +19,53 @@
|
|||||||
|
|
||||||
package com.seibel.distanthorizons.neoforge.mixins.client;
|
package com.seibel.distanthorizons.neoforge.mixins.client;
|
||||||
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
#if MC_VER < MC_1_21_6
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
#if MC_VER < MC_1_19_4
|
|
||||||
import com.mojang.math.Matrix4f;
|
|
||||||
#else
|
|
||||||
import com.seibel.distanthorizons.core.util.math.Mat4f;
|
|
||||||
import com.seibel.distanthorizons.neoforge.NeoforgeClientProxy;
|
|
||||||
import net.minecraft.client.Camera;
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.GameRenderer;
|
|
||||||
import net.minecraft.client.renderer.LightTexture;
|
|
||||||
import org.joml.Matrix4f;
|
|
||||||
#endif
|
|
||||||
import com.seibel.distanthorizons.common.wrappers.McObjectConverter;
|
|
||||||
import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper;
|
|
||||||
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
|
|
||||||
import com.seibel.distanthorizons.core.config.Config;
|
|
||||||
import com.seibel.distanthorizons.core.api.internal.ClientApi;
|
|
||||||
import net.minecraft.client.multiplayer.ClientLevel;
|
import net.minecraft.client.multiplayer.ClientLevel;
|
||||||
import net.minecraft.client.renderer.LevelRenderer;
|
import net.minecraft.client.renderer.LevelRenderer;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
import net.minecraft.client.renderer.RenderType;
|
||||||
|
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
|
||||||
|
import org.joml.Matrix4f;
|
||||||
|
#else
|
||||||
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.renderer.MultiBufferSource;
|
||||||
|
import net.minecraft.client.renderer.chunk.ChunkSectionsToRender;
|
||||||
|
import net.minecraft.client.Camera;
|
||||||
|
import net.minecraft.client.DeltaTracker;
|
||||||
|
import net.minecraft.client.multiplayer.ClientLevel;
|
||||||
|
import net.minecraft.client.renderer.LevelRenderer;
|
||||||
|
|
||||||
|
import org.joml.Matrix4f;
|
||||||
|
import org.joml.Matrix4fc;
|
||||||
|
import org.joml.Vector4f;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.buffers.GpuBufferSlice;
|
||||||
|
import com.mojang.blaze3d.resource.GraphicsResourceAllocator;
|
||||||
|
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import com.seibel.distanthorizons.neoforge.NeoforgeClientProxy;
|
||||||
|
import com.seibel.distanthorizons.common.wrappers.McObjectConverter;
|
||||||
|
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
|
||||||
|
import com.seibel.distanthorizons.core.api.internal.ClientApi;
|
||||||
|
import com.seibel.distanthorizons.core.config.Config;
|
||||||
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
|
import com.seibel.distanthorizons.core.util.math.Mat4f;
|
||||||
|
import com.seibel.distanthorizons.coreapi.ModInfo;
|
||||||
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
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.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
#if MC_VER < MC_1_17_1
|
|
||||||
import org.lwjgl.opengl.GL15;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class is used to mix in DH's rendering code
|
* This class is used to mix in DH's rendering code
|
||||||
* before Minecraft starts rendering blocks.
|
* before Minecraft starts rendering blocks.
|
||||||
@@ -70,73 +84,66 @@ public class MixinLevelRenderer
|
|||||||
#endif
|
#endif
|
||||||
private ClientLevel level;
|
private ClientLevel level;
|
||||||
|
|
||||||
|
@Unique
|
||||||
|
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
||||||
|
|
||||||
#if MC_VER < MC_1_17_1
|
|
||||||
@Inject(at = @At("HEAD"),
|
|
||||||
method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDD)V",
|
#if MC_VER < MC_1_21_6
|
||||||
cancellable = true)
|
@Inject(at = @At("HEAD"), method = "renderSectionLayer", cancellable = true)
|
||||||
private void renderChunkLayer(RenderType renderType, PoseStack matrixStackIn, double xIn, double yIn, double zIn, CallbackInfo callback)
|
private void renderChunkLayer(RenderType renderType, double x, double y, double z, Matrix4f modelViewMatrix, Matrix4f projectionMatrix, CallbackInfo callback)
|
||||||
#elif MC_VER < MC_1_19_4
|
|
||||||
@Inject(at = @At("HEAD"),
|
|
||||||
method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLcom/mojang/math/Matrix4f;)V",
|
|
||||||
cancellable = true)
|
|
||||||
private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double cameraXBlockPos, double cameraYBlockPos, double cameraZBlockPos, Matrix4f projectionMatrix, CallbackInfo callback)
|
|
||||||
#elif MC_VER < MC_1_20_2
|
|
||||||
@Inject(at = @At("HEAD"),
|
|
||||||
method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V",
|
|
||||||
cancellable = true)
|
|
||||||
private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double cameraXBlockPos, double cameraYBlockPos, double cameraZBlockPos, Matrix4f projectionMatrix, CallbackInfo callback)
|
|
||||||
#elif MC_VER < MC_1_20_6
|
|
||||||
@Inject(at = @At("HEAD"),
|
|
||||||
method = "Lnet/minecraft/client/renderer/LevelRenderer;renderSectionLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V",
|
|
||||||
cancellable = true)
|
|
||||||
private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double camX, double camY, double camZ, Matrix4f projectionMatrix, CallbackInfo callback)
|
|
||||||
#else
|
#else
|
||||||
@Inject(at = @At("HEAD"),
|
@Inject(at = @At("HEAD"), method = "renderLevel", cancellable = true)
|
||||||
method = "Lnet/minecraft/client/renderer/LevelRenderer;renderSectionLayer(Lnet/minecraft/client/renderer/RenderType;DDDLorg/joml/Matrix4f;Lorg/joml/Matrix4f;)V",
|
private void onRenderLevel(GraphicsResourceAllocator resourceAllocator, DeltaTracker deltaTracker, boolean renderBlockOutline, Camera camera, Matrix4f positionMatrix, Matrix4f projectionMatrix, GpuBufferSlice gpuBufferSlice, Vector4f skyColor, boolean thinFog, CallbackInfo callback)
|
||||||
cancellable = true)
|
#endif
|
||||||
private void renderChunkLayer(RenderType renderType, double x, double y, double z, Matrix4f projectionMatrix, Matrix4f frustumMatrix, CallbackInfo callback)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
#if MC_VER == MC_1_16_5
|
#if MC_VER < MC_1_21_6
|
||||||
// get the matrices from the OpenGL fixed pipeline
|
// MC combined the model view and projection matricies
|
||||||
float[] mcProjMatrixRaw = new float[16];
|
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrix);
|
||||||
GL15.glGetFloatv(GL15.GL_PROJECTION_MATRIX, mcProjMatrixRaw);
|
ClientApi.RENDER_STATE.mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix);
|
||||||
Mat4f mcProjectionMatrix = new Mat4f(mcProjMatrixRaw);
|
|
||||||
mcProjectionMatrix.transpose();
|
|
||||||
|
|
||||||
Mat4f mcModelViewMatrix = McObjectConverter.Convert(matrixStackIn.last().pose());
|
|
||||||
|
|
||||||
#elif MC_VER <= MC_1_20_4
|
|
||||||
// get the matrices directly from MC
|
|
||||||
Mat4f mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrixStack.last().pose());
|
|
||||||
Mat4f mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix);
|
|
||||||
#else
|
#else
|
||||||
// get the matrices from neoForge's render event.
|
ClientApi.RENDER_STATE.mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix);
|
||||||
// We can't call the renderer there because we don't have access to the level that's being rendered
|
|
||||||
Mat4f mcModelViewMatrix = NeoforgeClientProxy.currentModelViewMatrix;
|
|
||||||
Mat4f mcProjectionMatrix = NeoforgeClientProxy.currentProjectionMatrix;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//LOGGER.info("\n\n" +
|
||||||
|
// "Level Mixin\n" +
|
||||||
|
// "Mc MVM: \n" + ClientApi.RENDER_STATE.mcModelViewMatrix.toString() + "\n" +
|
||||||
|
// "Mc Proj: \n" + ClientApi.RENDER_STATE.mcProjectionMatrix.toString()
|
||||||
|
//);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
float frameTime;
|
|
||||||
#if MC_VER < MC_1_21_1
|
#if MC_VER < MC_1_21_1
|
||||||
frameTime = Minecraft.getInstance().getFrameTime();
|
ClientApi.RENDER_STATE.frameTime = Minecraft.getInstance().getFrameTime();
|
||||||
#elif MC_VER < MC_1_21_3
|
#elif MC_VER < MC_1_21_3
|
||||||
frameTime = Minecraft.getInstance().getTimer().getRealtimeDeltaTicks();
|
ClientApi.RENDER_STATE.frameTime = Minecraft.getInstance().getTimer().getRealtimeDeltaTicks();
|
||||||
#else
|
#else
|
||||||
frameTime = Minecraft.getInstance().deltaTracker.getRealtimeDeltaTicks();
|
ClientApi.RENDER_STATE.frameTime = Minecraft.getInstance().deltaTracker.getRealtimeDeltaTicks();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if MC_VER < MC_1_21_6
|
||||||
|
|
||||||
|
// only crash during development
|
||||||
|
if (ModInfo.IS_DEV_BUILD)
|
||||||
|
{
|
||||||
|
ClientApi.RENDER_STATE.canRenderOrThrow();
|
||||||
|
}
|
||||||
|
|
||||||
// render LODs
|
// render LODs
|
||||||
if (renderType.equals(RenderType.solid()))
|
if (renderType.equals(RenderType.solid()))
|
||||||
{
|
{
|
||||||
ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, frameTime);
|
ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(this.level),
|
||||||
|
ClientApi.RENDER_STATE.mcModelViewMatrix,
|
||||||
|
ClientApi.RENDER_STATE.mcProjectionMatrix,
|
||||||
|
ClientApi.RENDER_STATE.frameTime);
|
||||||
}
|
}
|
||||||
else if (renderType.equals(RenderType.translucent()))
|
else if (renderType.equals(RenderType.translucent()))
|
||||||
{
|
{
|
||||||
ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, frameTime);
|
ClientApi.INSTANCE.renderDeferredLodsForShaders(ClientLevelWrapper.getWrapper(this.level),
|
||||||
|
ClientApi.RENDER_STATE.mcModelViewMatrix,
|
||||||
|
ClientApi.RENDER_STATE.mcProjectionMatrix,
|
||||||
|
ClientApi.RENDER_STATE.frameTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
// render fade
|
// render fade
|
||||||
@@ -146,21 +153,22 @@ public class MixinLevelRenderer
|
|||||||
if (renderType.equals(RenderType.cutout()))
|
if (renderType.equals(RenderType.cutout()))
|
||||||
{
|
{
|
||||||
ClientApi.INSTANCE.renderFadeOpaque(
|
ClientApi.INSTANCE.renderFadeOpaque(
|
||||||
mcModelViewMatrix,
|
ClientApi.RENDER_STATE.mcModelViewMatrix,
|
||||||
mcProjectionMatrix,
|
ClientApi.RENDER_STATE.mcProjectionMatrix,
|
||||||
frameTime,
|
ClientApi.RENDER_STATE.frameTime,
|
||||||
ClientLevelWrapper.getWrapper(this.level)
|
ClientLevelWrapper.getWrapper(this.level)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else if (renderType.equals(RenderType.tripwire()))
|
else if (renderType.equals(RenderType.tripwire()))
|
||||||
{
|
{
|
||||||
ClientApi.INSTANCE.renderFade(
|
ClientApi.INSTANCE.renderFade(
|
||||||
mcModelViewMatrix,
|
ClientApi.RENDER_STATE.mcModelViewMatrix,
|
||||||
mcProjectionMatrix,
|
ClientApi.RENDER_STATE.mcProjectionMatrix,
|
||||||
frameTime,
|
ClientApi.RENDER_STATE.frameTime,
|
||||||
ClientLevelWrapper.getWrapper(this.level)
|
ClientLevelWrapper.getWrapper(this.level)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (Config.Client.Advanced.Debugging.lodOnlyMode.get())
|
if (Config.Client.Advanced.Debugging.lodOnlyMode.get())
|
||||||
{
|
{
|
||||||
@@ -169,4 +177,30 @@ public class MixinLevelRenderer
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if MC_VER < MC_1_21_6
|
||||||
|
|
||||||
|
// formerly handled in renderChunkLayer()
|
||||||
|
|
||||||
|
#else
|
||||||
|
@Inject(at = @At("HEAD"), method = "prepareChunkRenders", cancellable = true)
|
||||||
|
private void renderChunkLayer(Matrix4fc modelViewMatrix, double d, double e, double f, CallbackInfoReturnable<ChunkSectionsToRender> callback)
|
||||||
|
{
|
||||||
|
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrix);
|
||||||
|
|
||||||
|
// only crash during development
|
||||||
|
if (ModInfo.IS_DEV_BUILD)
|
||||||
|
{
|
||||||
|
ClientApi.RENDER_STATE.canRenderOrThrow();
|
||||||
|
}
|
||||||
|
|
||||||
|
ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(this.level),
|
||||||
|
ClientApi.RENDER_STATE.mcModelViewMatrix,
|
||||||
|
ClientApi.RENDER_STATE.mcProjectionMatrix,
|
||||||
|
ClientApi.RENDER_STATE.frameTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+46
@@ -0,0 +1,46 @@
|
|||||||
|
package com.seibel.distanthorizons.neoforge.mixins.server;
|
||||||
|
|
||||||
|
#if MC_VER < MC_1_21_4
|
||||||
|
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
|
||||||
|
@Mixin(Entity.class)
|
||||||
|
public class MixinLevelTicks<T>
|
||||||
|
{
|
||||||
|
// dummy mixin to make the loader happy
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
import com.seibel.distanthorizons.common.wrappers.DependencySetupDoneCheck;
|
||||||
|
import net.minecraft.world.ticks.LevelTicks;
|
||||||
|
import net.minecraft.world.ticks.ScheduledTick;
|
||||||
|
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(LevelTicks.class) // available in 1.18.2+, but only needed in 1.21.4+
|
||||||
|
public class MixinLevelTicks<T>
|
||||||
|
{
|
||||||
|
// TODO put in a common location
|
||||||
|
private static boolean isWorldGenThread()
|
||||||
|
{ return DependencySetupDoneCheck.isDone && DependencySetupDoneCheck.getIsCurrentThreadDistantGeneratorThread.get(); }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Inject(method = "schedule", at = @At(value = "HEAD"), cancellable = true)
|
||||||
|
private void onChunkSave(ScheduledTick<T> tick, CallbackInfo ci)
|
||||||
|
{
|
||||||
|
// In MC 1.21.4 an error check was added to log attempting to schedule ticks for unloaded chunks
|
||||||
|
// this caused a lot of unnecessary errors when generating sand (FallingBlock.class).
|
||||||
|
if (isWorldGenThread())
|
||||||
|
{
|
||||||
|
ci.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -8,7 +8,8 @@
|
|||||||
"server.MixinServerPlayer",
|
"server.MixinServerPlayer",
|
||||||
"server.MixinTFChunkGenerator",
|
"server.MixinTFChunkGenerator",
|
||||||
"server.MixinTracingExecutor",
|
"server.MixinTracingExecutor",
|
||||||
"server.MixinUtilBackgroundThread"
|
"server.MixinUtilBackgroundThread",
|
||||||
|
"server.MixinLevelTicks"
|
||||||
],
|
],
|
||||||
"client": [
|
"client": [
|
||||||
"client.MixinClientPacketListener",
|
"client.MixinClientPacketListener",
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ loaderVersion = "*" # // mandatory. Allow all forge versions as we are definding
|
|||||||
license = "LGPL"
|
license = "LGPL"
|
||||||
issueTrackerURL = "${issues}"
|
issueTrackerURL = "${issues}"
|
||||||
|
|
||||||
|
# https://docs.neoforged.net/docs/gettingstarted/modfiles/#neoforgemodstoml
|
||||||
|
|
||||||
|
|
||||||
[[mods]] #//mandatory
|
[[mods]] #//mandatory
|
||||||
modId = "distanthorizons" #//mandatory
|
modId = "distanthorizons" #//mandatory
|
||||||
@@ -32,4 +34,11 @@ issueTrackerURL = "${issues}"
|
|||||||
type = "required"
|
type = "required"
|
||||||
versionRange = "${compatible_forgemc_versions}" # Where we set what version of mc it is avalible for
|
versionRange = "${compatible_forgemc_versions}" # Where we set what version of mc it is avalible for
|
||||||
ordering = "NONE"
|
ordering = "NONE"
|
||||||
side = "BOTH"
|
side = "BOTH"
|
||||||
|
|
||||||
|
[[dependencies.distanthorizons]]
|
||||||
|
modId = "neoforge"
|
||||||
|
type = "required"
|
||||||
|
versionRange = "${neoforge_version_range}"
|
||||||
|
ordering = "NONE"
|
||||||
|
side = "BOTH"
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ fabric_api_version=0.42.0+1.16
|
|||||||
immersive_portals_version=
|
immersive_portals_version=
|
||||||
canvas_version=
|
canvas_version=
|
||||||
|
|
||||||
# iris - needs 1.7.4+ to support the DH API
|
# iris - needs 1.7.4+ to support the DH API
|
||||||
fabric_incompatibility_list={ "iris": "*" }
|
fabric_incompatibility_list={ "iris": "*" }
|
||||||
fabric_recommend_list={}
|
fabric_recommend_list={}
|
||||||
|
|
||||||
@@ -44,6 +44,9 @@ fabric_api_version=0.42.0+1.16
|
|||||||
|
|
||||||
# Forge loader
|
# Forge loader
|
||||||
forge_version=36.2.39
|
forge_version=36.2.39
|
||||||
|
# Neo not used but the variable still needs to be defined to make gradle happy
|
||||||
|
neoforge_version_range=[*,)
|
||||||
|
|
||||||
# Forge mod versions
|
# Forge mod versions
|
||||||
starlight_version_forge=
|
starlight_version_forge=
|
||||||
terraforged_version=4044290
|
terraforged_version=4044290
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ fabric_api_version=0.46.1+1.17
|
|||||||
immersive_portals_version=
|
immersive_portals_version=
|
||||||
canvas_version=
|
canvas_version=
|
||||||
|
|
||||||
# iris - needs 1.7.4+ to support the DH API
|
# iris - needs 1.7.4+ to support the DH API
|
||||||
fabric_incompatibility_list={ "iris": "*" }
|
fabric_incompatibility_list={ "iris": "*" }
|
||||||
fabric_recommend_list={}
|
fabric_recommend_list={}
|
||||||
|
|
||||||
@@ -43,6 +43,9 @@ fabric_api_version=0.46.1+1.17
|
|||||||
|
|
||||||
# Forge loader
|
# Forge loader
|
||||||
forge_version=37.1.1
|
forge_version=37.1.1
|
||||||
|
# Neo not used but the variable still needs to be defined to make gradle happy
|
||||||
|
neoforge_version_range=[*,)
|
||||||
|
|
||||||
# Forge mod versions
|
# Forge mod versions
|
||||||
starlight_version_forge=3457784
|
starlight_version_forge=3457784
|
||||||
terraforged_version=
|
terraforged_version=
|
||||||
|
|||||||
@@ -52,6 +52,9 @@ quilted_api_version=1.0.0-beta.28+0.67.0-1.18.2
|
|||||||
|
|
||||||
# Forge loader
|
# Forge loader
|
||||||
forge_version=40.2.10
|
forge_version=40.2.10
|
||||||
|
# Neo not used but the variable still needs to be defined to make gradle happy
|
||||||
|
neoforge_version_range=[*,)
|
||||||
|
|
||||||
# Forge mod versions
|
# Forge mod versions
|
||||||
starlight_version_forge=
|
starlight_version_forge=
|
||||||
terraforged_version=
|
terraforged_version=
|
||||||
|
|||||||
@@ -43,6 +43,9 @@ fabric_api_version=0.76.1+1.19.2
|
|||||||
|
|
||||||
# Forge loader
|
# Forge loader
|
||||||
forge_version=43.3.2
|
forge_version=43.3.2
|
||||||
|
# Neo not used but the variable still needs to be defined to make gradle happy
|
||||||
|
neoforge_version_range=[*,)
|
||||||
|
|
||||||
# Forge mod versions
|
# Forge mod versions
|
||||||
starlight_version_forge=
|
starlight_version_forge=
|
||||||
terraforged_version=
|
terraforged_version=
|
||||||
|
|||||||
@@ -42,6 +42,9 @@ fabric_api_version=0.87.1+1.19.4
|
|||||||
|
|
||||||
# Forge loader
|
# Forge loader
|
||||||
forge_version=45.2.4
|
forge_version=45.2.4
|
||||||
|
# Neo not used but the variable still needs to be defined to make gradle happy
|
||||||
|
neoforge_version_range=[*,)
|
||||||
|
|
||||||
# Forge mod versions
|
# Forge mod versions
|
||||||
starlight_version_forge=
|
starlight_version_forge=
|
||||||
terraforged_version=
|
terraforged_version=
|
||||||
|
|||||||
@@ -42,6 +42,9 @@ fabric_api_version=0.90.4+1.20.1
|
|||||||
|
|
||||||
# Forge loader
|
# Forge loader
|
||||||
forge_version=47.2.1
|
forge_version=47.2.1
|
||||||
|
# Neo not used but the variable still needs to be defined to make gradle happy
|
||||||
|
neoforge_version_range=[*,)
|
||||||
|
|
||||||
# Forge mod versions
|
# Forge mod versions
|
||||||
starlight_version_forge=
|
starlight_version_forge=
|
||||||
terraforged_version=
|
terraforged_version=
|
||||||
|
|||||||
@@ -42,6 +42,9 @@ fabric_api_version=0.90.4+1.20.2
|
|||||||
|
|
||||||
# Forge loader
|
# Forge loader
|
||||||
forge_version=48.0.13
|
forge_version=48.0.13
|
||||||
|
# Neo not used but the variable still needs to be defined to make gradle happy
|
||||||
|
neoforge_version_range=[*,)
|
||||||
|
|
||||||
# Forge mod versions
|
# Forge mod versions
|
||||||
starlight_version_forge=
|
starlight_version_forge=
|
||||||
terraforged_version=
|
terraforged_version=
|
||||||
|
|||||||
@@ -43,7 +43,9 @@ fabric_api_version=0.91.2+1.20.4
|
|||||||
|
|
||||||
# (Neo)Forge loader
|
# (Neo)Forge loader
|
||||||
forge_version=49.1.13
|
forge_version=49.1.13
|
||||||
neoforge_version=20.4.233
|
neoforge_version=20.4.246
|
||||||
|
neoforge_version_range=[*,)
|
||||||
|
|
||||||
# (Neo)Forge mod versions
|
# (Neo)Forge mod versions
|
||||||
starlight_version_forge=
|
starlight_version_forge=
|
||||||
terraforged_version=
|
terraforged_version=
|
||||||
|
|||||||
@@ -43,7 +43,9 @@ fabric_api_version=0.97.8+1.20.6
|
|||||||
|
|
||||||
# (Neo)Forge loader
|
# (Neo)Forge loader
|
||||||
forge_version=50.0.19
|
forge_version=50.0.19
|
||||||
neoforge_version=20.6.70-beta
|
neoforge_version=20.6.136
|
||||||
|
neoforge_version_range=[*,)
|
||||||
|
|
||||||
# (Neo)Forge mod versions
|
# (Neo)Forge mod versions
|
||||||
starlight_version_forge=
|
starlight_version_forge=
|
||||||
terraforged_version=
|
terraforged_version=
|
||||||
|
|||||||
@@ -43,7 +43,9 @@ fabric_api_version=0.115.0+1.21.1
|
|||||||
|
|
||||||
# (Neo)Forge loader
|
# (Neo)Forge loader
|
||||||
forge_version=
|
forge_version=
|
||||||
neoforge_version=21.1.92
|
neoforge_version=21.1.192
|
||||||
|
neoforge_version_range=[*,)
|
||||||
|
|
||||||
# (Neo)Forge mod versions
|
# (Neo)Forge mod versions
|
||||||
starlight_version_forge=
|
starlight_version_forge=
|
||||||
terraforged_version=
|
terraforged_version=
|
||||||
|
|||||||
@@ -43,7 +43,9 @@ fabric_api_version=0.110.0+1.21.3
|
|||||||
|
|
||||||
# (Neo)Forge loader
|
# (Neo)Forge loader
|
||||||
forge_version=
|
forge_version=
|
||||||
neoforge_version=21.3.11-beta
|
neoforge_version=21.3.86
|
||||||
|
neoforge_version_range=[*,)
|
||||||
|
|
||||||
# (Neo)Forge mod versions
|
# (Neo)Forge mod versions
|
||||||
starlight_version_forge=
|
starlight_version_forge=
|
||||||
terraforged_version=
|
terraforged_version=
|
||||||
|
|||||||
@@ -42,7 +42,10 @@ fabric_api_version=0.110.5+1.21.4
|
|||||||
|
|
||||||
# (Neo)Forge loader
|
# (Neo)Forge loader
|
||||||
forge_version=
|
forge_version=
|
||||||
neoforge_version=21.4.3-beta
|
neoforge_version=21.4.147
|
||||||
|
# version range may not be necessary, but having compiled DH for an older version caused issues with shaders
|
||||||
|
neoforge_version_range=[21.4.147,)
|
||||||
|
|
||||||
# (Neo)Forge mod versions
|
# (Neo)Forge mod versions
|
||||||
starlight_version_forge=
|
starlight_version_forge=
|
||||||
terraforged_version=
|
terraforged_version=
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# 1.21.4 version
|
# 1.21.5 version
|
||||||
java_version=21
|
java_version=21
|
||||||
minecraft_version=1.21.5
|
minecraft_version=1.21.5
|
||||||
parchment_version=1.21:2024.07.28
|
parchment_version=1.21:2024.07.28
|
||||||
@@ -42,7 +42,9 @@ fabric_api_version=0.119.5+1.21.5
|
|||||||
|
|
||||||
# (Neo)Forge loader
|
# (Neo)Forge loader
|
||||||
forge_version=
|
forge_version=
|
||||||
neoforge_version=21.5.0-beta
|
neoforge_version=21.5.87
|
||||||
|
neoforge_version_range=[*,)
|
||||||
|
|
||||||
# (Neo)Forge mod versions
|
# (Neo)Forge mod versions
|
||||||
starlight_version_forge=
|
starlight_version_forge=
|
||||||
terraforged_version=
|
terraforged_version=
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
# 1.21.6 version
|
||||||
|
java_version=21
|
||||||
|
minecraft_version=1.21.6
|
||||||
|
parchment_version=1.21:2024.07.28
|
||||||
|
compatible_minecraft_versions=["1.21.6"]
|
||||||
|
accessWidenerVersion=1_21_4
|
||||||
|
builds_for=fabric,neoforge
|
||||||
|
# forge is broken due to gradle/build script issues
|
||||||
|
|
||||||
|
# Netty
|
||||||
|
netty_version=4.1.97.Final
|
||||||
|
|
||||||
|
# Fabric loader
|
||||||
|
fabric_loader_version=0.16.13
|
||||||
|
fabric_api_version=0.127.0+1.21.6
|
||||||
|
modmenu_version=15.0.0-beta.2
|
||||||
|
starlight_version_fabric=
|
||||||
|
phosphor_version_fabric=
|
||||||
|
lithium_version=
|
||||||
|
sodium_version=mc1.21.6-0.6.13-fabric
|
||||||
|
iris_version=1.9.0+1.21.6-fabric
|
||||||
|
bclib_version=
|
||||||
|
immersive_portals_version=
|
||||||
|
canvas_version=
|
||||||
|
|
||||||
|
fabric_incompatibility_list={ }
|
||||||
|
fabric_recommend_list={}
|
||||||
|
|
||||||
|
# Fabric mod run
|
||||||
|
# 0 = Don't enable and don't run
|
||||||
|
# 1 = Can be referenced in code but doesn't run
|
||||||
|
# 2 = Can be referenced in code and runs in client
|
||||||
|
enable_starlight=0
|
||||||
|
enable_phosphor=0
|
||||||
|
enable_sodium=1
|
||||||
|
enable_lithium=0
|
||||||
|
enable_iris=1
|
||||||
|
enable_bclib=0
|
||||||
|
enable_immersive_portals=0
|
||||||
|
enable_canvas=0
|
||||||
|
|
||||||
|
# (Neo)Forge loader
|
||||||
|
forge_version=
|
||||||
|
neoforge_version=21.6.20-beta
|
||||||
|
# around 6.19 neo changed how their render API works, failing to meet this causes the game to crash
|
||||||
|
neoforge_version_range=[21.6.19-beta,)
|
||||||
|
|
||||||
|
# (Neo)Forge mod versions
|
||||||
|
starlight_version_forge=
|
||||||
|
terraforged_version=
|
||||||
|
|
||||||
|
# (Neo)Forge mod run
|
||||||
|
# 0 = Don't enable and don't run
|
||||||
|
# 1 = Can be referenced in code but doesn't run
|
||||||
|
# 2 = Can be referenced in code and runs in client
|
||||||
|
enable_starlight_forge=0
|
||||||
|
enable_terraforged=0
|
||||||
|
enable_terrafirmacraft=0
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
# 1.21.7 version
|
||||||
|
java_version=21
|
||||||
|
minecraft_version=1.21.8
|
||||||
|
parchment_version=1.21:2024.07.28
|
||||||
|
compatible_minecraft_versions=["1.21.8"]
|
||||||
|
accessWidenerVersion=1_21_4
|
||||||
|
builds_for=fabric,neoforge
|
||||||
|
# forge is broken due to gradle/build script issues
|
||||||
|
|
||||||
|
# Netty
|
||||||
|
netty_version=4.1.97.Final
|
||||||
|
|
||||||
|
# Fabric loader
|
||||||
|
fabric_loader_version=0.16.13
|
||||||
|
fabric_api_version=0.129.0+1.21.8
|
||||||
|
modmenu_version=15.0.0-beta.3
|
||||||
|
starlight_version_fabric=
|
||||||
|
phosphor_version_fabric=
|
||||||
|
lithium_version=
|
||||||
|
sodium_version=mc1.21.6-0.6.13-fabric
|
||||||
|
iris_version=1.9.1+1.21.7-fabric
|
||||||
|
bclib_version=
|
||||||
|
immersive_portals_version=
|
||||||
|
canvas_version=
|
||||||
|
|
||||||
|
fabric_incompatibility_list={ }
|
||||||
|
fabric_recommend_list={}
|
||||||
|
|
||||||
|
# Fabric mod run
|
||||||
|
# 0 = Don't enable and don't run
|
||||||
|
# 1 = Can be referenced in code but doesn't run
|
||||||
|
# 2 = Can be referenced in code and runs in client
|
||||||
|
enable_starlight=0
|
||||||
|
enable_phosphor=0
|
||||||
|
enable_sodium=1
|
||||||
|
enable_lithium=0
|
||||||
|
enable_iris=1
|
||||||
|
enable_bclib=0
|
||||||
|
enable_immersive_portals=0
|
||||||
|
enable_canvas=0
|
||||||
|
|
||||||
|
# (Neo)Forge loader
|
||||||
|
forge_version=
|
||||||
|
neoforge_version=21.8.2-beta
|
||||||
|
# around 6.19 neo changed how their render API works, failing to meet this causes the game to crash
|
||||||
|
neoforge_version_range=[*,)
|
||||||
|
|
||||||
|
# (Neo)Forge mod versions
|
||||||
|
starlight_version_forge=
|
||||||
|
terraforged_version=
|
||||||
|
|
||||||
|
# (Neo)Forge mod run
|
||||||
|
# 0 = Don't enable and don't run
|
||||||
|
# 1 = Can be referenced in code but doesn't run
|
||||||
|
# 2 = Can be referenced in code and runs in client
|
||||||
|
enable_starlight_forge=0
|
||||||
|
enable_terraforged=0
|
||||||
|
enable_terrafirmacraft=0
|
||||||
Reference in New Issue
Block a user