Many tweaks and improvements, working towards first release

This commit is contained in:
flogic 2020-09-29 01:48:04 -06:00
parent a12cffbff0
commit 543cb55c7f
No known key found for this signature in database
GPG Key ID: AD25E4DF29DECD31
17 changed files with 198 additions and 67 deletions

1
.gitignore vendored
View File

@ -118,3 +118,4 @@ run/
!gradle-wrapper.jar
src/main/generated/
src/test/
remappedSrc/

View File

@ -1,3 +1,5 @@
import org.apache.tools.ant.filters.ReplaceTokens
plugins {
id 'fabric-loom' version '0.5-SNAPSHOT'
id 'maven-publish'
@ -19,6 +21,19 @@ dependencies {
// Fabric API.
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
// Cloth Config / Autoconfig
modApi("me.shedaniel.cloth:config-2:4.8.2") {
exclude(group: "net.fabricmc.fabric-api")
exclude module: "modmenu"
}
modApi("me.sargunvohra.mcmods:autoconfig1u:3.2.2") {
exclude(group: "net.fabricmc.fabric-api")
}
include "me.shedaniel.cloth:config-2:4.8.2"
include "me.sargunvohra.mcmods:autoconfig1u:3.2.2"
modImplementation "io.github.prospector:modmenu:1.14.6+build.31"
compileOnly 'org.projectlombok:lombok:1.18.12'
annotationProcessor 'org.projectlombok:lombok:1.18.12'
@ -35,6 +50,7 @@ processResources {
from(sourceSets.main.resources.srcDirs) {
include "fabric.mod.json"
// filter(ReplaceTokens, tokens: [version: project.version])
expand "version": project.version
}
@ -51,7 +67,7 @@ tasks.withType(JavaCompile) {
}
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = "sources"
getArchiveClassifier().set("sources")
from sourceSets.main.allSource
}

View File

@ -3,12 +3,12 @@ org.gradle.jvmargs=-Xmx1G
# Fabric Properties
# check these on https://modmuss50.me/fabric.html
minecraft_version=1.16.3
yarn_mappings=1.16.3+build.11
loader_version=0.9.3+build.207
yarn_mappings=1.16.3+build.17
loader_version=0.10.0+build.208
# Mod Properties
mod_version=0.1.0-SNAPSHOT
maven_group=cc.flogi.dev
archives_base_name=smooth-chunks
# Dependencies
# check this on https://modmuss50.me/fabric.html
fabric_version=0.21.0+build.407-1.16
fabric_version=0.22.0+build.408-1.16

View File

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

5
readme.md Normal file
View File

@ -0,0 +1,5 @@
![Smooth Chunks Logo](src/main/resources/assets/smooth-chunks/icon.png)
# Smooth Chunks

View File

@ -1,42 +0,0 @@
package cc.flogi.dev.smoothchunks.client;
import lombok.AllArgsConstructor;
import lombok.Data;
import net.minecraft.client.render.chunk.ChunkBuilder;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.math.BlockPos;
import java.util.HashMap;
/**
* @author Caden Kriese (flogic)
*
* Created on 09/27/2020
*/
public class ChunkAnimationHandler {
private static final long DURATION = 1000;
private static final HashMap<ChunkBuilder.BuiltChunk, AnimationController> animations = new HashMap<>();
public static void update(ChunkBuilder.BuiltChunk chunk, MatrixStack stack) {
AnimationController controller = animations.get(chunk);
if (controller == null) {
controller = new AnimationController(chunk.getOrigin(), System.currentTimeMillis());
animations.put(chunk, controller);
}
double completion = (double) (System.currentTimeMillis() - controller.getStartTime()) / DURATION;
completion = Math.min(completion, 1.0);
stack.translate(0, (1 - completion) * controller.getFinalPos().getY(), 0);
if (completion >= 1.0) animations.remove(chunk);
}
@AllArgsConstructor @Data
private static class AnimationController {
private BlockPos finalPos;
private long startTime;
}
}

View File

@ -1,5 +1,10 @@
package cc.flogi.dev.smoothchunks.client;
import cc.flogi.dev.smoothchunks.client.config.SmoothChunksConfig;
import cc.flogi.dev.smoothchunks.client.handler.ChunkAnimationHandler;
import lombok.Getter;
import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
import me.sargunvohra.mcmods.autoconfig1u.serializer.Toml4jConfigSerializer;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
@ -10,5 +15,18 @@ import net.fabricmc.api.Environment;
* Created on 09/21/2020
*/
@Environment(EnvType.CLIENT) public class SmoothChunksClient implements ClientModInitializer {
@Override public void onInitializeClient() {}
private static SmoothChunksClient instance;
public static SmoothChunksClient get() {return instance;}
@Getter private SmoothChunksConfig config;
@Getter private ChunkAnimationHandler chunkAnimationHandler;
@Override public void onInitializeClient() {
instance = this;
AutoConfig.register(SmoothChunksConfig.class, Toml4jConfigSerializer::new);
config = AutoConfig.getConfigHolder(SmoothChunksConfig.class).getConfig();
chunkAnimationHandler = new ChunkAnimationHandler(config);
}
}

View File

@ -0,0 +1,13 @@
package cc.flogi.dev.smoothchunks.client.config;
/**
* @author Caden Kriese (flogic)
*
* Created on 09/28/2020
*/
public enum LoadAnimation {
DOWNWARD,
UPWARD,
INWARD,
FADE
}

View File

@ -0,0 +1,26 @@
package cc.flogi.dev.smoothchunks.client.config;
import lombok.Getter;
import me.sargunvohra.mcmods.autoconfig1u.ConfigData;
import me.sargunvohra.mcmods.autoconfig1u.annotation.Config;
import me.sargunvohra.mcmods.autoconfig1u.annotation.ConfigEntry;
import me.sargunvohra.mcmods.autoconfig1u.shadowed.blue.endless.jankson.Comment;
/**
* @author Caden Kriese (flogic)
*
* Created on 09/28/2020
*/
@Config(name = "smooth-chunks") @Config.Gui.Background("minecraft:textures/block/stone.png") @Getter
public class SmoothChunksConfig implements ConfigData {
@Comment("Duration of the animation in seconds.")
@ConfigEntry.BoundedDiscrete(min = 0, max=10)
int duration = 1;
@Comment("Type of animation for loading chunks.")
@ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
LoadAnimation loadAnimation = LoadAnimation.DOWNWARD;
@Comment("Disable animating chunks close to you")
boolean disableNearby = false;
}

View File

@ -0,0 +1,21 @@
package cc.flogi.dev.smoothchunks.client.config;
import io.github.prospector.modmenu.api.ConfigScreenFactory;
import io.github.prospector.modmenu.api.ModMenuApi;
import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.gui.screen.Screen;
/**
* @author Caden Kriese (flogic)
*
* Created on 09/28/2020
*/
@Environment(EnvType.CLIENT)
public class SmoothChunksModMenu implements ModMenuApi {
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
return (ConfigScreenFactory<Screen>) parent -> AutoConfig.getConfigScreen(SmoothChunksConfig.class, parent).get();
}
}

View File

@ -0,0 +1,71 @@
package cc.flogi.dev.smoothchunks.client.handler;
import cc.flogi.dev.smoothchunks.client.config.LoadAnimation;
import cc.flogi.dev.smoothchunks.client.config.SmoothChunksConfig;
import lombok.AllArgsConstructor;
import lombok.Data;
import net.minecraft.client.render.chunk.ChunkBuilder;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.math.BlockPos;
import java.util.ArrayList;
import java.util.List;
import java.util.WeakHashMap;
/**
* @author Caden Kriese (flogic)
*
* Created on 09/27/2020
*/
public final class ChunkAnimationHandler {
private final long DURATION;
private final LoadAnimation LOAD_ANIMATION;
private final boolean DISABLE_NEARBY;
private final WeakHashMap<ChunkBuilder.BuiltChunk, AnimationController> animations = new WeakHashMap<>();
private final List<BlockPos> completedChunks = new ArrayList<>();
public ChunkAnimationHandler(SmoothChunksConfig config) {
DURATION = config.getDuration() * 1000;
LOAD_ANIMATION = config.getLoadAnimation();
DISABLE_NEARBY = config.isDisableNearby();
}
public void update(ChunkBuilder.BuiltChunk chunk, MatrixStack stack) {
if (completedChunks.contains(chunk.getOrigin())) return;
AnimationController controller = animations.get(chunk);
if (controller == null) {
controller = new AnimationController(chunk.getOrigin(), System.currentTimeMillis());
animations.put(chunk, controller);
}
double completion = (double) (System.currentTimeMillis() - controller.getStartTime()) / DURATION;
completion = Math.min(completion, 1.0);
switch (LOAD_ANIMATION) {
default:
case UPWARD:
stack.translate(0, (1 - completion) * controller.getFinalPos().getY(), 0);
break;
case DOWNWARD:
stack.translate(0, -(1 - completion) * controller.getFinalPos().getY(), 0);
break;
// case INWARD:
// stack.translate(0, (1 - completion) * controller.getFinalPos().getY(), 0);
// break;
}
if (completion >= 1.0) {
completedChunks.add(chunk.getOrigin());
animations.remove(chunk);
}
}
@AllArgsConstructor @Data
private static class AnimationController {
private BlockPos finalPos;
private long startTime;
}
}

View File

@ -1,18 +1,13 @@
package cc.flogi.dev.smoothchunks.mixin;
import cc.flogi.dev.smoothchunks.client.ChunkAnimationHandler;
import it.unimi.dsi.fastutil.objects.ObjectList;
import cc.flogi.dev.smoothchunks.client.SmoothChunksClient;
import it.unimi.dsi.fastutil.objects.ObjectListIterator;
import net.minecraft.client.gl.VertexBuffer;
import net.minecraft.client.render.BuiltChunkStorage;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.WorldRenderer;
import net.minecraft.client.render.chunk.ChunkBuilder;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.client.world.ClientWorld;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@ -32,12 +27,9 @@ public abstract class WorldRendererMixin {
target = "Lnet/minecraft/client/gl/VertexBuffer;bind()V"),
locals = LocalCapture.CAPTURE_FAILHARD
)
private void rotateRender(RenderLayer renderLayer, MatrixStack matrixStack, double d, double e, double f,
private void renderLayerInject(RenderLayer renderLayer, MatrixStack matrixStack, double d, double e, double f,
CallbackInfo ci, boolean bl, ObjectListIterator objectListIterator,
WorldRenderer.ChunkInfo chunkInfo2, ChunkBuilder.BuiltChunk builtChunk, VertexBuffer vertexBuffer) {
int chunkX = builtChunk.getOrigin().getX() / 16;
int chunkZ = builtChunk.getOrigin().getZ() / 16;
ChunkAnimationHandler.update(builtChunk, matrixStack);
SmoothChunksClient.get().getChunkAnimationHandler().update(builtChunk, matrixStack);
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -0,0 +1,6 @@
{
"text.autoconfig.smooth-chunks.title": "Smooth Chunks Config",
"text.autoconfig.smooth-chunks.option.loadAnimation": "Load Animation",
"text.autoconfig.smooth-chunks.option.duration": "Duration",
"text.autoconfig.smooth-chunks.option.disableNearby": "Disable for Nearby Chunks"
}

View File

@ -1,7 +1,7 @@
{
"schemaVersion": 1,
"id": "smooth-chunks",
"version": "${version}",
"version": "@version@",
"name": "Smooth Chunks",
"description": "Smooth chunk load animations.",
"authors": [
@ -12,10 +12,14 @@
"repo": "repo.flogi.cc"
},
"license": "MIT",
"accessWidener" : "smooth-chunks.accesswidener",
"icon": "assets/smooth-chunks/icon.png",
"environment": "client",
"accessWidener": "smooth-chunks.accesswidener",
"modmenu:clientsideOnly": "true",
"entrypoints": {
"modmenu": [
"cc.flogi.dev.smoothchunks.client.config.SmoothChunksModMenu"
],
"client": [
"cc.flogi.dev.smoothchunks.client.SmoothChunksClient"
],

View File

@ -0,0 +1,3 @@
accessWidener v1 named
accessible class net/minecraft/client/render/WorldRenderer$ChunkInfo

View File

@ -3,11 +3,8 @@
"minVersion": "0.8",
"package": "cc.flogi.dev.smoothchunks.mixin",
"compatibilityLevel": "JAVA_8",
"mixins": [
"BuiltChunkMixin"
],
"mixins": [],
"client": [
"BuiltChunkStorageMixin",
"WorldRendererMixin"
],
"injectors": {