Fix ForwardingBakedModel not forwarding isSideLit. Closes #501 (#502)

* Fix ForwardingBakedModel not forwarding isSideLit. Closes #501

* Remove unused DamageModel

* Bump version
This commit is contained in:
modmuss50 2020-02-10 17:07:06 +00:00
parent 9ccefa5712
commit f08b613338
3 changed files with 7 additions and 78 deletions

View file

@ -1,5 +1,5 @@
archivesBaseName = "fabric-renderer-api-v1"
version = getSubprojectVersion(project, "0.2.9")
version = getSubprojectVersion(project, "0.2.10")
dependencies {
compile project(path: ':fabric-api-base', configuration: 'dev')

View file

@ -32,11 +32,10 @@ import net.minecraft.util.math.Direction;
import net.minecraft.world.BlockRenderView;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
import net.fabricmc.fabric.impl.renderer.DamageModel;
/**
* Base class for specialized model implementations that need to wrap other baked models.
* Avoids boilerplate code for pass-through methods. For example usage see {@link DamageModel}.
* Avoids boilerplate code for pass-through methods.
*/
public abstract class ForwardingBakedModel implements BakedModel, FabricBakedModel {
/** implementations must set this somehow. */
@ -82,6 +81,11 @@ public abstract class ForwardingBakedModel implements BakedModel, FabricBakedMod
return wrapped.getSprite();
}
@Override
public boolean isSideLit() {
return wrapped.isSideLit();
}
@Override
public ModelTransformation getTransformation() {
return wrapped.getTransformation();

View file

@ -1,75 +0,0 @@
/*
* Copyright (c) 2016, 2017, 2018, 2019 FabricMC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.fabricmc.fabric.impl.renderer;
import java.util.Random;
import java.util.function.Supplier;
import net.minecraft.block.BlockState;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.client.texture.Sprite;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.BlockRenderView;
import net.fabricmc.fabric.api.renderer.v1.RendererAccess;
import net.fabricmc.fabric.api.renderer.v1.material.RenderMaterial;
import net.fabricmc.fabric.api.renderer.v1.mesh.MutableQuadView;
import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel;
import net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
/**
* Specialized model wrapper that implements a general-purpose
* block-breaking render for enhanced models.
*
* <p>Works by intercepting all model output and redirecting to dynamic
* quads that are baked with single-layer, UV-locked damage texture.
*/
public class DamageModel extends ForwardingBakedModel {
static final RenderMaterial DAMAGE_MATERIAL = RendererAccess.INSTANCE.hasRenderer() ? RendererAccess.INSTANCE.getRenderer().materialFinder().find() : null;
private DamageTransform damageTransform = new DamageTransform();
public void prepare(BakedModel wrappedModel, Sprite sprite, BlockState blockState, BlockPos blockPos) {
this.damageTransform.damageSprite = sprite;
this.wrapped = wrappedModel;
}
@Override
public void emitBlockQuads(BlockRenderView blockView, BlockState state, BlockPos pos, Supplier<Random> randomSupplier, RenderContext context) {
context.pushTransform(damageTransform);
((FabricBakedModel) wrapped).emitBlockQuads(blockView, state, pos, randomSupplier, context);
context.popTransform();
}
@Override
public boolean isSideLit() {
return false;
}
private static class DamageTransform implements RenderContext.QuadTransform {
private Sprite damageSprite;
@Override
public boolean transform(MutableQuadView quad) {
quad.material(DAMAGE_MATERIAL);
quad.spriteBake(0, damageSprite, MutableQuadView.BAKE_LOCK_UV);
quad.colorIndex(-1);
return true;
}
}
}