Skip to content
Merged
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
13 changes: 13 additions & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -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:
58 changes: 58 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -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}}"
58 changes: 58 additions & 0 deletions .github/workflows/publish_devbuilds.yml
Original file line number Diff line number Diff line change
@@ -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%
4 changes: 3 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ repositories {
artifact() // Look directly for artifact
}
}

maven { url "https://theo.is-a.dev/maven-repo/" }
}

fabricApi {
Expand All @@ -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")
}

Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
scheduler_version = 1.1.0
26 changes: 24 additions & 2 deletions src/main/java/mc/duzo/timeless/Timeless.java
Original file line number Diff line number Diff line change
@@ -1,19 +1,41 @@
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";
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);

@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();
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand All @@ -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
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/mc/duzo/timeless/client/TimelessClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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<SuitApplicationBlockEntity> 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 <V, T extends V> T register(Registry<V> registry, String name, T entry) {
return Registry.register(registry, new Identifier(Timeless.MOD_ID, name), entry);
}
}
11 changes: 11 additions & 0 deletions src/main/java/mc/duzo/timeless/core/TimelessBlocks.java
Original file line number Diff line number Diff line change
@@ -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)));
}
31 changes: 31 additions & 0 deletions src/main/java/mc/duzo/timeless/core/TimelessEntityTypes.java
Original file line number Diff line number Diff line change
@@ -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<IronManEntity> IRON_MAN = register(Registries.ENTITY_TYPE, "iron_man", EntityType.Builder.<IronManEntity>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<? extends LivingEntity> type, DefaultAttributeContainer attributes) {
FabricDefaultAttributeRegistry.register(type, attributes);
}

public static <V, T extends V> T register(Registry<V> registry, String name, T entry) {
return Registry.register(registry, new Identifier(Timeless.MOD_ID, name), entry);
}
}
15 changes: 15 additions & 0 deletions src/main/java/mc/duzo/timeless/core/TimelessItemGroups.java
Original file line number Diff line number Diff line change
@@ -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();
}
9 changes: 9 additions & 0 deletions src/main/java/mc/duzo/timeless/core/TimelessItems.java
Original file line number Diff line number Diff line change
@@ -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));
}
28 changes: 28 additions & 0 deletions src/main/java/mc/duzo/timeless/core/TimelessSounds.java
Original file line number Diff line number Diff line change
@@ -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() {

}
}
Loading
Loading