diff --git a/common/src/main/java/org/figuramc/figura/avatar/Avatar.java b/common/src/main/java/org/figuramc/figura/avatar/Avatar.java index 66b5f3a9f..fbad4a74e 100644 --- a/common/src/main/java/org/figuramc/figura/avatar/Avatar.java +++ b/common/src/main/java/org/figuramc/figura/avatar/Avatar.java @@ -130,6 +130,7 @@ public class Avatar { public int animationComplexity; public final Instructions complexity; public final Instructions init, render, worldRender, tick, worldTick, animation; + public final Map customInstructions = new HashMap<>(); public final RefilledNumber particlesRemaining, soundsRemaining; private Avatar(UUID owner, EntityType type, String name) { this.owner = owner; @@ -146,6 +147,12 @@ private Avatar(UUID owner, EntityType type, String name) { this.particlesRemaining = new RefilledNumber(permissions.get(Permissions.PARTICLES)); this.soundsRemaining = new RefilledNumber(permissions.get(Permissions.SOUNDS)); this.entityName = name == null ? "" : name; + + for (Collection pluginPermissions : PermissionManager.CUSTOM_PERMISSIONS.values()) { + for (Permissions customPermission : pluginPermissions) { + customInstructions.putIfAbsent(customPermission.name, new Instructions(permissions.get(customPermission))); + } + } } public Avatar(UUID owner) { diff --git a/common/src/main/java/org/figuramc/figura/config/Configs.java b/common/src/main/java/org/figuramc/figura/config/Configs.java index e9b9769a4..2de5d5e2f 100644 --- a/common/src/main/java/org/figuramc/figura/config/Configs.java +++ b/common/src/main/java/org/figuramc/figura/config/Configs.java @@ -8,6 +8,7 @@ import org.figuramc.figura.avatar.local.CacheAvatarLoader; import org.figuramc.figura.avatar.local.LocalAvatarFetcher; import org.figuramc.figura.backend2.NetworkStuff; +import org.figuramc.figura.entries.EntryPointManager; import org.figuramc.figura.gui.FiguraToast; import org.figuramc.figura.gui.screens.ConfigScreen; import org.figuramc.figura.lua.FiguraLuaPrinter; @@ -270,6 +271,7 @@ public void onChange() { super.onChange(); PermissionManager.reinit(); LocalAvatarFetcher.reinit(); + EntryPointManager.reinit(); } }; public static final ConfigType.IPConfig diff --git a/common/src/main/java/org/figuramc/figura/entries/EntryPointManager.java b/common/src/main/java/org/figuramc/figura/entries/EntryPointManager.java index b32b54ff8..05cc383a6 100644 --- a/common/src/main/java/org/figuramc/figura/entries/EntryPointManager.java +++ b/common/src/main/java/org/figuramc/figura/entries/EntryPointManager.java @@ -25,6 +25,10 @@ public static void init() { EventsAPI.initEntryPoints(load("figura_event", FiguraEvent.class)); } + public static void reinit() { + PermissionManager.initEntryPoints(load("figura_permissions", FiguraPermissions.class)); + } + @ExpectPlatform private static Set load(String name, Class clazz) { throw new AssertionError(); diff --git a/common/src/main/java/org/figuramc/figura/entries/FiguraVanillaPart.java b/common/src/main/java/org/figuramc/figura/entries/FiguraVanillaPart.java index 50de707b5..dff3cb964 100644 --- a/common/src/main/java/org/figuramc/figura/entries/FiguraVanillaPart.java +++ b/common/src/main/java/org/figuramc/figura/entries/FiguraVanillaPart.java @@ -3,6 +3,7 @@ import com.mojang.datafixers.util.Pair; import net.minecraft.client.model.EntityModel; import net.minecraft.client.model.geom.ModelPart; +import org.figuramc.figura.model.ParentType; import java.util.Collection; import java.util.function.Function; @@ -22,4 +23,13 @@ public interface FiguraVanillaPart { * the string is the parts name, case-insensitive, where the mod ID will be added into the final part name, as "ID_NAME" */ Collection, ModelPart>>> getParts(); + + /** + * @return returns a collection of a pair of the part name and a function to get its model part + * the function consists about giving the current Entity Model and getting a Model Part for that Entity + * the string is the parts name, case-insensitive, where the mod ID will be added into the final part name, as "ID_NAME", + * this version supports Parent Types, you can use either. + */ + + Collection, ModelPart>, ParentType>>> getPartsWithParent(); } diff --git a/common/src/main/java/org/figuramc/figura/lua/api/vanilla_model/VanillaModelAPI.java b/common/src/main/java/org/figuramc/figura/lua/api/vanilla_model/VanillaModelAPI.java index 1cccfc883..efa318353 100644 --- a/common/src/main/java/org/figuramc/figura/lua/api/vanilla_model/VanillaModelAPI.java +++ b/common/src/main/java/org/figuramc/figura/lua/api/vanilla_model/VanillaModelAPI.java @@ -293,6 +293,12 @@ public VanillaModelAPI(Avatar owner) { allParts.put(name, model); parts.add(model); } + for (Pair, ModelPart>, ParentType>> part : entrypoint.getPartsWithParent()) { + String name = ID + "_" + part.getFirst().toUpperCase(Locale.US); + VanillaModelPart model = new VanillaModelPart(owner, name, part.getSecond().getSecond(), part.getSecond().getFirst()); + allParts.put(name, model); + parts.add(model); + } // add to group list VanillaGroupPart group = new VanillaGroupPart(owner, ID, parts.toArray(new VanillaModelPart[0])); diff --git a/common/src/main/java/org/figuramc/figura/wizards/AvatarWizard.java b/common/src/main/java/org/figuramc/figura/wizards/AvatarWizard.java index 90ed43d48..1e1e93e64 100644 --- a/common/src/main/java/org/figuramc/figura/wizards/AvatarWizard.java +++ b/common/src/main/java/org/figuramc/figura/wizards/AvatarWizard.java @@ -314,8 +314,8 @@ else if (hasCapeOrElytra) if (hasArmor) { model.addGroup(HelmetPivot, FiguraVec3.of(0, 24, 0), head); model.addGroup(ChestplatePivot, FiguraVec3.of(0, 24, 0), body); - model.addGroup(LeftElytra, FiguraVec3.of(0, 24, 0), body); - model.addGroup(RightElytra, FiguraVec3.of(0, 24, 0), body); + model.addGroup(LeftElytraPivot, FiguraVec3.of(0, 24, 0), body); + model.addGroup(RightElytraPivot, FiguraVec3.of(0, 24, 0), body); model.addGroup(LeftShoulderPivot, FiguraVec3.of(-6, 24, 0), leftArm); model.addGroup(RightShoulderPivot, FiguraVec3.of(6, 24, 0), rightArm); model.addGroup(LeggingsPivot, FiguraVec3.of(0, 12, 0), body); diff --git a/gradle.properties b/gradle.properties index f0f0a8e85..106496ed8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ mappings = 1 enabled_platforms = fabric,forge,neoforge # Mod Properties -mod_version = 0.1.5-rc.3 +mod_version = 0.1.5-rc.4 maven_group = org.figuramc archives_base_name = figura assets_version = v2