Posted September 24, 20214 yr I am trying to generate my block models with Data Generators which I incounter this error: Invalid ResourceLocation block/minecraft:sand It's easy to spot why this error occurs ("block/minecraft:sand", ':' triggers the error) but I don't understand where this error could come from by looking at my code. Since I have a few variants of the same block, I've replicated Minecraft's way by defining a template JSON for my variant and simply have my block use it as a parent and add a texture. Heres what I have: private void generateSiltBlockFenceGateFromTemplate(SiltFenceGateBlock gate) { String texture = Objects.requireNonNull(gate.getParentBlock().getRegistryName()).toString(); getVariantBuilder(gate).forAllStatesExcept(state -> { String base = "silt_fence_gate" + (state.get(OPEN) ? "_open_" : "_close_") + state.get(AbstractSiltBarrierBlock.LAYER); if (state.get(IN_WALL)) base = base + "_in_wall"; // <base> would look like "silt_fence_gate_close_1" ModelBuilder<?> model = models() .withExistingParent(texture + "_" + base, modLoc("block/template_" + base)) .texture("texture", mcLoc("block/" + texture)) // <--- stacktrace points here .element().end(); int rotation = (int) state.get(HORIZONTAL_FACING).getHorizontalAngle(); return ConfiguredModel.builder().modelFile(model).uvLock(true).rotationY(rotation).build(); }, WATERLOGGED ); } I've also tried to feed it a texture as a string directly but to no avail: .texture("texture", "block/" + texture) // <--- stacktrace points here What I expect is sand_silt_fence_gate_close_1.json: { "parent": "siltsand:block/template_silt_fence_gate_close_1" "textures": { "texture": "sand" } } Here's my template JSON: template_silt_fence_gate_close_1.json: { "parent": "block/block", "textures": { "particle": "#texture" }, "elements": [ { "from": [ 14, 0, 7 ], "to": [ 16, 1, 9 ], "faces": { "north": { "uv": [ 0, 0, 2, 1 ], "texture": "#texture" }, "east": { "uv": [ 0, 0, 2, 1 ], "texture": "#texture" }, "south": { "uv": [ 0, 0, 2, 1 ], "texture": "#texture" }, "west": { "uv": [ 0, 0, 2, 1 ], "texture": "#texture" }, "up": { "uv": [ 0, 0, 2, 2 ], "texture": "#texture" } } }, { "from": [ 0, 0, 7 ], "to": [ 2, 1, 9 ], "faces": { "north": { "uv": [ 0, 0, 2, 1 ], "texture": "#texture" }, "east": { "uv": [ 0, 0, 2, 1 ], "texture": "#texture" }, "south": { "uv": [ 0, 0, 2, 1 ], "texture": "#texture" }, "west": { "uv": [ 0, 0, 2, 1 ], "texture": "#texture" }, "up": { "uv": [ 0, 0, 2, 2 ], "texture": "#texture" } } }, { "from": [ 2, -1, 7 ], "to": [ 14, 0, 9 ], "faces": { "up": { "uv": [ 0, 0, 12, 2 ], "texture": "#texture" }, "north": { "uv": [ 0, 0, 12, 1 ], "texture": "#texture" }, "south": { "uv": [ 0, 0, 12, 1 ], "texture": "#texture" }, "west": { "uv": [ 0, 0, 2, 1 ], "texture": "#texture" }, "east": { "uv": [ 0, 0, 2, 1 ], "texture": "#texture" } } }, { "from": [ 10, -7, 7 ], "to": [ 14, -6, 9 ], "faces": { "up": { "uv": [ 0, 0, 4, 2 ], "texture": "#texture" }, "north": { "uv": [ 0, 0, 4, 1 ], "texture": "#texture" }, "south": { "uv": [ 0, 0, 4, 1 ], "texture": "#texture" }, "west": { "uv": [ 0, 0, 2, 1 ], "texture": "#texture" }, "east": { "uv": [ 0, 0, 2, 1 ], "texture": "#texture" } } }, { "from": [ 2, -7, 7 ], "to": [ 6, -6, 9 ], "faces": { "up": { "uv": [ 0, 0, 4, 2 ], "texture": "#texture" }, "north": { "uv": [ 0, 0, 4, 1 ], "texture": "#texture" }, "south": { "uv": [ 0, 0, 4, 1 ], "texture": "#texture" }, "west": { "uv": [ 0, 0, 2, 1 ], "texture": "#texture" }, "east": { "uv": [ 0, 0, 2, 1 ], "texture": "#texture" } } } ] } I have read that maybe this might be caused by invalid JSON but that has been checked too. Any idea why this happens? PS: I am new to Data Gens so it is very likely that I using the builder wrong. PPS: Posted my issue in the wrong topic section Edited September 24, 20214 yr by than00ber1 PPS
September 24, 20214 yr Author Ok, found the issue. Within ModelBuilder, there are a few different method signatures for texture. Of which: public T texture(String key, String texture) : T and public T texture(String key, ResourceLocation texture) : T Method 1 uses <key> as the JSON key and <texture> as the asset path while in Method 2 <key> as the asset path and <texture> as the JSON key. Since I used the first method before and it my code worked, I assumed it was the same for the second method. Their paramaters are effectively swapped and this confused the hell out of me. In hindsight, I should read the comments more...
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.