Skip to content

Commit d023746

Browse files
authored
Initial release (#1)
1 parent 361be66 commit d023746

19 files changed

+1918
-14
lines changed

.github/workflows/validate-pr.yml

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,9 @@ jobs:
2323
java-vendor: temurin
2424
version: ${{ needs.generate-vars.outputs.version }}
2525

26-
check-local-changes:
27-
name: Check local changes
28-
needs: generate-vars
29-
if: success()
30-
uses: ApexStudios-Dev/.github/.github/workflows/_check-local-changes.yml@master
31-
secrets: inherit
32-
with:
33-
java-version: 21
34-
java-vendor: temurin
35-
version: ${{ needs.generate-vars.outputs.version }}
36-
3726
publish-maven:
3827
name: Publish Maven
39-
needs: [ generate-vars, build, check-local-changes ]
28+
needs: [ generate-vars, build ]
4029
if: success()
4130
uses: ApexStudios-Dev/.github/.github/workflows/_publish-maven.yml@master
4231
secrets: inherit

README.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Registree
2+
3+
`Registree` is a library-mod for Minecraft running on the [NeoForge modloader](https://neoforged.net/), designed to make handling all your registry needs easy and efficient. The name is a play on 'Registry' to emphasize its core purpose.
4+
5+
### Key Features
6+
- **Deferred Holders**: Provides many more deferred holder types, making them easier to deal with.
7+
- **Reduced Boilerplate**: Automatically handles registering to the various registry types available, No more creating a 'DeferredRegister' for each registry just 1 'Registree'.
8+
9+
### Obtaining Registree
10+
11+
Registree is a development library and is not intended for end-users to download directly. It can not be found on platforms like CurseForge or Modrinth.
12+
To use it, you must add it as a dependency in your mod's `build.gradle` file.
13+
14+
The library is available through our [Maven repository](https://maven.apexstudios.dev/releases).
15+
16+
<details>
17+
<summary> Groovy DSL (build.gradle) </summary>
18+
19+
```groovy
20+
repositories {
21+
maven { url "https://maven.apexstudios.dev/releases" }
22+
}
23+
24+
dependencies {
25+
// Versions here must match
26+
implementation "dev.apexstudios:registree:<version>"
27+
jarJar "dev.apexstudios:registree:<version>"
28+
}
29+
```
30+
31+
</details>
32+
33+
<details>
34+
<summary> Kotlin DSL (build.gradle.kts) </summary>
35+
36+
```groovy
37+
repositories {
38+
maven("https://maven.apexstudios.dev/releases")
39+
}
40+
41+
dependencies {
42+
// Versions here must match
43+
implementation("dev.apexstudios:registree:<version>")
44+
jarJar("dev.apexstudios:registree:<version>")
45+
}
46+
```
47+
48+
</details>

build.gradle.kts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
plugins {
2-
id("apex-conventions.neoforge") version "0.1.74"
3-
id("apex-conventions.maven-publishing") version "0.1.74"
2+
id("apex-conventions.neoforge") version "0.1.75"
3+
id("apex-conventions.maven-publishing") version "0.1.75"
44
}
55

66
group = "dev.apexstudios"
77

88
apex.neoVersion("21.10.20-beta", "1.21.9", "2025.10.05")
99
apex.extendCompilerErrors()
10+
11+
tasks.withType<Jar> {
12+
manifest {
13+
attributes(
14+
"FMLModType" to "GAMELIBRARY",
15+
"Automatic-Module-Name" to "registree"
16+
)
17+
}
18+
}

src/main/java/dev/apexstudios/registree/api/Registree.java

Lines changed: 954 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package dev.apexstudios.registree.api.holder;
2+
3+
import net.minecraft.resources.ResourceKey;
4+
import net.neoforged.neoforge.registries.DeferredHolder;
5+
6+
public class ApexDeferredHolder<TRegistry, TElement extends TRegistry> extends DeferredHolder<TRegistry, TElement> {
7+
public ApexDeferredHolder(ResourceKey<TRegistry> registryKey) {
8+
super(registryKey);
9+
}
10+
11+
public boolean is(TRegistry other) {
12+
return value() == other;
13+
}
14+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package dev.apexstudios.registree.api.holder;
2+
3+
import net.minecraft.resources.ResourceKey;
4+
import net.minecraft.world.level.block.Block;
5+
import net.minecraft.world.level.block.state.BlockState;
6+
7+
public final class DeferredBlock<TBlock extends Block> extends DeferredItemLike<Block, TBlock> {
8+
public DeferredBlock(ResourceKey<Block> registryKey) {
9+
super(registryKey);
10+
}
11+
12+
public boolean is(BlockState blockState) {
13+
return blockState.is(this);
14+
}
15+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package dev.apexstudios.registree.api.holder;
2+
3+
import net.minecraft.core.BlockPos;
4+
import net.minecraft.resources.ResourceKey;
5+
import net.minecraft.world.level.BlockGetter;
6+
import net.minecraft.world.level.block.Block;
7+
import net.minecraft.world.level.block.entity.BlockEntity;
8+
import net.minecraft.world.level.block.entity.BlockEntityType;
9+
import net.minecraft.world.level.block.state.BlockState;
10+
11+
public final class DeferredBlockEntity<TBlockEntity extends BlockEntity> extends ApexDeferredHolder<BlockEntityType<?>, BlockEntityType<TBlockEntity>> {
12+
public DeferredBlockEntity(ResourceKey<BlockEntityType<?>> registryKey) {
13+
super(registryKey);
14+
}
15+
16+
public TBlockEntity get(BlockGetter level, BlockPos pos) {
17+
return value().getBlockEntity(level, pos);
18+
}
19+
20+
public boolean isValid(BlockState blockState) {
21+
return value().isValid(blockState);
22+
}
23+
24+
public boolean isValid(Block block) {
25+
return value().getValidBlocks().contains(block);
26+
}
27+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package dev.apexstudios.registree.api.holder;
2+
3+
import net.minecraft.core.component.DataComponentType;
4+
import net.minecraft.resources.ResourceKey;
5+
6+
public final class DeferredDataComponent<TData> extends ApexDeferredHolder<DataComponentType<?>, DataComponentType<TData>> {
7+
public DeferredDataComponent(ResourceKey<DataComponentType<?>> registryKey) {
8+
super(registryKey);
9+
}
10+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package dev.apexstudios.registree.api.holder;
2+
3+
import net.minecraft.resources.ResourceKey;
4+
import net.minecraft.world.entity.Entity;
5+
import net.minecraft.world.entity.EntityType;
6+
7+
public final class DeferredEntity<TEntity extends Entity> extends ApexDeferredHolder<EntityType<?>, EntityType<TEntity>> {
8+
public DeferredEntity(ResourceKey<EntityType<?>> registryKey) {
9+
super(registryKey);
10+
}
11+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package dev.apexstudios.registree.api.holder;
2+
3+
import net.minecraft.resources.ResourceKey;
4+
import net.minecraft.world.level.material.Fluid;
5+
import net.minecraft.world.level.material.FluidState;
6+
import net.neoforged.neoforge.fluids.FluidStack;
7+
import net.neoforged.neoforge.fluids.FluidType;
8+
9+
public final class DeferredFluid<TFluid extends Fluid> extends ApexDeferredHolder<Fluid, TFluid> {
10+
public DeferredFluid(ResourceKey<Fluid> registryKey) {
11+
super(registryKey);
12+
}
13+
14+
public boolean is(FluidType fluidType) {
15+
return value().getFluidType() == fluidType;
16+
}
17+
18+
public boolean is(FluidState fluidState) {
19+
return fluidState.is(value());
20+
}
21+
22+
public boolean is(FluidStack stack) {
23+
return stack.is(this);
24+
}
25+
26+
public FluidStack toStack(int amount) {
27+
return new FluidStack(this, amount);
28+
}
29+
30+
public FluidStack toStack() {
31+
return toStack(FluidType.BUCKET_VOLUME);
32+
}
33+
}

0 commit comments

Comments
 (0)