Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,21 @@ repositories {
name = 'JitPack'
url 'https://jitpack.io'
}

maven {
name = 'isXander'
url 'https://maven.isxander.dev/releases'
}
}

dependencies {
minecraft "com.mojang:minecraft:${project.minecraft_version}"
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
modImplementation "com.github.Lortseam.completeconfig:base:${project.complete_config_version}"
modImplementation "com.github.Lortseam.completeconfig:gui-cloth:${project.complete_config_version}"

include "com.github.Lortseam.completeconfig:base:${project.complete_config_version}"
include "com.github.Lortseam.completeconfig:gui-cloth:${project.complete_config_version}"
modImplementation ("dev.isxander:yet-another-config-lib:${project.yacl_version}") {
exclude module: 'modmenu'
}
modImplementation "com.terraformersmc:modmenu:${project.mod_menu_version}"
}

loom {
Expand Down
5 changes: 3 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@ mod_version = 0.7.1
maven_group = net.dorianpb
archives_base_name = cem

#Dependancies
complete_config_version = 2.2.0
# Dependencies
yacl_version = 1.7.1
mod_menu_version = 4.0.4

# suppress inspection "UnusedProperty"
org.gradle.jvmargs = -Xmx1G
4 changes: 2 additions & 2 deletions src/main/java/net/dorianpb/cem/internal/CemInit.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package net.dorianpb.cem.internal;

import net.dorianpb.cem.internal.api.CemEntityInitializer;
import net.dorianpb.cem.internal.config.CemConfigFairy;
import net.dorianpb.cem.internal.config.CemConfig;
import net.dorianpb.cem.internal.util.CemFairy;
import net.dorianpb.cem.mixins.BlockEntityRendererAccessor;
import net.dorianpb.cem.mixins.EntityRendererAccessor;
Expand All @@ -14,7 +14,7 @@ public class CemInit implements ClientModInitializer{
@Override
@SuppressWarnings({"unchecked", "RedundantSuppression"})
public void onInitializeClient(){
CemConfigFairy.loadConfig();
CemConfig.INSTANCE.load();
FabricLoader.getInstance().getEntrypointContainers("cem", CemEntityInitializer.class).forEach((container) -> {
ModMetadata provider = container.getProvider().getMetadata();
CemEntityInitializer entrypoint = container.getEntrypoint();
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/net/dorianpb/cem/internal/api/CemModel.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package net.dorianpb.cem.internal.api;

import net.dorianpb.cem.internal.config.CemConfigFairy;
import net.dorianpb.cem.internal.config.CemConfig;
import net.dorianpb.cem.internal.models.CemModelEntry;
import net.dorianpb.cem.internal.models.CemModelEntry.CemModelPart;
import net.minecraft.client.model.ModelPart;
Expand All @@ -9,7 +9,7 @@ public interface CemModel{

default void rotatePart(CemModelEntry cemModelEntry, char axis, float degrees){
CemModelPart modelPart = (cemModelEntry != null)? cemModelEntry.getModel() : null;
if(modelPart != null && !CemConfigFairy.getConfig().useTransparentParts()){
if(modelPart != null && !CemConfig.getConfig().useTransparentParts()){
modelPart.setRotation(axis, (float) (modelPart.getRotation(axis) + Math.toRadians((degrees + 360) % 360)));
}
}
Expand Down
106 changes: 73 additions & 33 deletions src/main/java/net/dorianpb/cem/internal/config/CemConfig.java
Original file line number Diff line number Diff line change
@@ -1,45 +1,85 @@
package net.dorianpb.cem.internal.config;

import me.lortseam.completeconfig.api.ConfigEntry;
import me.lortseam.completeconfig.data.Config;
import me.lortseam.completeconfig.gui.ConfigScreenBuilder;
import me.lortseam.completeconfig.gui.cloth.ClothConfigScreenBuilder;
import dev.isxander.yacl.api.ConfigCategory;
import dev.isxander.yacl.api.Option;
import dev.isxander.yacl.api.OptionFlag;
import dev.isxander.yacl.api.YetAnotherConfigLib;
import dev.isxander.yacl.config.ConfigEntry;
import dev.isxander.yacl.config.ConfigInstance;
import dev.isxander.yacl.config.GsonConfigInstance;
import dev.isxander.yacl.gui.controllers.BooleanController;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.text.Text;

@SuppressWarnings({"FieldMayBeFinal", "CanBeFinal"})
public final class CemConfig extends Config implements CemOptions{
@ConfigEntry private boolean use_optifine_folder = CemOptions.instance.useOptifineFolder();
@ConfigEntry private boolean use_new_model_creation_fix = CemOptions.instance.useTransparentParts();
@ConfigEntry private boolean use_old_animations = CemOptions.instance.useOldAnimations();

private CemConfig(){
super("cem");
}
public final class CemConfig {
public static final ConfigInstance<CemConfig> INSTANCE = new GsonConfigInstance<>(CemConfig.class, FabricLoader.getInstance().getConfigDir().resolve("cem.json"));
private static final OptionFlag RELOAD_RESOURCES = MinecraftClient::reloadResources;

@ConfigEntry private boolean useOptifineFolder = false;
@ConfigEntry private boolean useNewModelCreationFix = true;
@ConfigEntry private boolean useOldAnimations = false;

public static CemConfig getConfig(){
CemConfig hello = new CemConfig();
hello.load();
return hello;
public static CemConfig getConfig() {
return INSTANCE.getConfig();
}

public static void createScreen(){
if(FabricLoader.getInstance().isModLoaded("cloth-config2")){
ConfigScreenBuilder.setMain("cem", new ClothConfigScreenBuilder());
}
public static Screen createScreen(Screen parent) {
CemConfig defaults = INSTANCE.getDefaults();
CemConfig config = getConfig();
return YetAnotherConfigLib.createBuilder()
.title(Text.literal("Custom Entity Models"))
.category(ConfigCategory.createBuilder()
.name(Text.literal("Custom Entity Models"))
.option(Option.createBuilder(boolean.class)
.name(Text.translatable("config.cem.use_optifine_folder"))
.tooltip(Text.translatable("config.cem.use_optifine_folder.description"))
.binding(
defaults.useOptifineFolder,
() -> config.useOptifineFolder,
val -> config.useOptifineFolder = val
)
.controller(opt -> new BooleanController(opt, BooleanController.YES_NO_FORMATTER, false))
.flag(RELOAD_RESOURCES)
.build())
.option(Option.createBuilder(boolean.class)
.name(Text.translatable("config.cem.use_new_model_creation_fix"))
.tooltip(Text.translatable("config.cem.use_new_model_creation_fix.description"))
.binding(
defaults.useNewModelCreationFix,
() -> config.useNewModelCreationFix,
val -> config.useNewModelCreationFix = val
)
.controller(opt -> new BooleanController(opt, BooleanController.YES_NO_FORMATTER, false))
.flag(RELOAD_RESOURCES)
.build())
.option(Option.createBuilder(boolean.class)
.name(Text.translatable("config.cem.use_old_animations"))
.tooltip(Text.translatable("config.cem.use_old_animations.description"))
.binding(
defaults.useOldAnimations,
() -> config.useOldAnimations,
val -> config.useOldAnimations = val
)
.controller(opt -> new BooleanController(opt, BooleanController.YES_NO_FORMATTER, false))
.flag(RELOAD_RESOURCES)
.build())
.build())
.save(INSTANCE::save)
.build()
.generateScreen(parent);
}

@Override
public boolean useOptifineFolder(){
return this.use_optifine_folder;

public boolean useOptifineFolder() {
return this.useOptifineFolder;
}

@Override
public boolean useTransparentParts(){
return this.use_new_model_creation_fix;

public boolean useTransparentParts() {
return this.useNewModelCreationFix;
}

@Override
public boolean useOldAnimations(){
return this.use_old_animations;

public boolean useOldAnimations() {
return this.useOldAnimations;
}
}
27 changes: 0 additions & 27 deletions src/main/java/net/dorianpb/cem/internal/config/CemConfigFairy.java

This file was deleted.

19 changes: 0 additions & 19 deletions src/main/java/net/dorianpb/cem/internal/config/CemOptions.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package net.dorianpb.cem.internal.config;

import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;

public class ModMenuIntegration implements ModMenuApi {
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
return CemConfig::createScreen;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package net.dorianpb.cem.internal.models;

import net.dorianpb.cem.internal.api.CemModel;
import net.dorianpb.cem.internal.config.CemConfigFairy;
import net.dorianpb.cem.internal.config.CemConfig;
import net.dorianpb.cem.internal.models.CemModelEntry.CemCuboid;
import net.dorianpb.cem.internal.models.CemModelEntry.CemModelPart;
import net.dorianpb.cem.internal.models.CemModelEntry.TransparentCemModelPart;
Expand All @@ -21,7 +21,7 @@ public CemArmorModel(C model, @Nullable Float inflate){

public static CemModelPart getRoot(CemModel model, @Nullable Float inflate){
CemModelPart root = new CemModelPart(64, 32);
if(CemConfigFairy.getConfig().useTransparentParts()){
if(CemConfig.getConfig().useTransparentParts()){
root.addChild(EntityModelPartNames.HEAD, prepPart(castPart((CemModelPart) ((BipedEntityModel<?>) model).head), EntityModelPartNames.HEAD));
root.addChild(EntityModelPartNames.HAT, prepPart(castPart((CemModelPart) ((BipedEntityModel<?>) model).hat), EntityModelPartNames.HAT));
root.addChild(EntityModelPartNames.BODY, prepPart(castPart((CemModelPart) ((BipedEntityModel<?>) model).body), EntityModelPartNames.BODY));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package net.dorianpb.cem.internal.models;

import net.dorianpb.cem.internal.config.CemConfigFairy;
import net.dorianpb.cem.internal.config.CemConfig;
import net.dorianpb.cem.internal.file.JemFile.JemModel;
import net.dorianpb.cem.internal.file.JpmFile;
import net.dorianpb.cem.internal.file.JpmFile.JpmBox;
Expand Down Expand Up @@ -176,7 +176,7 @@ String getPart(){

/** this is done because there can be a discrepancy between the translate value in the .jem and the actual part */
void setTranslate(char axis, float requestedTranslate){
if(CemConfigFairy.getConfig().useOldAnimations()){
if(CemConfig.getConfig().useOldAnimations()){
float oldTranslate;
switch(axis){
case 'x' -> {
Expand Down Expand Up @@ -216,7 +216,7 @@ void setTranslate(char axis, float requestedTranslate){
}

public float getTranslate(char axis){
if(CemConfigFairy.getConfig().useOldAnimations()){
if(CemConfig.getConfig().useOldAnimations()){
return switch(axis){
case 'x' -> this.translates[0];
case 'y' -> this.translates[1];
Expand Down Expand Up @@ -253,7 +253,7 @@ public float getTranslate(char axis){
}

void setRotate(char axis, float requestedAngle){
if(CemConfigFairy.getConfig().useOldAnimations()){
if(CemConfig.getConfig().useOldAnimations()){
this.getModel().setRotation(axis, requestedAngle);
}
else{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package net.dorianpb.cem.internal.models;

import net.dorianpb.cem.internal.api.CemModel.VanillaReferenceModelFactory;
import net.dorianpb.cem.internal.config.CemConfigFairy;
import net.dorianpb.cem.internal.config.CemConfig;
import net.dorianpb.cem.internal.file.JemFile;
import net.dorianpb.cem.internal.file.JemFile.JemModel;
import net.dorianpb.cem.internal.models.CemModelEntry.CemModelPart;
Expand Down Expand Up @@ -81,7 +81,7 @@ public CemModelPart prepRootPart(CemRootPartParams params){
newRoot.inflate(params.inflate());
}
//new model creation fix!
if(CemConfigFairy.getConfig().useTransparentParts()){
if(CemConfig.getConfig().useTransparentParts()){
Map<String, ModelTransform> newFixes = new HashMap<>();
if(params.fixes() != null){
params.fixes().forEach(((key, modelTransform) -> newFixes.put(params.partNameMap().getOrDefault(key, key), modelTransform)));
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/net/dorianpb/cem/internal/util/CemFairy.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import java.util.Set;

/** Helps with internal stuff, all you need to know is that it keeps track of the renderers and files */
public class CemFairy{
public class CemFairy {
private static final Set<EntityType<? extends Entity>> supportedEntities = new HashSet<>();
private static final Set<BlockEntityType<? extends BlockEntity>> supportedBlockEntities = new HashSet<>();
private static final Set<String> supportedOthers = new HashSet<>();
Expand All @@ -25,7 +25,7 @@ public class CemFairy{
public static Gson getGson(){
return GSON;
}

//renderer stuff
public static boolean addSupport(EntityType<? extends Entity> entityType){
return supportedEntities.add(entityType);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package net.dorianpb.cem.mixins;

import com.google.gson.internal.LinkedTreeMap;
import net.dorianpb.cem.internal.config.CemConfigFairy;
import net.dorianpb.cem.internal.config.CemConfig;
import net.dorianpb.cem.internal.file.JemFile;
import net.dorianpb.cem.internal.util.CemFairy;
import net.dorianpb.cem.internal.util.CemRegistryManager;
Expand Down Expand Up @@ -29,7 +29,7 @@ public abstract class EntityModelLoaderMixin{
private void cem$injectReload(ResourceManager manager, CallbackInfo ci){
CemRegistryManager.clearRegistries();
manager.findResources("cem", path -> path.getPath().endsWith(".jem")).forEach((id, resource) -> loadResourceFromId(manager, id, "dorianpb"));
if(CemConfigFairy.getConfig().useOptifineFolder()){
if(CemConfig.getConfig().useOptifineFolder()){
manager.findResources("optifine/cem", path -> path.getPath().endsWith(".jem")).forEach((id, resource) -> loadResourceFromId(manager, id, "minecraft"));
}
}
Expand Down
10 changes: 5 additions & 5 deletions src/main/resources/assets/cem/lang/en_us.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"modmenu.descriptionTranslation.cem": "Allows for loading custom models into the game as defined by .jem and .jpm files in a resource pack.",
"config.cem.use_optifine_folder": "Use \"assets/minecraft/optifine/cem\"?",
"config.cem.use_optifine_folder.description": "This will load CEM models from\nassets/minecraft/optifine/cem,\nwhich is exactly what optifine does.\nReload resources (F3 + T) for\nthis to take effect!",
"config.cem.use_optifine_folder": "Use optifine folder?",
"config.cem.use_optifine_folder.description": "This will load CEM models from 'assets/minecraft/optifine/cem', which is exactly what optifine does.",
"config.cem.use_new_model_creation_fix": "Use model creation fix?",
"config.cem.use_new_model_creation_fix.description": "This prevents minecraft from\ndirectly moving your model parts\naround when animating. This breaks\na few models but fixes other ones.\nPlease use if possible.\nReload resources (F3 + T) for\nthis to take effect!",
"config.cem.use_old_animations": "Use older animation implementation?",
"config.cem.use_old_animations.description": "This restores animation behavior\nfrom CEM version <=0.6.2. You\nprobably want this off."
"config.cem.use_new_model_creation_fix.description": "This prevents minecraft from directly moving your model parts around when animating. This breaks a few models but fixes other ones. Please use if possible.",
"config.cem.use_old_animations": "Use old animation implementation?",
"config.cem.use_old_animations.description": "This restores animation behavior from CEM version <=0.6.2. You probably want this off."
}
6 changes: 3 additions & 3 deletions src/main/resources/assets/cem/lang/et_ee.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"modmenu.descriptionTranslation.cem": "Võimaldab ressursipakis .jem ja .jpm failidega defineeritud kohandatud mudeleid mängu laadida.",
"config.cem.use_optifine_folder": "Kasuta \"assets/minecraft/optifine/cem\"?",
"config.cem.use_optifine_folder.description": "See laadib CEM-mudelid asukohast\nassets/minecraft/optifine/cem,\nmis järgib täpselt Optifine'i käitumist.\nMuudatuse rakendamiseks\nlaadi ressursid uuesti (F3 + T)!",
"config.cem.use_optifine_folder.description": "See laadib CEM-mudelid asukohast 'assets/minecraft/optifine/cem', mis järgib täpselt Optifine'i käitumist.",
"config.cem.use_new_model_creation_fix": "Kasuta mudeliloomise parandust?",
"config.cem.use_new_model_creation_fix.description": "See väldib Minecraftil animeerimise ajal\notseselt mudeliosade ümberliigutamist.\nSee lõhub mõned mudelid\nkuid parandab teised.\nVõimalusel kasuta seda.\nMuudatuse rakendamiseks\nlaadi ressursid uuesti (F3 + T)!",
"config.cem.use_new_model_creation_fix.description": "See väldib Minecraftil animeerimise ajal otseselt mudeliosade ümberliigutamist. See lõhub mõned mudelid kuid parandab teised. Võimalusel kasuta seda.",
"config.cem.use_old_animations": "Kasuta vanemat animatsiooniteostust?",
"config.cem.use_old_animations.description": "See taastab CEM versiooni <= 0.6.2\nanimatsioonide käitumise.\nIlmselt soovid selle keelata."
"config.cem.use_old_animations.description": "See taastab CEM versiooni <= 0.6.2 animatsioonide käitumise. Ilmselt soovid selle keelata."
}
Loading