From afbb9192dd8e333a68549a83d3cbefdd8709ce0f Mon Sep 17 00:00:00 2001 From: James Hall Date: Tue, 29 Jul 2025 13:43:48 +0100 Subject: [PATCH] chore: start on prodigal son suit --- .../suit/ironman/mk42/MarkFortyTwoSuit.java | 73 ++++++++++++++++++ .../duzo/timeless/suit/set/SetRegistry.java | 3 + .../textures/suit/iron_man_mark_forty_two.png | Bin 0 -> 5260 bytes 3 files changed, 76 insertions(+) create mode 100644 src/main/java/mc/duzo/timeless/suit/ironman/mk42/MarkFortyTwoSuit.java create mode 100644 src/main/resources/assets/timeless/textures/suit/iron_man_mark_forty_two.png diff --git a/src/main/java/mc/duzo/timeless/suit/ironman/mk42/MarkFortyTwoSuit.java b/src/main/java/mc/duzo/timeless/suit/ironman/mk42/MarkFortyTwoSuit.java new file mode 100644 index 00000000..032c1ad7 --- /dev/null +++ b/src/main/java/mc/duzo/timeless/suit/ironman/mk42/MarkFortyTwoSuit.java @@ -0,0 +1,73 @@ +package mc.duzo.timeless.suit.ironman.mk42; + +import mc.duzo.timeless.Timeless; +import mc.duzo.timeless.power.PowerList; +import mc.duzo.timeless.power.PowerRegistry; +import mc.duzo.timeless.suit.client.ClientSuit; +import mc.duzo.timeless.suit.client.render.SuitModel; +import mc.duzo.timeless.suit.ironman.IronManSuit; +import mc.duzo.timeless.suit.ironman.client.GenericIronManModel; +import mc.duzo.timeless.suit.set.SetRegistry; +import mc.duzo.timeless.suit.set.SuitSet; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.util.Identifier; + +import java.util.function.Supplier; + +public class MarkFortyTwoSuit extends IronManSuit { + private final PowerList powers; + + public MarkFortyTwoSuit() { + super("mark_forty_two"); + + this.powers = PowerList.of(PowerRegistry.SENTRY, PowerRegistry.BOOSTED_FLIGHT, PowerRegistry.HOVER, PowerRegistry.MASK_TOGGLE, PowerRegistry.JARVIS); + } + + @Override + public SuitSet getSet() { + return SetRegistry.MARK_FORTY_TWO; + } + + @Override + public PowerList getPowers() { + return this.powers; + } + + @Environment(EnvType.CLIENT) + @Override + protected ClientSuit createClient() { + return new ClientSuit(this) { + @Override + public Supplier model() { + return () -> new GenericIronManModel() { // todo - this has its own model, see heroes-assets in discord. + private ClientSuit parent; + + @Override + public ClientSuit getSuit() { + if (this.parent == null) { + this.parent = SetRegistry.MARK_FORTY_TWO.suit().toClient(); + } + + return this.parent; + } + }; + } + }; + } + + @Override + public int getFlightSpeed(boolean hasBoost) { + return 45; + } + + @Override + public float getHoverScale() { + return 0.75f; + } + + @Override + public Identifier getMaskAnimation(boolean isOpening) { + return new Identifier(Timeless.MOD_ID, "ironman_generic_mask_" + (isOpening ? "open" : "close")); + } +} diff --git a/src/main/java/mc/duzo/timeless/suit/set/SetRegistry.java b/src/main/java/mc/duzo/timeless/suit/set/SetRegistry.java index dfea107e..9a3c73e5 100644 --- a/src/main/java/mc/duzo/timeless/suit/set/SetRegistry.java +++ b/src/main/java/mc/duzo/timeless/suit/set/SetRegistry.java @@ -1,5 +1,6 @@ package mc.duzo.timeless.suit.set; +import mc.duzo.timeless.suit.ironman.mk42.MarkFortyTwoSuit; import mc.duzo.timeless.suit.moonknight.item.MoonKnightSuitItem; import mc.duzo.timeless.suit.moonknight.jake.JakeSuit; import mc.duzo.timeless.suit.moonknight.marc.MarcSuit; @@ -27,6 +28,7 @@ public static T register(T suit) { return Registry.register(REGISTRY, suit.id(), suit); } + public static SuitSet MARK_FORTY_TWO; public static SuitSet MARK_SEVEN; public static SuitSet MARK_FIVE; public static SuitSet MARK_THREE; @@ -38,6 +40,7 @@ public static T register(T suit) { public static void init() { // Iron Man + MARK_FORTY_TWO = register(new RegisteringSuitSet(new MarkFortyTwoSuit(), IronManSuitItem::new)); MARK_SEVEN = register(new RegisteringSuitSet(new MarkSevenSuit(), IronManSuitItem::new)); MARK_FIVE = register(new RegisteringSuitSet(new MarkFiveSuit(), IronManSuitItem::new)); MARK_THREE = register(new RegisteringSuitSet(new MarkThreeSuit(), IronManSuitItem::new)); diff --git a/src/main/resources/assets/timeless/textures/suit/iron_man_mark_forty_two.png b/src/main/resources/assets/timeless/textures/suit/iron_man_mark_forty_two.png new file mode 100644 index 0000000000000000000000000000000000000000..9b50087ddf42031928103424dceabfe92de84190 GIT binary patch literal 5260 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