diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..8e6fd17 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,13 @@ +# These are supported funding model platforms + +github: [duzos] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: loqor # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: loqor # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry +custom: diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..65641ca --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,58 @@ +name: Publish to Modrinth + +on: + workflow_dispatch: + release: + types: [published] + +env: + JAVA_VERSION: 17 + +permissions: + contents: write + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Check Environment Variables + run: env + + - name: Checkout Repository + uses: actions/checkout@v3 + with: + submodules: true + + - name: Setup Java + uses: actions/setup-java@v2 + with: + distribution: "temurin" + java-version: 17 + + - name: Make Gradle Wrapper Executable + if: ${{ runner.os != 'Windows' }} + run: chmod +x ./gradlew + + - name: Run Datagen + run: ./gradlew runDatagen + + - name: Build + run: ./gradlew clean build + + - name: Publish (CurseForge/Modrinth/GitHub) + uses: Kir-Antipov/mc-publish@v3.3 #The specified MC-Publish GitHub Action in the version 3.2 + with: + changelog-file: CHANGELOG.md + # curseforge-id: 856138 #The id of your CurseForge project + # curseforge-token: "${{secrets.CURSEFORGE_TOKEN}}" + + modrinth-id: CHANGE_ME_TO_ID #The id of your modrinth project + modrinth-token: "${{secrets.MODRINTH_TOKEN}}" + + # github-token: "${{secrets.GITHUB_TOKEN}}" + + github-generate-changelog: true + version-type: release + + loaders: fabric + java: "${{env.JAVA_VERSION}}" diff --git a/.github/workflows/publish_devbuilds.yml b/.github/workflows/publish_devbuilds.yml new file mode 100644 index 0000000..dd20fea --- /dev/null +++ b/.github/workflows/publish_devbuilds.yml @@ -0,0 +1,58 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. +# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle + +name: Automated Dev Builds + +on: + workflow_dispatch: + push: + branches: + - 'feat/**' + - 'main' +jobs: + build: + + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - uses: actions/checkout@v4 + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + + - name: Make Gradle Wrapper Executable + if: ${{ runner.os != 'Windows' }} + run: chmod +x ./gradlew + + # Configure Gradle for optimal use in GitHub Actions, including caching of downloaded dependencies. + # See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md + - name: Setup Gradle + uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0 + + - name: Run datagen + run: ./gradlew runDatagen + + - name: Build + run: ./gradlew build + #env: + # BETA: 1 # exclude assets if it's a beta dev build + + - name: Publish artifacts + uses: DrTheodor/discord-webhook-upload-action@v1.2 + with: + url: ${{ secrets.DEV_BUILDS }} + file: 'build/libs/*' + username: BETA BUILDS + avatar: 'https://mc-heads.net/avatar/duzo' + commit: '> :sparkles: [%MESSAGE%](<%LINK%>) by [%AUTHOR%](<%AUTHOR_LINK%>)' + message: | + <:new1:1253371736510959636><:new2:1253371805734015006> New `${{ github.repository }}` dev build `#${{ github.run_number }}`: + %COMMITS% \ No newline at end of file diff --git a/build.gradle b/build.gradle index 5f24ed8..7c32ba2 100644 --- a/build.gradle +++ b/build.gradle @@ -22,6 +22,8 @@ repositories { artifact() // Look directly for artifact } } + + maven { url "https://theo.is-a.dev/maven-repo/" } } fabricApi { @@ -44,7 +46,7 @@ dependencies { exclude(group: "net.fabricmc.fabric-api") } - include(modImplementation("com.github.DrTheodor:mc-scheduler:${project.scheduler_version}")) { + include(modImplementation("dev.drtheo:scheduler:${project.scheduler_version}")) { exclude(group: "net.fabricmc.fabric-api") } diff --git a/gradle.properties b/gradle.properties index 49aeea8..eb001d9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,4 +17,4 @@ archives_base_name=timeless # Dependencies fabric_version=0.92.2+1.20.1 sakitus_version=1.1.8 -scheduler_version = main-SNAPSHOT \ No newline at end of file +scheduler_version = 1.1.0 \ No newline at end of file diff --git a/src/main/java/mc/duzo/timeless/Timeless.java b/src/main/java/mc/duzo/timeless/Timeless.java index aad5f45..52bf818 100644 --- a/src/main/java/mc/duzo/timeless/Timeless.java +++ b/src/main/java/mc/duzo/timeless/Timeless.java @@ -1,11 +1,16 @@ package mc.duzo.timeless; +import dev.amble.lib.container.RegistryContainer; +import mc.duzo.timeless.commands.command.TimelessCommands; +import mc.duzo.timeless.core.*; +import mc.duzo.timeless.power.PowerRegistry; +import mc.duzo.timeless.suit.SuitRegistry; +import mc.duzo.timeless.suit.set.SetRegistry; import net.fabricmc.api.ModInitializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import mc.duzo.timeless.network.Network; -import mc.duzo.timeless.registry.Register; public class Timeless implements ModInitializer { public static final String MOD_ID = "timeless"; @@ -13,7 +18,24 @@ public class Timeless implements ModInitializer { @Override public void onInitialize() { - Register.init(); + RegistryContainer.register(TimelessItemGroups.class, Timeless.MOD_ID); + RegistryContainer.register(TimelessItems.class, Timeless.MOD_ID); + RegistryContainer.register(TimelessBlocks.class, Timeless.MOD_ID); + + // Register blocks, items, block entities, sounds, and entities + TimelessBlockEntityTypes.init(); + TimelessEntityTypes.init(); + TimelessSounds.init(); + + TimelessCommands.init(); + + // Suits and powers + PowerRegistry.init(); + SetRegistry.init(); + SuitRegistry.init(); + TimelessTrackers.init(); + + // Networking Network.init(); } } \ No newline at end of file diff --git a/src/main/java/mc/duzo/timeless/block/entity/SuitApplicationBlockEntity.java b/src/main/java/mc/duzo/timeless/block/entity/SuitApplicationBlockEntity.java index 5fb6118..f431250 100644 --- a/src/main/java/mc/duzo/timeless/block/entity/SuitApplicationBlockEntity.java +++ b/src/main/java/mc/duzo/timeless/block/entity/SuitApplicationBlockEntity.java @@ -1,5 +1,6 @@ package mc.duzo.timeless.block.entity; +import mc.duzo.timeless.core.TimelessBlockEntityTypes; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityTicker; @@ -10,8 +11,6 @@ import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; - -import mc.duzo.timeless.registry.Register; import mc.duzo.timeless.suit.Suit; import mc.duzo.timeless.suit.set.SetRegistry; import mc.duzo.timeless.suit.set.SuitSet; @@ -21,7 +20,7 @@ public class SuitApplicationBlockEntity extends BlockEntity implements BlockEnti private int cooldown; public SuitApplicationBlockEntity(BlockPos pos, BlockState state) { - super(Register.BlockEntities.SUIT_APPLICATION_BE, pos, state); + super(TimelessBlockEntityTypes.SUIT_APPLICATION_BE, pos, state); } @Override diff --git a/src/main/java/mc/duzo/timeless/client/TimelessClient.java b/src/main/java/mc/duzo/timeless/client/TimelessClient.java index d1851f9..0bbe745 100644 --- a/src/main/java/mc/duzo/timeless/client/TimelessClient.java +++ b/src/main/java/mc/duzo/timeless/client/TimelessClient.java @@ -7,6 +7,7 @@ import mc.duzo.animation.player.holder.PlayerAnimationHolder; import mc.duzo.animation.registry.AnimationRegistry; import mc.duzo.timeless.client.gui.UtilityBeltGui; +import mc.duzo.timeless.core.TimelessEntityTypes; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; @@ -20,7 +21,6 @@ import mc.duzo.timeless.client.keybind.TimelessKeybinds; import mc.duzo.timeless.client.network.ClientNetwork; import mc.duzo.timeless.client.render.entity.IronManEntityRenderer; -import mc.duzo.timeless.registry.Register; import mc.duzo.timeless.suit.Suit; import mc.duzo.timeless.suit.client.ClientSuitRegistry; import mc.duzo.timeless.suit.client.animation.SuitAnimationHolder; @@ -103,7 +103,7 @@ public static void init() { public static class Renderers { public static void init() { - EntityRendererRegistry.register(Register.Entities.IRON_MAN, IronManEntityRenderer::new); + EntityRendererRegistry.register(TimelessEntityTypes.IRON_MAN, IronManEntityRenderer::new); } } } diff --git a/src/main/java/mc/duzo/timeless/client/sounds/thruster/ThrusterSound.java b/src/main/java/mc/duzo/timeless/client/sounds/thruster/ThrusterSound.java index d414415..66f2818 100644 --- a/src/main/java/mc/duzo/timeless/client/sounds/thruster/ThrusterSound.java +++ b/src/main/java/mc/duzo/timeless/client/sounds/thruster/ThrusterSound.java @@ -1,18 +1,18 @@ package mc.duzo.timeless.client.sounds.thruster; +import mc.duzo.timeless.core.TimelessSounds; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.sound.SoundCategory; import net.minecraft.util.math.MathHelper; import mc.duzo.timeless.client.sounds.PositionedLoopingSound; -import mc.duzo.timeless.registry.Register; public class ThrusterSound extends PositionedLoopingSound { private final AbstractClientPlayerEntity player; public ThrusterSound(AbstractClientPlayerEntity player) { - super(Register.Sounds.THRUSTER, SoundCategory.PLAYERS, player.getBlockPos(), 1f, 1f); + super(TimelessSounds.THRUSTER, SoundCategory.PLAYERS, player.getBlockPos(), 1f, 1f); this.player = player; } diff --git a/src/main/java/mc/duzo/timeless/core/TimelessBlockEntityTypes.java b/src/main/java/mc/duzo/timeless/core/TimelessBlockEntityTypes.java new file mode 100644 index 0000000..da169b2 --- /dev/null +++ b/src/main/java/mc/duzo/timeless/core/TimelessBlockEntityTypes.java @@ -0,0 +1,20 @@ +package mc.duzo.timeless.core; + +import mc.duzo.timeless.Timeless; +import mc.duzo.timeless.block.entity.SuitApplicationBlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.util.Identifier; + +public class TimelessBlockEntityTypes { + public static final BlockEntityType SUIT_APPLICATION_BE = register(Registries.BLOCK_ENTITY_TYPE, "suit_application", BlockEntityType.Builder.create(SuitApplicationBlockEntity::new, TimelessBlocks.SUIT_APPLICATION).build(null)); + + public static void init() { + + } + + public static T register(Registry registry, String name, T entry) { + return Registry.register(registry, new Identifier(Timeless.MOD_ID, name), entry); + } +} diff --git a/src/main/java/mc/duzo/timeless/core/TimelessBlocks.java b/src/main/java/mc/duzo/timeless/core/TimelessBlocks.java new file mode 100644 index 0000000..652eca1 --- /dev/null +++ b/src/main/java/mc/duzo/timeless/core/TimelessBlocks.java @@ -0,0 +1,11 @@ +package mc.duzo.timeless.core; + +import dev.amble.lib.block.ABlockSettings; +import dev.amble.lib.container.impl.BlockContainer; +import dev.amble.lib.item.AItemSettings; +import mc.duzo.timeless.block.SuitApplicationBlock; +import net.minecraft.block.Block; + +public class TimelessBlocks extends BlockContainer { + public static final Block SUIT_APPLICATION = new SuitApplicationBlock(ABlockSettings.create().itemSettings(new AItemSettings().group(TimelessItemGroups.GROUP))); +} diff --git a/src/main/java/mc/duzo/timeless/core/TimelessEntityTypes.java b/src/main/java/mc/duzo/timeless/core/TimelessEntityTypes.java new file mode 100644 index 0000000..230367c --- /dev/null +++ b/src/main/java/mc/duzo/timeless/core/TimelessEntityTypes.java @@ -0,0 +1,31 @@ +package mc.duzo.timeless.core; + +import mc.duzo.timeless.Timeless; +import mc.duzo.timeless.suit.ironman.IronManEntity; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.SpawnGroup; +import net.minecraft.entity.attribute.DefaultAttributeContainer; +import net.minecraft.entity.mob.MobEntity; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.util.Identifier; + +public class TimelessEntityTypes { + public static final EntityType IRON_MAN = register(Registries.ENTITY_TYPE, "iron_man", EntityType.Builder.create(IronManEntity::new, SpawnGroup.MISC) + .setDimensions(0.6f, 1.8f) + .build("iron_man")); + + public static void init() { + registerAttributes(IRON_MAN, MobEntity.createLivingAttributes().build()); + } + + private static void registerAttributes(EntityType type, DefaultAttributeContainer attributes) { + FabricDefaultAttributeRegistry.register(type, attributes); + } + + public static T register(Registry registry, String name, T entry) { + return Registry.register(registry, new Identifier(Timeless.MOD_ID, name), entry); + } +} diff --git a/src/main/java/mc/duzo/timeless/core/TimelessItemGroups.java b/src/main/java/mc/duzo/timeless/core/TimelessItemGroups.java new file mode 100644 index 0000000..b2726e8 --- /dev/null +++ b/src/main/java/mc/duzo/timeless/core/TimelessItemGroups.java @@ -0,0 +1,15 @@ +package mc.duzo.timeless.core; + +import dev.amble.lib.container.impl.ItemGroupContainer; +import dev.amble.lib.itemgroup.AItemGroup; +import mc.duzo.timeless.Timeless; +import net.minecraft.item.ItemStack; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; + +public class TimelessItemGroups implements ItemGroupContainer { + public static final AItemGroup GROUP = AItemGroup.builder(new Identifier(Timeless.MOD_ID, "group")) + .icon(() -> new ItemStack(TimelessItems.MARK_FIVE_CASE)) + .displayName(Text.translatable("itemGroup." + Timeless.MOD_ID)) + .build(); +} \ No newline at end of file diff --git a/src/main/java/mc/duzo/timeless/core/TimelessItems.java b/src/main/java/mc/duzo/timeless/core/TimelessItems.java new file mode 100644 index 0000000..df24fbc --- /dev/null +++ b/src/main/java/mc/duzo/timeless/core/TimelessItems.java @@ -0,0 +1,9 @@ +package mc.duzo.timeless.core; + +import dev.amble.lib.container.impl.ItemContainer; +import dev.amble.lib.item.AItemSettings; +import mc.duzo.timeless.suit.ironman.mk5.MarkFiveCase; + +public class TimelessItems extends ItemContainer { + public static MarkFiveCase MARK_FIVE_CASE = new MarkFiveCase(new AItemSettings().group(TimelessItemGroups.GROUP)); +} diff --git a/src/main/java/mc/duzo/timeless/core/TimelessSounds.java b/src/main/java/mc/duzo/timeless/core/TimelessSounds.java new file mode 100644 index 0000000..4889170 --- /dev/null +++ b/src/main/java/mc/duzo/timeless/core/TimelessSounds.java @@ -0,0 +1,28 @@ +package mc.duzo.timeless.core; + +import dev.amble.lib.container.impl.SoundContainer; +import mc.duzo.timeless.Timeless; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.sound.SoundEvent; +import net.minecraft.util.Identifier; + +public class TimelessSounds implements SoundContainer { + public static final SoundEvent THRUSTER = SoundEvent.of(new Identifier(Timeless.MOD_ID, "thruster")); + public static final SoundEvent MARK5_NOISES = SoundEvent.of(new Identifier(Timeless.MOD_ID, "mark5_noises")); + public static final SoundEvent IRONMAN_STEP = SoundEvent.of(new Identifier(Timeless.MOD_ID, "ironman_step")); + public static final SoundEvent IRONMAN_MASK = SoundEvent.of(new Identifier(Timeless.MOD_ID, "ironman_mask")); + public static final SoundEvent IRONMAN_POWERUP = SoundEvent.of(new Identifier(Timeless.MOD_ID, "ironman_powerup")); + public static final SoundEvent IRONMAN_POWERDOWN = SoundEvent.of(new Identifier(Timeless.MOD_ID, "ironman_powerdown")); + + private static SoundEvent register(String name) { + return register(new Identifier(Timeless.MOD_ID, name)); + } + private static SoundEvent register(Identifier id) { + return Registry.register(Registries.SOUND_EVENT, id, SoundEvent.of(id)); + } + + public static void init() { + + } +} diff --git a/src/main/java/mc/duzo/timeless/core/TimelessTrackers.java b/src/main/java/mc/duzo/timeless/core/TimelessTrackers.java new file mode 100644 index 0000000..3a56a7c --- /dev/null +++ b/src/main/java/mc/duzo/timeless/core/TimelessTrackers.java @@ -0,0 +1,11 @@ +package mc.duzo.timeless.core; + +import mc.duzo.timeless.suit.client.animation.SuitAnimationTracker; + +public class TimelessTrackers { + public static final SuitAnimationTracker SUIT = (SuitAnimationTracker) new SuitAnimationTracker().register(); + + public static void init() { + + } +} diff --git a/src/main/java/mc/duzo/timeless/suit/item/SuitItem.java b/src/main/java/mc/duzo/timeless/core/items/SuitItem.java similarity index 98% rename from src/main/java/mc/duzo/timeless/suit/item/SuitItem.java rename to src/main/java/mc/duzo/timeless/core/items/SuitItem.java index 63fcc1c..8c86c98 100644 --- a/src/main/java/mc/duzo/timeless/suit/item/SuitItem.java +++ b/src/main/java/mc/duzo/timeless/core/items/SuitItem.java @@ -1,4 +1,4 @@ -package mc.duzo.timeless.suit.item; +package mc.duzo.timeless.core.items; import mc.duzo.animation.registry.Identifiable; diff --git a/src/main/java/mc/duzo/timeless/suit/item/SuitMaterial.java b/src/main/java/mc/duzo/timeless/core/items/SuitMaterial.java similarity index 98% rename from src/main/java/mc/duzo/timeless/suit/item/SuitMaterial.java rename to src/main/java/mc/duzo/timeless/core/items/SuitMaterial.java index 5d9bea7..9227f17 100644 --- a/src/main/java/mc/duzo/timeless/suit/item/SuitMaterial.java +++ b/src/main/java/mc/duzo/timeless/core/items/SuitMaterial.java @@ -1,4 +1,4 @@ -package mc.duzo.timeless.suit.item; +package mc.duzo.timeless.core.items; import java.util.EnumMap; import java.util.function.Supplier; diff --git a/src/main/java/mc/duzo/timeless/datagen/TimelessDataGenerator.java b/src/main/java/mc/duzo/timeless/datagen/TimelessDataGenerator.java index 46978d9..58653b8 100644 --- a/src/main/java/mc/duzo/timeless/datagen/TimelessDataGenerator.java +++ b/src/main/java/mc/duzo/timeless/datagen/TimelessDataGenerator.java @@ -2,6 +2,9 @@ import dev.amble.lib.datagen.lang.AmbleLanguageProvider; import dev.amble.lib.datagen.lang.LanguageType; +import mc.duzo.timeless.core.TimelessBlocks; +import mc.duzo.timeless.core.TimelessItems; +import mc.duzo.timeless.core.TimelessSounds; import mc.duzo.timeless.suit.ironman.IronManSuit; import mc.duzo.timeless.suit.ironman.IronManSuitItem; import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; @@ -11,7 +14,6 @@ import mc.duzo.timeless.datagen.provider.lang.AutomaticSuitEnglish; import mc.duzo.timeless.datagen.provider.model.TimelessModelProvider; import mc.duzo.timeless.datagen.provider.sound.BasicSoundProvider; -import mc.duzo.timeless.registry.Register; import mc.duzo.timeless.suit.Suit; import mc.duzo.timeless.suit.SuitRegistry; @@ -39,8 +41,8 @@ private void genEnglish(FabricDataGenerator.Pack pack) { provider.addTranslation(suit.getTranslationKey(), convertToName(suit.id().getPath())); } - provider.translateItems(Register.Items.class); - provider.translateBlocks(Register.Blocks.class); + provider.translateItems(TimelessItems.class); + provider.translateBlocks(TimelessBlocks.class); provider.addTranslation("itemGroup." + Timeless.MOD_ID, "Timeless Heroes"); @@ -77,12 +79,12 @@ private void genSounds(FabricDataGenerator.Pack pack) { pack.addProvider((((output, registriesFuture) -> { BasicSoundProvider provider = new BasicSoundProvider(output); - provider.addSound("thruster", Register.Sounds.THRUSTER); - provider.addSound("mark5_noises", Register.Sounds.MARK5_NOISES); - provider.addSound("ironman_step", Register.Sounds.IRONMAN_STEP); - provider.addSound("ironman_mask", Register.Sounds.IRONMAN_MASK); - provider.addSound("ironman_powerup", Register.Sounds.IRONMAN_POWERUP); - provider.addSound("ironman_powerdown", Register.Sounds.IRONMAN_POWERDOWN); + provider.addSound("thruster", TimelessSounds.THRUSTER); + provider.addSound("mark5_noises", TimelessSounds.MARK5_NOISES); + provider.addSound("ironman_step", TimelessSounds.IRONMAN_STEP); + provider.addSound("ironman_mask", TimelessSounds.IRONMAN_MASK); + provider.addSound("ironman_powerup", TimelessSounds.IRONMAN_POWERUP); + provider.addSound("ironman_powerdown", TimelessSounds.IRONMAN_POWERDOWN); return provider; }))); diff --git a/src/main/java/mc/duzo/timeless/mixin/EnchantmentHelperMixin.java b/src/main/java/mc/duzo/timeless/mixin/EnchantmentHelperMixin.java index d386c43..291e5e0 100644 --- a/src/main/java/mc/duzo/timeless/mixin/EnchantmentHelperMixin.java +++ b/src/main/java/mc/duzo/timeless/mixin/EnchantmentHelperMixin.java @@ -11,7 +11,7 @@ import mc.duzo.timeless.power.PowerRegistry; import mc.duzo.timeless.suit.Suit; -import mc.duzo.timeless.suit.item.SuitItem; +import mc.duzo.timeless.core.items.SuitItem; @Mixin(EnchantmentHelper.class) public class EnchantmentHelperMixin { diff --git a/src/main/java/mc/duzo/timeless/mixin/client/ArmorFeatureRendererMixin.java b/src/main/java/mc/duzo/timeless/mixin/client/ArmorFeatureRendererMixin.java index 0b46b4d..b670783 100644 --- a/src/main/java/mc/duzo/timeless/mixin/client/ArmorFeatureRendererMixin.java +++ b/src/main/java/mc/duzo/timeless/mixin/client/ArmorFeatureRendererMixin.java @@ -11,7 +11,7 @@ import net.minecraft.util.Identifier; import mc.duzo.timeless.Timeless; -import mc.duzo.timeless.suit.item.SuitItem; +import mc.duzo.timeless.core.items.SuitItem; @Mixin(ArmorFeatureRenderer.class) public class ArmorFeatureRendererMixin { diff --git a/src/main/java/mc/duzo/timeless/network/c2s/UsePowerC2SPacket.java b/src/main/java/mc/duzo/timeless/network/c2s/UsePowerC2SPacket.java index e49e53b..4dc2b57 100644 --- a/src/main/java/mc/duzo/timeless/network/c2s/UsePowerC2SPacket.java +++ b/src/main/java/mc/duzo/timeless/network/c2s/UsePowerC2SPacket.java @@ -10,7 +10,7 @@ import net.minecraft.util.Identifier; import mc.duzo.timeless.Timeless; -import mc.duzo.timeless.suit.item.SuitItem; +import mc.duzo.timeless.core.items.SuitItem; public record UsePowerC2SPacket(int power) implements FabricPacket { public static final PacketType TYPE = PacketType.create(new Identifier(Timeless.MOD_ID, "use_power"), UsePowerC2SPacket::new); diff --git a/src/main/java/mc/duzo/timeless/power/impl/FlightPower.java b/src/main/java/mc/duzo/timeless/power/impl/FlightPower.java index 9819674..afc652a 100644 --- a/src/main/java/mc/duzo/timeless/power/impl/FlightPower.java +++ b/src/main/java/mc/duzo/timeless/power/impl/FlightPower.java @@ -3,7 +3,6 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.nbt.NbtCompound; import net.minecraft.particle.ParticleTypes; -import net.minecraft.registry.tag.FluidTags; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.Identifier; @@ -17,7 +16,7 @@ import mc.duzo.timeless.power.Power; import mc.duzo.timeless.suit.Suit; import mc.duzo.timeless.suit.ironman.IronManSuit; -import mc.duzo.timeless.suit.item.SuitItem; +import mc.duzo.timeless.core.items.SuitItem; import mc.duzo.timeless.util.ServerKeybind; public class FlightPower extends Power { diff --git a/src/main/java/mc/duzo/timeless/power/impl/HoverPower.java b/src/main/java/mc/duzo/timeless/power/impl/HoverPower.java index 6c54bdb..45535eb 100644 --- a/src/main/java/mc/duzo/timeless/power/impl/HoverPower.java +++ b/src/main/java/mc/duzo/timeless/power/impl/HoverPower.java @@ -7,7 +7,7 @@ import mc.duzo.timeless.Timeless; import mc.duzo.timeless.power.Power; -import mc.duzo.timeless.suit.item.SuitItem; +import mc.duzo.timeless.core.items.SuitItem; public class HoverPower extends Power { private final Identifier id; diff --git a/src/main/java/mc/duzo/timeless/power/impl/MaskTogglePower.java b/src/main/java/mc/duzo/timeless/power/impl/MaskTogglePower.java index fb996a6..7fecb39 100644 --- a/src/main/java/mc/duzo/timeless/power/impl/MaskTogglePower.java +++ b/src/main/java/mc/duzo/timeless/power/impl/MaskTogglePower.java @@ -2,6 +2,8 @@ import mc.duzo.animation.DuzoAnimationMod; +import mc.duzo.timeless.core.TimelessSounds; +import mc.duzo.timeless.core.TimelessTrackers; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.nbt.NbtCompound; import net.minecraft.server.network.ServerPlayerEntity; @@ -11,9 +13,8 @@ import mc.duzo.timeless.Timeless; import mc.duzo.timeless.power.Power; -import mc.duzo.timeless.registry.Register; import mc.duzo.timeless.suit.ironman.IronManSuit; -import mc.duzo.timeless.suit.item.SuitItem; +import mc.duzo.timeless.core.items.SuitItem; public class MaskTogglePower extends Power { private final Identifier id; @@ -25,7 +26,7 @@ public MaskTogglePower() { @Override public boolean run(ServerPlayerEntity player) { setMask(player, !hasMask(player), true); - player.getWorld().playSound(null, player.getBlockPos(), Register.Sounds.IRONMAN_MASK, SoundCategory.PLAYERS, 0.25f, 1f); + player.getWorld().playSound(null, player.getBlockPos(), TimelessSounds.IRONMAN_MASK, SoundCategory.PLAYERS, 0.25f, 1f); return true; } @@ -41,7 +42,7 @@ private static void setMask(ServerPlayerEntity player, boolean val, boolean sync if (suit == null) return; Identifier anim = suit.getMaskAnimation(val); if (anim == null) return; - DuzoAnimationMod.play(player, Register.Trackers.SUIT, anim); + DuzoAnimationMod.play(player, TimelessTrackers.SUIT, anim); SoundEvent sound = val ? suit.getEquipSound().orElse(null) : suit.getUnequipSound().orElse(null); if (sound != null) player.playSound(sound, SoundCategory.PLAYERS, 1f, 1f); diff --git a/src/main/java/mc/duzo/timeless/registry/Register.java b/src/main/java/mc/duzo/timeless/registry/Register.java deleted file mode 100644 index 9a16518..0000000 --- a/src/main/java/mc/duzo/timeless/registry/Register.java +++ /dev/null @@ -1,129 +0,0 @@ -package mc.duzo.timeless.registry; - -import dev.amble.lib.block.ABlockSettings; -import dev.amble.lib.container.RegistryContainer; -import dev.amble.lib.container.impl.BlockContainer; -import dev.amble.lib.container.impl.ItemContainer; -import dev.amble.lib.container.impl.ItemGroupContainer; -import dev.amble.lib.container.impl.SoundContainer; -import dev.amble.lib.item.AItemSettings; -import dev.amble.lib.itemgroup.AItemGroup; -import net.fabricmc.fabric.api.item.v1.FabricItemSettings; -import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; - -import net.minecraft.block.Block; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.SpawnGroup; -import net.minecraft.entity.attribute.DefaultAttributeContainer; -import net.minecraft.entity.mob.MobEntity; -import net.minecraft.item.BlockItem; -import net.minecraft.item.ItemStack; -import net.minecraft.registry.Registries; -import net.minecraft.registry.Registry; -import net.minecraft.sound.SoundEvent; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; - -import mc.duzo.timeless.Timeless; -import mc.duzo.timeless.block.SuitApplicationBlock; -import mc.duzo.timeless.block.entity.SuitApplicationBlockEntity; -import mc.duzo.timeless.commands.command.TimelessCommands; -import mc.duzo.timeless.power.PowerRegistry; -import mc.duzo.timeless.suit.SuitRegistry; -import mc.duzo.timeless.suit.client.animation.SuitAnimationTracker; -import mc.duzo.timeless.suit.ironman.IronManEntity; -import mc.duzo.timeless.suit.ironman.mk5.MarkFiveCase; -import mc.duzo.timeless.suit.set.SetRegistry; - -public class Register { - public static class Items extends ItemContainer { - public static MarkFiveCase MARK_FIVE_CASE = new MarkFiveCase(new AItemSettings().group(ItemGroups.GROUP)); - } - - public static class ItemGroups implements ItemGroupContainer { - public static final AItemGroup GROUP = AItemGroup.builder(new Identifier(Timeless.MOD_ID, "group")) - .icon(() -> new ItemStack(Items.MARK_FIVE_CASE)) - .displayName(Text.translatable("itemGroup." + Timeless.MOD_ID)) - .build(); - } - - public static class Sounds implements SoundContainer { - public static final SoundEvent THRUSTER = SoundEvent.of(new Identifier(Timeless.MOD_ID, "thruster")); - public static final SoundEvent MARK5_NOISES = SoundEvent.of(new Identifier(Timeless.MOD_ID, "mark5_noises")); - public static final SoundEvent IRONMAN_STEP = SoundEvent.of(new Identifier(Timeless.MOD_ID, "ironman_step")); - public static final SoundEvent IRONMAN_MASK = SoundEvent.of(new Identifier(Timeless.MOD_ID, "ironman_mask")); - public static final SoundEvent IRONMAN_POWERUP = SoundEvent.of(new Identifier(Timeless.MOD_ID, "ironman_powerup")); - public static final SoundEvent IRONMAN_POWERDOWN = SoundEvent.of(new Identifier(Timeless.MOD_ID, "ironman_powerdown")); - - private static SoundEvent register(String name) { - return register(new Identifier(Timeless.MOD_ID, name)); - } - private static SoundEvent register(Identifier id) { - return Registry.register(Registries.SOUND_EVENT, id, SoundEvent.of(id)); - } - - public static void init() { - - } - } - - public static class Trackers { - public static final SuitAnimationTracker SUIT = (SuitAnimationTracker) new SuitAnimationTracker().register(); - - public static void init() { - - } - } - - public static class Entities { - public static final EntityType IRON_MAN = register(Registries.ENTITY_TYPE, "iron_man", EntityType.Builder.create(IronManEntity::new, SpawnGroup.MISC) - .setDimensions(0.6f, 1.8f) - .build("iron_man")); - - public static void init() { - registerAttributes(IRON_MAN, MobEntity.createLivingAttributes().build()); - } - - private static void registerAttributes(EntityType type, DefaultAttributeContainer attributes) { - FabricDefaultAttributeRegistry.register(type, attributes); - } - } - - public static class Blocks extends BlockContainer { - public static final Block SUIT_APPLICATION = new SuitApplicationBlock(ABlockSettings.create().itemSettings(new AItemSettings().group(ItemGroups.GROUP))); - } - public static class BlockEntities { - public static final BlockEntityType SUIT_APPLICATION_BE = register(Registries.BLOCK_ENTITY_TYPE, "suit_application", BlockEntityType.Builder.create(SuitApplicationBlockEntity::new, Blocks.SUIT_APPLICATION).build(null)); - - public static void init() { - - } - } - - public static void init() { - RegistryContainer.register(ItemGroups.class, Timeless.MOD_ID); - RegistryContainer.register(Items.class, Timeless.MOD_ID); - RegistryContainer.register(Blocks.class, Timeless.MOD_ID); - - PowerRegistry.init(); - SetRegistry.init(); - SuitRegistry.init(); - Sounds.init(); - Trackers.init(); - Entities.init(); - BlockEntities.init(); - TimelessCommands.init(); - } - - public static T register(Registry registry, String name, T entry) { - return Registry.register(registry, new Identifier(Timeless.MOD_ID, name), entry); - } - - public static T registerBlockAndItem(String name, T entry) { - T output = Register.register(Registries.BLOCK, name, entry); - Registry.register(Registries.ITEM, new Identifier(Timeless.MOD_ID, name), new BlockItem(output, new FabricItemSettings())); - return output; - } -} diff --git a/src/main/java/mc/duzo/timeless/suit/Suit.java b/src/main/java/mc/duzo/timeless/suit/Suit.java index 1c3ecf9..44020c2 100644 --- a/src/main/java/mc/duzo/timeless/suit/Suit.java +++ b/src/main/java/mc/duzo/timeless/suit/Suit.java @@ -15,7 +15,7 @@ import mc.duzo.timeless.power.PowerList; import mc.duzo.timeless.suit.client.ClientSuit; import mc.duzo.timeless.suit.client.ClientSuitRegistry; -import mc.duzo.timeless.suit.item.SuitItem; +import mc.duzo.timeless.core.items.SuitItem; import mc.duzo.timeless.suit.set.SuitSet; public abstract class Suit implements Identifiable, Translatable { diff --git a/src/main/java/mc/duzo/timeless/suit/batman/item/BatmanSuitItem.java b/src/main/java/mc/duzo/timeless/suit/batman/item/BatmanSuitItem.java index 6d68692..f9ac32c 100644 --- a/src/main/java/mc/duzo/timeless/suit/batman/item/BatmanSuitItem.java +++ b/src/main/java/mc/duzo/timeless/suit/batman/item/BatmanSuitItem.java @@ -14,8 +14,8 @@ import mc.duzo.timeless.datagen.provider.lang.AutomaticSuitEnglish; import mc.duzo.timeless.datagen.provider.model.AutomaticModel; import mc.duzo.timeless.suit.Suit; -import mc.duzo.timeless.suit.item.SuitItem; -import mc.duzo.timeless.suit.item.SuitMaterial; +import mc.duzo.timeless.core.items.SuitItem; +import mc.duzo.timeless.core.items.SuitMaterial; public class BatmanSuitItem extends SuitItem implements AutomaticModel, AutomaticSuitEnglish { public BatmanSuitItem(Suit suit, Type type) { diff --git a/src/main/java/mc/duzo/timeless/suit/client/animation/SuitAnimationTracker.java b/src/main/java/mc/duzo/timeless/suit/client/animation/SuitAnimationTracker.java index 116fd11..72e2d7e 100644 --- a/src/main/java/mc/duzo/timeless/suit/client/animation/SuitAnimationTracker.java +++ b/src/main/java/mc/duzo/timeless/suit/client/animation/SuitAnimationTracker.java @@ -2,10 +2,10 @@ import mc.duzo.animation.generic.AnimationTracker; +import mc.duzo.timeless.core.TimelessTrackers; import net.minecraft.util.Identifier; import mc.duzo.timeless.Timeless; -import mc.duzo.timeless.registry.Register; public class SuitAnimationTracker extends AnimationTracker { public SuitAnimationTracker() { @@ -14,6 +14,6 @@ public SuitAnimationTracker() { public static SuitAnimationTracker getInstance() { - return Register.Trackers.SUIT; + return TimelessTrackers.SUIT; } } diff --git a/src/main/java/mc/duzo/timeless/suit/client/render/SuitFeature.java b/src/main/java/mc/duzo/timeless/suit/client/render/SuitFeature.java index 5fe54b2..98c937d 100644 --- a/src/main/java/mc/duzo/timeless/suit/client/render/SuitFeature.java +++ b/src/main/java/mc/duzo/timeless/suit/client/render/SuitFeature.java @@ -16,7 +16,7 @@ import net.minecraft.item.ItemStack; import mc.duzo.timeless.suit.Suit; -import mc.duzo.timeless.suit.item.SuitItem; +import mc.duzo.timeless.core.items.SuitItem; import mc.duzo.timeless.suit.set.SuitSet; public class SuitFeature> diff --git a/src/main/java/mc/duzo/timeless/suit/ironman/IronManEntity.java b/src/main/java/mc/duzo/timeless/suit/ironman/IronManEntity.java index 6c4d662..732aa62 100644 --- a/src/main/java/mc/duzo/timeless/suit/ironman/IronManEntity.java +++ b/src/main/java/mc/duzo/timeless/suit/ironman/IronManEntity.java @@ -3,6 +3,7 @@ import java.util.List; import java.util.Optional; +import mc.duzo.timeless.core.TimelessEntityTypes; import net.minecraft.entity.EntityType; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LivingEntity; @@ -23,7 +24,6 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; -import mc.duzo.timeless.registry.Register; import mc.duzo.timeless.suit.SuitRegistry; public class IronManEntity extends LivingEntity { // todo - PathAwareEntity for sentry mode @@ -34,7 +34,7 @@ public IronManEntity(EntityType entityType, World world super(entityType, world); } public IronManEntity(World world, IronManSuit suit) { - this(Register.Entities.IRON_MAN, world); + this(TimelessEntityTypes.IRON_MAN, world); this.setSuit(suit); this.cooldown = 60; diff --git a/src/main/java/mc/duzo/timeless/suit/ironman/IronManSuit.java b/src/main/java/mc/duzo/timeless/suit/ironman/IronManSuit.java index 5f1966c..d82d8b0 100644 --- a/src/main/java/mc/duzo/timeless/suit/ironman/IronManSuit.java +++ b/src/main/java/mc/duzo/timeless/suit/ironman/IronManSuit.java @@ -2,12 +2,12 @@ import java.util.Optional; +import mc.duzo.timeless.core.TimelessSounds; import net.minecraft.sound.SoundEvent; import net.minecraft.util.Identifier; import mc.duzo.timeless.Timeless; import mc.duzo.timeless.datagen.provider.lang.AutomaticSuitEnglish; -import mc.duzo.timeless.registry.Register; import mc.duzo.timeless.suit.Suit; public abstract class IronManSuit extends Suit implements AutomaticSuitEnglish { @@ -40,17 +40,17 @@ public Identifier id() { @Override public SoundEvent getStepSound() { - return Register.Sounds.IRONMAN_STEP; + return TimelessSounds.IRONMAN_STEP; } @Override public Optional getEquipSound() { - return Optional.of(Register.Sounds.IRONMAN_POWERUP); + return Optional.of(TimelessSounds.IRONMAN_POWERUP); } @Override public Optional getUnequipSound() { - return Optional.of(Register.Sounds.IRONMAN_POWERDOWN); + return Optional.of(TimelessSounds.IRONMAN_POWERDOWN); } public abstract int getVerticalFlightModifier(boolean isSprinting); diff --git a/src/main/java/mc/duzo/timeless/suit/ironman/IronManSuitItem.java b/src/main/java/mc/duzo/timeless/suit/ironman/IronManSuitItem.java index 1d7ef07..ccbd6f9 100644 --- a/src/main/java/mc/duzo/timeless/suit/ironman/IronManSuitItem.java +++ b/src/main/java/mc/duzo/timeless/suit/ironman/IronManSuitItem.java @@ -14,8 +14,8 @@ import mc.duzo.timeless.datagen.provider.lang.AutomaticSuitEnglish; import mc.duzo.timeless.datagen.provider.model.AutomaticModel; import mc.duzo.timeless.suit.Suit; -import mc.duzo.timeless.suit.item.SuitItem; -import mc.duzo.timeless.suit.item.SuitMaterial; +import mc.duzo.timeless.core.items.SuitItem; +import mc.duzo.timeless.core.items.SuitMaterial; public class IronManSuitItem extends SuitItem implements AutomaticModel, AutomaticSuitEnglish { public IronManSuitItem(Suit suit, Type type) { diff --git a/src/main/java/mc/duzo/timeless/suit/ironman/mk5/MarkFiveCase.java b/src/main/java/mc/duzo/timeless/suit/ironman/mk5/MarkFiveCase.java index a2676ff..cae72fe 100644 --- a/src/main/java/mc/duzo/timeless/suit/ironman/mk5/MarkFiveCase.java +++ b/src/main/java/mc/duzo/timeless/suit/ironman/mk5/MarkFiveCase.java @@ -6,6 +6,9 @@ import mc.duzo.animation.DuzoAnimationMod; import mc.duzo.animation.registry.client.TrackerRegistry; +import mc.duzo.timeless.core.TimelessItems; +import mc.duzo.timeless.core.TimelessSounds; +import mc.duzo.timeless.core.TimelessTrackers; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -18,7 +21,6 @@ import mc.duzo.timeless.Timeless; import mc.duzo.timeless.datagen.provider.lang.AutomaticSuitEnglish; -import mc.duzo.timeless.registry.Register; import mc.duzo.timeless.suit.set.SetRegistry; import mc.duzo.timeless.suit.set.SuitSet; @@ -45,9 +47,9 @@ public static boolean toCase(ServerPlayerEntity player, boolean force) { } - player.getWorld().playSound(null, player.getBlockPos(), Register.Sounds.MARK5_NOISES, SoundCategory.PLAYERS, 0.25f, 1f); + player.getWorld().playSound(null, player.getBlockPos(), TimelessSounds.MARK5_NOISES, SoundCategory.PLAYERS, 0.25f, 1f); - DuzoAnimationMod.play(player, Register.Trackers.SUIT, new Identifier(Timeless.MOD_ID, "ironman_mk5_case_close")); + DuzoAnimationMod.play(player, TimelessTrackers.SUIT, new Identifier(Timeless.MOD_ID, "ironman_mk5_case_close")); DuzoAnimationMod.play(player, TrackerRegistry.PLAYER, new Identifier(Timeless.MOD_ID, "ironman_mk5_case_close_player")); Scheduler.get().runTaskLater(() -> toCasePost(player, force), TaskStage.END_SERVER_TICK, TimeUnit.SECONDS, (long) (8.038f)); @@ -59,19 +61,19 @@ private static void toCasePost(ServerPlayerEntity player, boolean force) { } getSet().clear(player); - player.getInventory().offerOrDrop(new ItemStack(Register.Items.MARK_FIVE_CASE)); + player.getInventory().offerOrDrop(new ItemStack(TimelessItems.MARK_FIVE_CASE)); } public static boolean fromCase(ServerPlayerEntity player, boolean force) { if (!force) { if (!player.isOnGround()) return false; // not on ground - if (!player.getMainHandStack().isOf(Register.Items.MARK_FIVE_CASE)) return false; // not holding + if (!player.getMainHandStack().isOf(TimelessItems.MARK_FIVE_CASE)) return false; // not holding if (SuitSet.hasArmor(player)) return false; // already wearing } - player.getWorld().playSound(null, player.getBlockPos(), Register.Sounds.MARK5_NOISES, SoundCategory.PLAYERS, 0.25f, 1f); + player.getWorld().playSound(null, player.getBlockPos(), TimelessSounds.MARK5_NOISES, SoundCategory.PLAYERS, 0.25f, 1f); - DuzoAnimationMod.play(player, Register.Trackers.SUIT, new Identifier(Timeless.MOD_ID, "ironman_mk5_case_open")); + DuzoAnimationMod.play(player, TimelessTrackers.SUIT, new Identifier(Timeless.MOD_ID, "ironman_mk5_case_open")); DuzoAnimationMod.play(player, TrackerRegistry.PLAYER, new Identifier(Timeless.MOD_ID, "ironman_mk5_case_open_player")); player.setStackInHand(Hand.MAIN_HAND, ItemStack.EMPTY); diff --git a/src/main/java/mc/duzo/timeless/suit/set/RegisteringSuitSet.java b/src/main/java/mc/duzo/timeless/suit/set/RegisteringSuitSet.java index 0eda407..ca1febe 100644 --- a/src/main/java/mc/duzo/timeless/suit/set/RegisteringSuitSet.java +++ b/src/main/java/mc/duzo/timeless/suit/set/RegisteringSuitSet.java @@ -9,7 +9,7 @@ import mc.duzo.timeless.suit.Suit; import mc.duzo.timeless.suit.SuitRegistry; -import mc.duzo.timeless.suit.item.SuitItem; +import mc.duzo.timeless.core.items.SuitItem; /** * A version of SuitSet which registers its components, eg suit + items diff --git a/src/main/java/mc/duzo/timeless/suit/set/SuitSet.java b/src/main/java/mc/duzo/timeless/suit/set/SuitSet.java index b041ea2..146e99c 100644 --- a/src/main/java/mc/duzo/timeless/suit/set/SuitSet.java +++ b/src/main/java/mc/duzo/timeless/suit/set/SuitSet.java @@ -11,7 +11,7 @@ import net.minecraft.util.Identifier; import mc.duzo.timeless.suit.Suit; -import mc.duzo.timeless.suit.item.SuitItem; +import mc.duzo.timeless.core.items.SuitItem; public class SuitSet extends HashMap implements Identifiable { protected final Suit suit;