Compare commits
12 Commits
v0.1.0-bet
...
v0.1.0-bet
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6841805446 | ||
|
|
eb20846213 | ||
|
|
66a0850ac9 | ||
|
|
9a16a91fb8 | ||
|
|
580041a1a1 | ||
|
|
fb31d0e1f7 | ||
|
|
0b2070d781 | ||
|
|
30a79469e3 | ||
|
|
254b331259 | ||
|
|
a21c44ad31 | ||
|
|
77ba4a4584 | ||
|
|
a510acbd78 |
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@@ -31,8 +31,6 @@ jobs:
|
||||
key: ${{ runner.os }}-project-local-gradle-caches-${{ hashFiles('**/libs.versions.toml', '**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-project-local-gradle-caches-
|
||||
- name: "setup dependencies"
|
||||
run: ./install_deps.sh
|
||||
- name: "execute gradle build"
|
||||
run: ./gradlew build
|
||||
- name: Determine Snapshot Status
|
||||
|
||||
6
.gitmodules
vendored
6
.gitmodules
vendored
@@ -1,6 +0,0 @@
|
||||
[submodule "ConcurrentUtil"]
|
||||
path = ConcurrentUtil
|
||||
url = https://github.com/Spottedleaf/ConcurrentUtil.git
|
||||
[submodule "YamlConfig"]
|
||||
path = YamlConfig
|
||||
url = https://github.com/Spottedleaf/YamlConfig.git
|
||||
|
||||
Submodule ConcurrentUtil deleted from 08d3ca3241
Submodule YamlConfig deleted from 67552e7707
10
build.gradle
10
build.gradle
@@ -22,8 +22,8 @@ def getGitCommit = { ->
|
||||
dependencies {
|
||||
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
|
||||
|
||||
api("ca.spottedleaf:concurrentutil:${rootProject.concurrentutil_version}")
|
||||
api("ca.spottedleaf:yamlconfig:${rootProject.yamlconfig_version}")
|
||||
api("ca.spottedleaf:concurrentutil:${rootProject.concurrentutil_version}") { setTransitive(false) }
|
||||
api("ca.spottedleaf:yamlconfig:${rootProject.yamlconfig_version}") { setTransitive(false) }
|
||||
api("org.yaml:snakeyaml:${rootProject.snakeyaml_version}")
|
||||
|
||||
modImplementation "me.shedaniel.cloth:cloth-config:${rootProject.cloth_version}"
|
||||
@@ -46,10 +46,10 @@ allprojects {
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenLocal {
|
||||
maven {
|
||||
url "https://repo.papermc.io/repository/maven-public/"
|
||||
mavenContent {
|
||||
includeModule("ca.spottedleaf", "concurrentutil")
|
||||
includeModule("ca.spottedleaf", "yamlconfig")
|
||||
includeGroup("ca.spottedleaf")
|
||||
}
|
||||
}
|
||||
maven {
|
||||
|
||||
@@ -17,8 +17,8 @@ dependencies {
|
||||
runtimeOnly(project(":").sourceSets.main.output)
|
||||
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
|
||||
|
||||
libs("ca.spottedleaf:concurrentutil:${rootProject.concurrentutil_version}")
|
||||
libs("ca.spottedleaf:yamlconfig:${rootProject.yamlconfig_version}")
|
||||
libs("ca.spottedleaf:concurrentutil:${rootProject.concurrentutil_version}") { setTransitive(false) }
|
||||
libs("ca.spottedleaf:yamlconfig:${rootProject.yamlconfig_version}") { setTransitive(false) }
|
||||
libs("org.yaml:snakeyaml:${rootProject.snakeyaml_version}")
|
||||
|
||||
modImplementation "me.shedaniel.cloth:cloth-config-fabric:${rootProject.cloth_version}"
|
||||
|
||||
@@ -8,13 +8,13 @@ supported_minecraft_versions=1.21,1.21.1
|
||||
loader_version=0.16.5
|
||||
neoforge_version=21.1.79
|
||||
snakeyaml_version=2.3
|
||||
concurrentutil_version=0.0.2-SNAPSHOT
|
||||
yamlconfig_version=1.0.2-SNAPSHOT
|
||||
concurrentutil_version=0.0.2
|
||||
yamlconfig_version=1.0.2
|
||||
cloth_version=15.0.128
|
||||
# version ids from modrinth
|
||||
fabric_lithium_version=frXUdgvL
|
||||
neo_lithium_version=KhdehJ6l
|
||||
# Mod Properties
|
||||
mod_version=0.1.0-beta.10
|
||||
mod_version=0.1.0-beta.13
|
||||
maven_group=ca.spottedleaf.moonrise
|
||||
archives_base_name=moonrise
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -eou pipefail
|
||||
|
||||
git submodule update --init --recursive
|
||||
|
||||
cd ConcurrentUtil
|
||||
mvn install
|
||||
|
||||
cd ..
|
||||
|
||||
cd YamlConfig
|
||||
mvn install
|
||||
@@ -21,8 +21,8 @@ dependencies {
|
||||
add('shadow', project([path: ":", configuration: "namedElements"]))
|
||||
neoForge "net.neoforged:neoforge:${rootProject.neoforge_version}"
|
||||
|
||||
shadow("ca.spottedleaf:concurrentutil:${rootProject.concurrentutil_version}")
|
||||
shadow("ca.spottedleaf:yamlconfig:${rootProject.yamlconfig_version}")
|
||||
shadow("ca.spottedleaf:concurrentutil:${rootProject.concurrentutil_version}") { setTransitive(false) }
|
||||
shadow("ca.spottedleaf:yamlconfig:${rootProject.yamlconfig_version}") { setTransitive(false) }
|
||||
shadow("org.yaml:snakeyaml:${rootProject.snakeyaml_version}")
|
||||
forgeExtra("org.yaml:snakeyaml:${rootProject.snakeyaml_version}")
|
||||
|
||||
|
||||
@@ -48,3 +48,6 @@ include("fabric")
|
||||
findProject(":fabric").name = "Moonrise-Fabric"
|
||||
include("neoforge")
|
||||
findProject(":neoforge").name = "Moonrise-NeoForge"
|
||||
|
||||
// includeBuild("../YamlConfig") // Uncomment to use local YamlConfig
|
||||
// includeBuild("../ConcurrentUtil") // Uncomment to use local ConcurrentUtil
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package ca.spottedleaf.moonrise.mixin.chunk_system;
|
||||
|
||||
import net.minecraft.core.SectionPos;
|
||||
import net.minecraft.world.level.gameevent.DynamicGameEventListener;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(DynamicGameEventListener.class)
|
||||
abstract class DynamicGameEventListenerMixin {
|
||||
@Shadow @Nullable private SectionPos lastSection;
|
||||
|
||||
@Inject(method = "remove", at = @At("RETURN"))
|
||||
private void onRemove(final CallbackInfo ci) {
|
||||
// We need to unset the last section when removed, otherwise if the same instance is re-added at the same position it
|
||||
// will assume there was no change and fail to re-register.
|
||||
// In vanilla, chunks rarely unload and re-load quickly enough to trigger this issue. However, our chunk system has a
|
||||
// quirk where fast chunk reload cycles will often occur on player login (see PR #22).
|
||||
// So we fix this vanilla oversight as our changes cause it to manifest in bugs much more often (see issue #87).
|
||||
this.lastSection = null;
|
||||
}
|
||||
}
|
||||
@@ -81,6 +81,13 @@ abstract class ServerChunkCacheMixin extends ChunkSource implements ChunkSystemS
|
||||
completable::complete
|
||||
);
|
||||
|
||||
if (!completable.isDone() && chunkTaskScheduler.hasShutdown()) {
|
||||
throw new IllegalStateException(
|
||||
"Chunk system has shut down, cannot process chunk requests in world '" + ca.spottedleaf.moonrise.common.util.WorldUtil.getWorldName(this.level) + "' at "
|
||||
+ "(" + chunkX + "," + chunkZ + ") status: " + toStatus
|
||||
);
|
||||
}
|
||||
|
||||
if (TickThread.isTickThreadFor(this.level, chunkX, chunkZ)) {
|
||||
ChunkTaskScheduler.pushChunkWait(this.level, chunkX, chunkZ);
|
||||
this.mainThreadProcessor.managedBlock(completable::isDone);
|
||||
|
||||
@@ -74,7 +74,7 @@ interface EntityGetterMixin {
|
||||
@Overwrite
|
||||
default boolean isUnobstructed(final Entity entity, final VoxelShape voxel) {
|
||||
if (voxel.isEmpty()) {
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
final AABB singleAABB = ((CollisionVoxelShape)voxel).moonrise$getSingleAABBRepresentation();
|
||||
|
||||
@@ -55,7 +55,7 @@ abstract class LevelMixin implements LevelAccessor, AutoCloseable {
|
||||
public boolean isUnobstructed(final Entity entity) {
|
||||
final AABB boundingBox = entity.getBoundingBox();
|
||||
if (CollisionUtil.isEmpty(boundingBox)) {
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
final List<Entity> entities = this.getEntities(
|
||||
|
||||
@@ -1042,7 +1042,7 @@ public final class MoonriseRegionFileIO {
|
||||
LOGGER.error("Failed to decompress chunk data for task: " + this.toString(), thr);
|
||||
}
|
||||
|
||||
if (compoundTag == null) {
|
||||
if (throwable == null && compoundTag == null) {
|
||||
// need to re-try from the start
|
||||
this.scheduleReadIO();
|
||||
return;
|
||||
|
||||
@@ -219,6 +219,8 @@ public final class ChunkHolderManager {
|
||||
LOGGER.error("Failed to close '" + type.name() + "' regionfile cache for world '" + WorldUtil.getWorldName(this.world) + "'", ex);
|
||||
}
|
||||
}
|
||||
|
||||
this.taskScheduler.setShutdown(true);
|
||||
}
|
||||
|
||||
void ensureInAutosave(final NewChunkHolder holder) {
|
||||
|
||||
@@ -271,6 +271,16 @@ public final class ChunkTaskScheduler {
|
||||
return this.lockShift;
|
||||
}
|
||||
|
||||
private volatile boolean shutdown;
|
||||
|
||||
public boolean hasShutdown() {
|
||||
return this.shutdown;
|
||||
}
|
||||
|
||||
public void setShutdown(final boolean shutdown) {
|
||||
this.shutdown = shutdown;
|
||||
}
|
||||
|
||||
public ChunkTaskScheduler(final ServerLevel world) {
|
||||
this.world = world;
|
||||
// must be >= region shift (in paper, doesn't exist) and must be >= ticket propagator section shift
|
||||
@@ -524,6 +534,13 @@ public final class ChunkTaskScheduler {
|
||||
return loaded;
|
||||
}
|
||||
|
||||
if (this.hasShutdown()) {
|
||||
throw new IllegalStateException(
|
||||
"Chunk system has shut down, cannot process chunk requests in world '" + ca.spottedleaf.moonrise.common.util.WorldUtil.getWorldName(this.world) + "' at "
|
||||
+ "(" + chunkX + "," + chunkZ + ") status: " + status
|
||||
);
|
||||
}
|
||||
|
||||
final Long ticketId = getNextNonFullLoadId();
|
||||
final int ticketLevel = getTicketLevel(status);
|
||||
this.chunkHolderManager.addTicketAtLevel(NON_FULL_CHUNK_LOAD, chunkX, chunkZ, ticketLevel, ticketId);
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
"chunk_system.ChunkStepMixin",
|
||||
"chunk_system.ChunkStorageMixin",
|
||||
"chunk_system.DistanceManagerMixin",
|
||||
"chunk_system.DynamicGameEventListenerMixin",
|
||||
"chunk_system.EntityGetterMixin",
|
||||
"chunk_system.EntityMixin",
|
||||
"chunk_system.EntityTickListMixin",
|
||||
|
||||
Reference in New Issue
Block a user