Skip to content

Commit a9e9104

Browse files
committed
feat:AxeMineable tag
1 parent 2f8f843 commit a9e9104

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

src/main/java/dev/amble/lib/datagen/tag/AmbleBlockTagProvider.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.*;
44
import java.util.concurrent.CompletableFuture;
55

6+
import dev.amble.lib.datagen.util.AxeMineable;
67
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
78
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
89

@@ -38,8 +39,23 @@ protected void configure(RegistryWrapper.WrapperLookup wrapperLookup) {
3839
}
3940
}
4041
});
42+
this.blockClass.forEach(clazz -> {
43+
FabricTagBuilder pickaxeBuilder = getOrCreateTagBuilder(BlockTags.AXE_MINEABLE);
44+
HashMap<Block, Optional<AxeMineable>> axeBlocks = ReflectionUtil.getAnnotatedValues(clazz, Block.class, AxeMineable.class, false);
45+
46+
for (Block block : axeBlocks.keySet()) {
47+
pickaxeBuilder.add(block);
48+
AxeMineable annotation = axeBlocks.get(block).orElseThrow();
49+
50+
if (annotation.tool() != AxeMineable.Tool.NONE) {
51+
getOrCreateTagBuilder(annotation.tool().tag).add(block);
52+
}
53+
}
54+
});
4155
}
4256

57+
58+
4359
public AmbleBlockTagProvider withBlocks(Class<? extends BlockContainer>... blockClass) {
4460
// add all to queue
4561
this.blockClass.addAll(Arrays.asList(blockClass));
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package dev.amble.lib.datagen.util;
2+
3+
import net.minecraft.block.Block;
4+
import net.minecraft.registry.tag.BlockTags;
5+
import net.minecraft.registry.tag.TagKey;
6+
7+
import java.lang.annotation.ElementType;
8+
import java.lang.annotation.Retention;
9+
import java.lang.annotation.RetentionPolicy;
10+
import java.lang.annotation.Target;
11+
12+
@Retention(RetentionPolicy.RUNTIME)
13+
@Target(ElementType.FIELD)
14+
public @interface AxeMineable {
15+
Tool tool() default Tool.NONE;
16+
17+
enum Tool {
18+
NONE(null),
19+
STONE(BlockTags.NEEDS_STONE_TOOL),
20+
IRON(BlockTags.NEEDS_IRON_TOOL),
21+
DIAMOND(BlockTags.NEEDS_DIAMOND_TOOL),;
22+
23+
public final TagKey<Block> tag;
24+
25+
Tool(TagKey<Block> tag) {
26+
this.tag = tag;
27+
}
28+
}
29+
}

0 commit comments

Comments
 (0)