Skip to content

Commit 365eb80

Browse files
committed
Testmod for many blocks/items test
1 parent fed0392 commit 365eb80

File tree

9 files changed

+243
-1
lines changed

9 files changed

+243
-1
lines changed

fabric/testmod/build.gradle

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
apply plugin: "dev.architectury.loom"
22

3+
loom {
4+
accessWidenerPath = project(":common").loom.accessWidenerPath
5+
}
6+
37
dependencies {
48
minecraft "com.mojang:minecraft:${rootProject.minecraft_version}"
59
mappings loom.layered() {
@@ -11,6 +15,9 @@ dependencies {
1115

1216
modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
1317
modImplementation(fabricApi.module("fabric-resource-loader-v0", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' }
18+
modImplementation(fabricApi.module("fabric-models-v0", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' }
19+
modImplementation(fabricApi.module("fabric-renderer-api-v1", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' }
20+
modRuntimeOnly(fabricApi.module("fabric-renderer-indigo", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' }
1421

1522
implementation project(path: ":common", configuration: "namedElements")
1623
implementation project(path: ":fabric", configuration: "namedElements")
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.embeddedt.modernfix.testmod;
2+
3+
import net.minecraft.world.level.block.Block;
4+
import net.minecraft.world.level.block.Blocks;
5+
import net.minecraft.world.level.block.state.BlockBehaviour;
6+
7+
public class TestBlock extends Block {
8+
private static final BlockBehaviour.Properties PROPERTIES = BlockBehaviour.Properties.copy(Blocks.STONE);
9+
10+
public TestBlock() {
11+
super(PROPERTIES);
12+
}
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.embeddedt.modernfix.testmod;
2+
3+
import net.minecraft.world.item.BlockItem;
4+
import net.minecraft.world.item.CreativeModeTab;
5+
import net.minecraft.world.item.Item;
6+
7+
public class TestBlockItem extends BlockItem {
8+
private static final Item.Properties PROPERTIES = new Item.Properties().tab(CreativeModeTab.TAB_BUILDING_BLOCKS);
9+
10+
public TestBlockItem(TestBlock block) {
11+
super(block, PROPERTIES);
12+
}
13+
}
Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,40 @@
11
package org.embeddedt.modernfix.testmod;
22

3+
import com.google.common.base.Stopwatch;
34
import net.fabricmc.api.ModInitializer;
5+
import net.minecraft.core.Registry;
6+
import net.minecraft.resources.ResourceLocation;
7+
import org.apache.logging.log4j.LogManager;
8+
import org.apache.logging.log4j.Logger;
49

510
public class TestMod implements ModInitializer {
11+
public static final String ID = "mfix_testmod";
12+
public static final Logger LOGGER = LogManager.getLogger("ModernFix TestMod");
13+
14+
public static final int NUM_COLORS = 32;
15+
public static final int MAX_COLOR = NUM_COLORS - 1;
16+
617
@Override
718
public void onInitialize() {
8-
System.out.println("Hello ModernFix world!");
19+
// Register 1 million blocks & items
20+
Stopwatch watch = Stopwatch.createStarted();
21+
int totalToRegister = NUM_COLORS * NUM_COLORS * NUM_COLORS;
22+
int progressReport = totalToRegister / 20;
23+
int numRegistered = 0;
24+
for(int r = 0; r < NUM_COLORS; r++) {
25+
for(int g = 0; g < NUM_COLORS; g++) {
26+
for(int b = 0; b < NUM_COLORS; b++) {
27+
ResourceLocation name = new ResourceLocation(ID, "wool_" + r + "_" + g + "_" + b);
28+
TestBlock block = Registry.register(Registry.BLOCK, name, new TestBlock());
29+
Registry.register(Registry.ITEM, name, new TestBlockItem(block));
30+
numRegistered++;
31+
if((numRegistered % progressReport) == 0) {
32+
LOGGER.info(String.format("Registering... %.02f%%", ((float)numRegistered)/totalToRegister * 100));
33+
}
34+
}
35+
}
36+
}
37+
watch.stop();
38+
LOGGER.info("Registered {} registry entries in {}", totalToRegister, watch);
939
}
1040
}
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
package org.embeddedt.modernfix.testmod.client;
2+
3+
import com.google.common.collect.ImmutableList;
4+
import com.mojang.datafixers.util.Pair;
5+
import net.fabricmc.fabric.api.renderer.v1.Renderer;
6+
import net.fabricmc.fabric.api.renderer.v1.RendererAccess;
7+
import net.fabricmc.fabric.api.renderer.v1.mesh.Mesh;
8+
import net.fabricmc.fabric.api.renderer.v1.mesh.MeshBuilder;
9+
import net.fabricmc.fabric.api.renderer.v1.mesh.MutableQuadView;
10+
import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter;
11+
import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel;
12+
import net.fabricmc.fabric.api.renderer.v1.model.ModelHelper;
13+
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
14+
import net.minecraft.client.renderer.block.model.BakedQuad;
15+
import net.minecraft.client.renderer.block.model.ItemOverrides;
16+
import net.minecraft.client.renderer.block.model.ItemTransforms;
17+
import net.minecraft.client.renderer.texture.TextureAtlas;
18+
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
19+
import net.minecraft.client.resources.model.*;
20+
import net.minecraft.core.BlockPos;
21+
import net.minecraft.core.Direction;
22+
import net.minecraft.resources.ResourceLocation;
23+
import net.minecraft.world.item.ItemStack;
24+
import net.minecraft.world.level.BlockAndTintGetter;
25+
import net.minecraft.world.level.block.state.BlockState;
26+
import org.embeddedt.modernfix.testmod.TestMod;
27+
import org.jetbrains.annotations.Nullable;
28+
29+
import java.util.*;
30+
import java.util.function.Function;
31+
import java.util.function.Supplier;
32+
33+
public class TestModBlockModel implements UnbakedModel, BakedModel, FabricBakedModel {
34+
private static final Material BASE_WOOL = new Material(TextureAtlas.LOCATION_BLOCKS, new ResourceLocation(TestMod.ID, "block/base_wool"));
35+
36+
private Mesh mesh;
37+
private TextureAtlasSprite texture;
38+
39+
private final int r, g, b;
40+
41+
public TestModBlockModel(int r, int g, int b) {
42+
this.r = r;
43+
this.g = g;
44+
this.b = b;
45+
}
46+
47+
@Override
48+
public boolean isVanillaAdapter() {
49+
return false;
50+
}
51+
52+
@Override
53+
public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, BlockPos pos, Supplier<Random> randomSupplier, RenderContext context) {
54+
context.meshConsumer().accept(mesh);
55+
}
56+
57+
@Override
58+
public void emitItemQuads(ItemStack stack, Supplier<Random> randomSupplier, RenderContext context) {
59+
context.meshConsumer().accept(mesh);
60+
}
61+
62+
@Override
63+
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand) {
64+
return Collections.emptyList();
65+
}
66+
67+
@Override
68+
public boolean useAmbientOcclusion() {
69+
return true;
70+
}
71+
72+
@Override
73+
public boolean isGui3d() {
74+
return true;
75+
}
76+
77+
@Override
78+
public boolean usesBlockLight() {
79+
return true;
80+
}
81+
82+
@Override
83+
public boolean isCustomRenderer() {
84+
return false;
85+
}
86+
87+
@Override
88+
public TextureAtlasSprite getParticleIcon() {
89+
return texture;
90+
}
91+
92+
@Override
93+
public ItemTransforms getTransforms() {
94+
return ModelHelper.MODEL_TRANSFORM_BLOCK;
95+
}
96+
97+
@Override
98+
public ItemOverrides getOverrides() {
99+
return ItemOverrides.EMPTY;
100+
}
101+
102+
@Override
103+
public Collection<ResourceLocation> getDependencies() {
104+
return Collections.emptyList();
105+
}
106+
107+
@Override
108+
public Collection<Material> getMaterials(Function<ResourceLocation, UnbakedModel> modelGetter, Set<Pair<String, String>> missingTextureErrors) {
109+
return ImmutableList.of(BASE_WOOL);
110+
}
111+
112+
private static int scaleColor(int c) {
113+
return c * 255 / TestMod.MAX_COLOR;
114+
}
115+
116+
@Nullable
117+
@Override
118+
public BakedModel bake(ModelBakery modelBakery, Function<Material, TextureAtlasSprite> spriteGetter, ModelState transform, ResourceLocation location) {
119+
// Build the mesh using the Renderer API
120+
Renderer renderer = RendererAccess.INSTANCE.getRenderer();
121+
MeshBuilder builder = renderer.meshBuilder();
122+
QuadEmitter emitter = builder.getEmitter();
123+
124+
texture = spriteGetter.apply(BASE_WOOL);
125+
126+
for(Direction direction : Direction.values()) {
127+
// Add a new face to the mesh
128+
emitter.square(direction, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f);
129+
// Set the sprite of the face, must be called after .square()
130+
// We haven't specified any UV coordinates, so we want to use the whole texture. BAKE_LOCK_UV does exactly that.
131+
emitter.spriteBake(0, texture, MutableQuadView.BAKE_LOCK_UV);
132+
int color = (255 << 24) | (scaleColor(r) << 16) | (scaleColor(g) << 8) | scaleColor(b);
133+
// Enable texture usage
134+
emitter.spriteColor(0, color, color, color, color);
135+
// Add the quad to the mesh
136+
emitter.emit();
137+
}
138+
mesh = builder.build();
139+
140+
return this;
141+
}
142+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.embeddedt.modernfix.testmod.client;
2+
3+
import net.fabricmc.api.ClientModInitializer;
4+
import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry;
5+
import org.embeddedt.modernfix.testmod.TestMod;
6+
7+
import java.util.regex.Matcher;
8+
import java.util.regex.Pattern;
9+
10+
public class TestModClient implements ClientModInitializer {
11+
private static final Pattern RGB_PATTERN = Pattern.compile("^wool_([0-9]+)_([0-9]+)_([0-9]+)$");
12+
@Override
13+
public void onInitializeClient() {
14+
ModelLoadingRegistry.INSTANCE.registerVariantProvider(resourceManager -> (modelId, context) -> {
15+
if(modelId.getNamespace().equals(TestMod.ID)) {
16+
Matcher matcher = RGB_PATTERN.matcher(modelId.getPath());
17+
if(matcher.matches()) {
18+
int r = Integer.parseInt(matcher.group(1));
19+
int g = Integer.parseInt(matcher.group(2));
20+
int b = Integer.parseInt(matcher.group(3));
21+
return new TestModBlockModel(r, g, b);
22+
}
23+
}
24+
return null;
25+
});
26+
}
27+
}
560 Bytes
Loading

fabric/testmod/src/main/resources/fabric.mod.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
"entrypoints": {
1818
"main": [
1919
"org.embeddedt.modernfix.testmod.TestMod"
20+
],
21+
"client": [
22+
"org.embeddedt.modernfix.testmod.client.TestModClient"
2023
]
2124
}
2225
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"pack": {
3+
"description": "testmod resources",
4+
"pack_format": 6,
5+
"_comment": "A pack_format of 6 requires json lang files and some texture changes from 1.16.2. Note: we require v6 pack meta for all mods."
6+
}
7+
}

0 commit comments

Comments
 (0)