Hardcode the particle
The default texture is hardcoded and making that settable per-block would be a big pain. Just hardcode it.
This commit is contained in:
parent
e3dc78fa6a
commit
a981cd28c2
@ -51,9 +51,7 @@ If possible, I don't recommend making a wholly *new* json model. If you have an
|
|||||||
"north": "templates:templates_special/north",
|
"north": "templates:templates_special/north",
|
||||||
"south": "templates:templates_special/south",
|
"south": "templates:templates_special/south",
|
||||||
"west": "templates:templates_special/west",
|
"west": "templates:templates_special/west",
|
||||||
"east": "templates:templates_special/east",
|
"east": "templates:templates_special/east"
|
||||||
|
|
||||||
"particle": "minecraft:block/scaffolding_top"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@ -70,7 +68,7 @@ If you have a shape in mind that can't be represented with a json model (like a
|
|||||||
|
|
||||||
We will construct a `RetexturedMeshUnbakedModel`. You need two things - the ID of a parent model, and a `Supplier<>` of a `Mesh` to retexture.
|
We will construct a `RetexturedMeshUnbakedModel`. You need two things - the ID of a parent model, and a `Supplier<>` of a `Mesh` to retexture.
|
||||||
|
|
||||||
Ideally, the parent model should have a parent of `block/block`, or at least define *some* non-default rotations (smokey the bear voice *Only You Can Prevent Weirdly Rotated First-Person Models*), set `"gui_light": "front"` (lest the item model look weird), and define a particle texture. You should use a json model for this, but keep in mind that no quads will be read from the json model - it's only used to source all the miscellaneous `BakedModel` options.
|
Ideally, the parent model should have a parent of `block/block`, or at least define *some* non-default rotations (smokey the bear voice *Only You Can Prevent Weirdly Rotated First-Person Models*) and set `"gui_light": "front"` (lest the item model look weird). You should use a json model for this, but keep in mind that no quads will be read from the json model - it's only used to source all the miscellaneous `BakedModel` options.
|
||||||
|
|
||||||
When building the `Mesh`, if you want a face to be dynamically retextured, `.tag()` it with the `.ordinal() + 1` of the `Direction` it corresponds to, and give the face UV coordinates ranging from 0 to 1. (For example, if you tag a face with `3` (`Direction.NORTH.ordinal() + 1`), it will be retextured to the north side of the template's theme.)
|
When building the `Mesh`, if you want a face to be dynamically retextured, `.tag()` it with the `.ordinal() + 1` of the `Direction` it corresponds to, and give the face UV coordinates ranging from 0 to 1. (For example, if you tag a face with `3` (`Direction.NORTH.ordinal() + 1`), it will be retextured to the north side of the template's theme.)
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ public class TemplateInteractionUtil {
|
|||||||
.with(REDSTONE, be.hasSpentRedstoneTorch() || placementState.getWeakRedstonePower(world, pos, Direction.NORTH) != 0));
|
.with(REDSTONE, be.hasSpentRedstoneTorch() || placementState.getWeakRedstonePower(world, pos, Direction.NORTH) != 0));
|
||||||
|
|
||||||
if(!player.isCreative()) held.decrement(1);
|
if(!player.isCreative()) held.decrement(1);
|
||||||
world.playSound(player, pos, state.getSoundGroup().getPlaceSound(), SoundCategory.BLOCKS, 1f, 1f);
|
world.playSound(player, pos, placementState.getSoundGroup().getPlaceSound(), SoundCategory.BLOCKS, 1f, 1.1f);
|
||||||
return ActionResult.SUCCESS;
|
return ActionResult.SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -83,6 +83,11 @@ public class RetexturedJsonModelBakedModel extends ForwardingBakedModel {
|
|||||||
context.meshConsumer().accept(meshCache.computeIfAbsent(key, this::makeMesh));
|
context.meshConsumer().accept(meshCache.computeIfAbsent(key, this::makeMesh));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Sprite getParticleSprite() {
|
||||||
|
return tam.getDefaultAppearance().getParticleSprite();
|
||||||
|
}
|
||||||
|
|
||||||
protected Mesh makeMesh(CacheKey key) {
|
protected Mesh makeMesh(CacheKey key) {
|
||||||
Renderer r = TemplatesClient.getFabricRenderer();
|
Renderer r = TemplatesClient.getFabricRenderer();
|
||||||
MeshBuilder builder = r.meshBuilder();
|
MeshBuilder builder = r.meshBuilder();
|
||||||
|
@ -56,6 +56,11 @@ public final class RetexturedMeshBakedModel extends ForwardingBakedModel {
|
|||||||
context.popTransform();
|
context.popTransform();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Sprite getParticleSprite() {
|
||||||
|
return tam.getDefaultAppearance().getParticleSprite();
|
||||||
|
}
|
||||||
|
|
||||||
public @NotNull RenderContext.QuadTransform retexturingBlockTransformer(BlockRenderView blockView, BlockState state, BlockPos pos, Supplier<Random> randomSupplier) {
|
public @NotNull RenderContext.QuadTransform retexturingBlockTransformer(BlockRenderView blockView, BlockState state, BlockPos pos, Supplier<Random> randomSupplier) {
|
||||||
BlockState theme = (((RenderAttachedBlockView) blockView).getBlockEntityRenderAttachment(pos) instanceof BlockState s) ? s : null;
|
BlockState theme = (((RenderAttachedBlockView) blockView).getBlockEntityRenderAttachment(pos) instanceof BlockState s) ? s : null;
|
||||||
if(theme == null || theme.isAir()) return new RetexturingTransformer(tam.getDefaultAppearance(), 0xFFFFFFFF, facePermutation);
|
if(theme == null || theme.isAir()) return new RetexturingTransformer(tam.getDefaultAppearance(), 0xFFFFFFFF, facePermutation);
|
||||||
|
@ -25,19 +25,17 @@ import java.util.function.Function;
|
|||||||
|
|
||||||
public class TemplateAppearanceManager {
|
public class TemplateAppearanceManager {
|
||||||
public TemplateAppearanceManager(Function<SpriteIdentifier, Sprite> spriteLookup) {
|
public TemplateAppearanceManager(Function<SpriteIdentifier, Sprite> spriteLookup) {
|
||||||
SpriteIdentifier defaultSpriteId = new SpriteIdentifier(PlayerScreenHandler.BLOCK_ATLAS_TEXTURE, new Identifier("minecraft:block/scaffolding_top"));
|
|
||||||
Sprite defaultSprite = spriteLookup.apply(defaultSpriteId);
|
|
||||||
if(defaultSprite == null) throw new IllegalStateException("Couldn't locate " + defaultSpriteId + " !");
|
|
||||||
|
|
||||||
MaterialFinder finder = TemplatesClient.getFabricRenderer().materialFinder();
|
MaterialFinder finder = TemplatesClient.getFabricRenderer().materialFinder();
|
||||||
|
|
||||||
for(BlendMode blend : BlendMode.values()) {
|
for(BlendMode blend : BlendMode.values()) {
|
||||||
blockMaterials.put(blend, finder.clear().disableDiffuse(false).ambientOcclusion(TriState.FALSE).blendMode(blend).find());
|
blockMaterials.put(blend, finder.clear().disableDiffuse(false).ambientOcclusion(TriState.FALSE).blendMode(blend).find());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Sprite defaultSprite = spriteLookup.apply(DEFAULT_SPRITE_ID);
|
||||||
|
if(defaultSprite == null) throw new IllegalStateException("Couldn't locate " + DEFAULT_SPRITE_ID + " !");
|
||||||
this.defaultAppearance = new SingleSpriteAppearance(defaultSprite, blockMaterials.get(BlendMode.CUTOUT));
|
this.defaultAppearance = new SingleSpriteAppearance(defaultSprite, blockMaterials.get(BlendMode.CUTOUT));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static final SpriteIdentifier DEFAULT_SPRITE_ID = new SpriteIdentifier(PlayerScreenHandler.BLOCK_ATLAS_TEXTURE, new Identifier("minecraft:block/scaffolding_top"));
|
||||||
private final TemplateAppearance defaultAppearance;
|
private final TemplateAppearance defaultAppearance;
|
||||||
|
|
||||||
//Mutable, append-only cache:
|
//Mutable, append-only cache:
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
"north": "templates:templates_special/north",
|
"north": "templates:templates_special/north",
|
||||||
"south": "templates:templates_special/south",
|
"south": "templates:templates_special/south",
|
||||||
"west": "templates:templates_special/west",
|
"west": "templates:templates_special/west",
|
||||||
"east": "templates:templates_special/east",
|
"east": "templates:templates_special/east"
|
||||||
"particle": "minecraft:block/scaffolding_top"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -6,8 +6,7 @@
|
|||||||
"north": "templates:templates_special/north",
|
"north": "templates:templates_special/north",
|
||||||
"south": "templates:templates_special/south",
|
"south": "templates:templates_special/south",
|
||||||
"west": "templates:templates_special/west",
|
"west": "templates:templates_special/west",
|
||||||
"east": "templates:templates_special/east",
|
"east": "templates:templates_special/east"
|
||||||
"particle": "minecraft:block/scaffolding_top"
|
|
||||||
},
|
},
|
||||||
"elements": [
|
"elements": [
|
||||||
{
|
{
|
||||||
|
@ -6,8 +6,7 @@
|
|||||||
"north": "templates:templates_special/north",
|
"north": "templates:templates_special/north",
|
||||||
"south": "templates:templates_special/south",
|
"south": "templates:templates_special/south",
|
||||||
"west": "templates:templates_special/west",
|
"west": "templates:templates_special/west",
|
||||||
"east": "templates:templates_special/east",
|
"east": "templates:templates_special/east"
|
||||||
"particle": "minecraft:block/scaffolding_top"
|
|
||||||
},
|
},
|
||||||
"elements": [
|
"elements": [
|
||||||
{
|
{
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
{
|
{
|
||||||
"parent": "minecraft:block/block",
|
"parent": "minecraft:block/block",
|
||||||
"gui_light": "front",
|
"gui_light": "front",
|
||||||
"textures": {
|
|
||||||
"particle": "minecraft:block/scaffolding_top"
|
|
||||||
},
|
|
||||||
"display": {
|
"display": {
|
||||||
"firstperson_righthand": {
|
"firstperson_righthand": {
|
||||||
"rotation": [ 0, 135, 0 ],
|
"rotation": [ 0, 135, 0 ],
|
||||||
|
Loading…
Reference in New Issue
Block a user