Work around odd crash in OpenJ9 due to an anonymous in a mixin.

This commit is contained in:
modmuss50 2019-12-10 19:20:52 +00:00 committed by Player
parent 3b05f68e06
commit d830abd6cf
4 changed files with 73 additions and 3 deletions
fabric-renderer-indigo
build.gradle
src/main/java/net/fabricmc/fabric
impl/client/indigo/renderer
mixin/client/indigo/renderer

View file

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

View file

@ -0,0 +1,26 @@
/*
* 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.client.indigo.renderer.accessor;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.item.ItemStack;
public interface AccessItemRenderer {
void fabric_renderBakedItemModel(BakedModel model, ItemStack stack, int light, int overlay, MatrixStack matrixStack, VertexConsumer buffer);
}

View file

@ -0,0 +1,37 @@
/*
* 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.client.indigo.renderer.render;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.item.ItemStack;
import net.fabricmc.fabric.impl.client.indigo.renderer.accessor.AccessItemRenderer;
public class IndigoQuadHandler implements ItemRenderContext.VanillaQuadHandler {
private final AccessItemRenderer itemRenderer;
public IndigoQuadHandler(AccessItemRenderer itemRenderer) {
this.itemRenderer = itemRenderer;
}
@Override
public void accept(BakedModel model, ItemStack stack, int color, int overlay, MatrixStack matrixStack, VertexConsumer buffer) {
itemRenderer.fabric_renderBakedItemModel(model, stack, color, overlay, matrixStack, buffer);
}
}

View file

@ -34,16 +34,18 @@ import net.minecraft.item.ItemStack;
import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel;
import net.fabricmc.fabric.impl.client.indigo.renderer.render.ItemRenderContext;
import net.fabricmc.fabric.impl.client.indigo.renderer.render.ItemRenderContext.VanillaQuadHandler;
import net.fabricmc.fabric.impl.client.indigo.renderer.accessor.AccessItemRenderer;
import net.fabricmc.fabric.impl.client.indigo.renderer.render.IndigoQuadHandler;
@Mixin(ItemRenderer.class)
public abstract class MixinItemRenderer {
public abstract class MixinItemRenderer implements AccessItemRenderer {
@Shadow
protected abstract void renderBakedItemModel(BakedModel model, ItemStack stack, int light, int overlay, MatrixStack matrixStack, VertexConsumer buffer);
@Shadow
protected ItemColors colorMap;
private final VanillaQuadHandler vanillaHandler = this::renderBakedItemModel;
private final VanillaQuadHandler vanillaHandler = new IndigoQuadHandler(this);
private final ThreadLocal<ItemRenderContext> CONTEXTS = ThreadLocal.withInitial(() -> new ItemRenderContext(colorMap));
@ -56,4 +58,9 @@ public abstract class MixinItemRenderer {
ci.cancel();
}
}
@Override
public void fabric_renderBakedItemModel(BakedModel model, ItemStack stack, int light, int overlay, MatrixStack matrixStack, VertexConsumer buffer) {
renderBakedItemModel(model, stack, light, overlay, matrixStack, buffer);
}
}