mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-10-25 13:30:08 +00:00
Targeted NeoForge 26.3.0.83
- NeoForge builds compile against NeoForge 26.3.0.83 - The NeoForge mod requires NeoForge 26.3.0.65-beta or newer, the first build without the cached world array - NeoForge server access test covers publishing, removing and restoring runtime levels against the live level map - README platform table and bug template name the current NeoForge target
This commit is contained in:
7 files changed
+91
-6
No files matched your search
@@ -61,7 +61,7 @@ body:
|
|||||||
id: loaderversion
|
id: loaderversion
|
||||||
attributes:
|
attributes:
|
||||||
label: Platform / Loader Version
|
label: Platform / Loader Version
|
||||||
description: Exact server or loader build (see console). For example "Paper 26.3-133", "Fabric Loader 0.19.5", "NeoForge 26.3.0.33-beta".
|
description: Exact server or loader build (see console). For example "Paper 26.3-133", "Fabric Loader 0.19.5", "NeoForge 26.3.0.83".
|
||||||
placeholder: DO NOT SAY "LATEST"
|
placeholder: DO NOT SAY "LATEST"
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ Canonical English is defined in the typed Java catalogs under `core/src/main/jav
|
|||||||
| Spigot / CraftBukkit | plugin jar | 26.1.2 - 26.3 | Managed `iris:*` creation and generation; exact vanilla-slot `/iris replace` is unavailable |
|
| Spigot / CraftBukkit | plugin jar | 26.1.2 - 26.3 | Managed `iris:*` creation and generation; exact vanilla-slot `/iris replace` is unavailable |
|
||||||
| Fabric | mod jar | 26.3 | Server worldgen + client HUD; requires Fabric Loader 0.19.5+ |
|
| Fabric | mod jar | 26.3 | Server worldgen + client HUD; requires Fabric Loader 0.19.5+ |
|
||||||
| Forge | mod jar | 26.3 | Server worldgen + client HUD; current target is Forge 26.3-66.0.8 |
|
| Forge | mod jar | 26.3 | Server worldgen + client HUD; current target is Forge 26.3-66.0.8 |
|
||||||
| NeoForge | mod jar | 26.3 | Server worldgen + client HUD; current target is NeoForge 26.3.0.33-beta |
|
| NeoForge | mod jar | 26.3 | Server worldgen + client HUD; requires NeoForge 26.3.0.65-beta+; current target is NeoForge 26.3.0.83 |
|
||||||
|
|
||||||
Java 25 is required on every platform.
|
Java 25 is required on every platform.
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ Properties rootProperties = new Properties()
|
|||||||
file('../../gradle.properties').withInputStream { InputStream stream -> rootProperties.load(stream) }
|
file('../../gradle.properties').withInputStream { InputStream stream -> rootProperties.load(stream) }
|
||||||
String irisVersion = providers.gradleProperty('irisVersion').getOrElse(rootProperties.getProperty('irisVersion', '4.3.3'))
|
String irisVersion = providers.gradleProperty('irisVersion').getOrElse(rootProperties.getProperty('irisVersion', '4.3.3'))
|
||||||
String minecraftVersion = providers.gradleProperty('minecraftVersion').getOrElse(rootProperties.getProperty('minecraftVersion', '26.3'))
|
String minecraftVersion = providers.gradleProperty('minecraftVersion').getOrElse(rootProperties.getProperty('minecraftVersion', '26.3'))
|
||||||
String neoForgeVersion = providers.gradleProperty('neoForgeVersion').getOrElse(rootProperties.getProperty('neoForgeVersion', '26.3.0.33-beta'))
|
String neoForgeVersion = providers.gradleProperty('neoForgeVersion').getOrElse(rootProperties.getProperty('neoForgeVersion', '26.3.0.83'))
|
||||||
Closure<String> irisArtifactName = { String platform, String targetVersion ->
|
Closure<String> irisArtifactName = { String platform, String targetVersion ->
|
||||||
return "Iris v${project.version} [${platform}] ${targetVersion}.jar"
|
return "Iris v${project.version} [${platform}] ${targetVersion}.jar"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ logoFile = "assets/irisworldgen/icon.png"
|
|||||||
[[dependencies.irisworldgen]]
|
[[dependencies.irisworldgen]]
|
||||||
modId = "neoforge"
|
modId = "neoforge"
|
||||||
type = "required"
|
type = "required"
|
||||||
versionRange = "[26.3,26.4)"
|
versionRange = "[26.3.0.65-beta,26.4)"
|
||||||
ordering = "NONE"
|
ordering = "NONE"
|
||||||
side = "BOTH"
|
side = "BOTH"
|
||||||
|
|
||||||
|
|||||||
+85
@@ -0,0 +1,85 @@
|
|||||||
|
package art.arcane.volmlib.nativelib.minecraft26_2.neoforge;
|
||||||
|
|
||||||
|
import art.arcane.volmlib.nativelib.minecraft26_2.modded.ModdedServerAccess;
|
||||||
|
import art.arcane.volmlib.nativelib.minecraft26_2.modded.ModdedServerLevels;
|
||||||
|
import art.arcane.volmlib.nativelib.modded.NativeLoaderOptions;
|
||||||
|
import net.minecraft.SharedConstants;
|
||||||
|
import net.minecraft.core.registries.Registries;
|
||||||
|
import net.minecraft.resources.Identifier;
|
||||||
|
import net.minecraft.resources.ResourceKey;
|
||||||
|
import net.minecraft.server.Bootstrap;
|
||||||
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.function.BooleanSupplier;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertNull;
|
||||||
|
import static org.junit.Assert.assertSame;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.mockito.Mockito.doCallRealMethod;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
public class NativeNeoForgeServerAccessTest {
|
||||||
|
private static final ResourceKey<Level> RUNTIME_DIMENSION =
|
||||||
|
ResourceKey.create(Registries.DIMENSION, Identifier.fromNamespaceAndPath("irisworldgen", "runtime"));
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void bootstrap() {
|
||||||
|
SharedConstants.tryDetectVersion();
|
||||||
|
Bootstrap.bootStrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void forgetLevelSnapshot() {
|
||||||
|
ModdedServerLevels.forget();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void runtimeLevelsJoinAndLeaveTheServerTickView() throws ReflectiveOperationException {
|
||||||
|
ModdedServerAccess access = new NativeNeoForgeLoader(
|
||||||
|
new NativeLoaderOptions("irisworldgen", "treefeller", BooleanSupplier::getAsBoolean)).serverAccess();
|
||||||
|
MinecraftServer server = serverWithLiveLevelMap();
|
||||||
|
ServerLevel level = mock(ServerLevel.class);
|
||||||
|
when(level.dimension()).thenReturn(RUNTIME_DIMENSION);
|
||||||
|
|
||||||
|
assertNull(access.putLevelIfAbsent(server, RUNTIME_DIMENSION, level));
|
||||||
|
assertTrue(access.hasLevel(server, RUNTIME_DIMENSION));
|
||||||
|
assertTrue(ticks(server, level));
|
||||||
|
assertSame(level, ModdedServerLevels.level(server, RUNTIME_DIMENSION));
|
||||||
|
|
||||||
|
assertSame(level, access.removeLevel(server, RUNTIME_DIMENSION));
|
||||||
|
assertFalse(access.hasLevel(server, RUNTIME_DIMENSION));
|
||||||
|
assertFalse(ticks(server, level));
|
||||||
|
assertNull(ModdedServerLevels.level(server, RUNTIME_DIMENSION));
|
||||||
|
|
||||||
|
assertNull(access.putLevel(server, RUNTIME_DIMENSION, level));
|
||||||
|
assertTrue(ticks(server, level));
|
||||||
|
assertSame(level, ModdedServerLevels.level(server, RUNTIME_DIMENSION));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static MinecraftServer serverWithLiveLevelMap() throws ReflectiveOperationException {
|
||||||
|
MinecraftServer server = mock(MinecraftServer.class);
|
||||||
|
Field levels = MinecraftServer.class.getDeclaredField("levels");
|
||||||
|
levels.setAccessible(true);
|
||||||
|
levels.set(server, new LinkedHashMap<ResourceKey<Level>, ServerLevel>());
|
||||||
|
doCallRealMethod().when(server).getAllLevels();
|
||||||
|
return server;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean ticks(MinecraftServer server, ServerLevel expected) {
|
||||||
|
for (ServerLevel level : server.getAllLevels()) {
|
||||||
|
if (level == expected) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -76,7 +76,7 @@ String minecraftVersion = providers.gradleProperty('minecraftVersion').getOrElse
|
|||||||
String bukkitMinecraftRange = providers.gradleProperty('bukkitMinecraftRange').getOrElse('26.1.2-26.3')
|
String bukkitMinecraftRange = providers.gradleProperty('bukkitMinecraftRange').getOrElse('26.1.2-26.3')
|
||||||
String fabricLoaderVersion = providers.gradleProperty('fabricLoaderVersion').getOrElse('0.19.5')
|
String fabricLoaderVersion = providers.gradleProperty('fabricLoaderVersion').getOrElse('0.19.5')
|
||||||
String forgeVersion = providers.gradleProperty('forgeVersion').getOrElse('26.3-66.0.8')
|
String forgeVersion = providers.gradleProperty('forgeVersion').getOrElse('26.3-66.0.8')
|
||||||
String neoForgeVersion = providers.gradleProperty('neoForgeVersion').getOrElse('26.3.0.33-beta')
|
String neoForgeVersion = providers.gradleProperty('neoForgeVersion').getOrElse('26.3.0.83')
|
||||||
String volmLibShared = 'com.github.VolmitSoftware.VolmLib:volmlib-shared:master-SNAPSHOT'
|
String volmLibShared = 'com.github.VolmitSoftware.VolmLib:volmlib-shared:master-SNAPSHOT'
|
||||||
File localVolmLibCheckout = (File) gradle.extensions.extraProperties.get('volmLibDirectory')
|
File localVolmLibCheckout = (File) gradle.extensions.extraProperties.get('volmLibDirectory')
|
||||||
IncludedBuild localVolmLibBuild = localVolmLibCheckout == null ? null : gradle.includedBuilds.find { IncludedBuild includedBuild ->
|
IncludedBuild localVolmLibBuild = localVolmLibCheckout == null ? null : gradle.includedBuilds.find { IncludedBuild includedBuild ->
|
||||||
|
|||||||
+1
-1
@@ -27,4 +27,4 @@ minecraftVersion=26.3
|
|||||||
apiVersion=26.1
|
apiVersion=26.1
|
||||||
fabricLoaderVersion=0.19.5
|
fabricLoaderVersion=0.19.5
|
||||||
forgeVersion=26.3-66.0.8
|
forgeVersion=26.3-66.0.8
|
||||||
neoForgeVersion=26.3.0.33-beta
|
neoForgeVersion=26.3.0.83
|
||||||
Reference in new issue
Block a user