Re-add Pattern rendering

This commit is contained in:
raoulvdberge
2019-10-11 18:33:54 +02:00
parent b7b11904a7
commit e5ebda9f2f
5 changed files with 103 additions and 169 deletions

View File

@@ -1,13 +1,22 @@
package com.raoulvdberge.refinedstorage;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.container.CrafterContainer;
import com.raoulvdberge.refinedstorage.container.CrafterManagerContainer;
import com.raoulvdberge.refinedstorage.container.slot.CrafterManagerSlot;
import com.raoulvdberge.refinedstorage.render.BakedModelOverrideRegistry;
import com.raoulvdberge.refinedstorage.render.model.baked.DiskDriveBakedModel;
import com.raoulvdberge.refinedstorage.render.model.baked.FullbrightBakedModel;
import com.raoulvdberge.refinedstorage.render.model.baked.PatternBakedModel;
import com.raoulvdberge.refinedstorage.screen.ControllerScreen;
import com.raoulvdberge.refinedstorage.screen.DiskDriveScreen;
import com.raoulvdberge.refinedstorage.screen.FilterScreen;
import com.raoulvdberge.refinedstorage.screen.factory.GridScreenFactory;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScreenManager;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.Slot;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.ModelBakeEvent;
import net.minecraftforge.client.model.ModelLoader;
@@ -49,6 +58,8 @@ public class ClientSetup {
new ResourceLocation(RS.ID, "block/grid/cutouts/pattern_front_connected")
));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "pattern"), (base, registry) -> new PatternBakedModel(base));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "disk_drive"), (base, registry) -> new FullbrightBakedModel(
new DiskDriveBakedModel(
base,
@@ -67,6 +78,34 @@ public class ClientSetup {
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onClientSetup);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onModelBake);
API.instance().addPatternRenderHandler(pattern -> Screen.hasShiftDown());
API.instance().addPatternRenderHandler(pattern -> {
Container container = Minecraft.getInstance().player.openContainer;
if (container instanceof CrafterManagerContainer) {
for (Slot slot : container.inventorySlots) {
if (slot instanceof CrafterManagerSlot && slot.getStack() == pattern) {
return true;
}
}
}
return false;
});
API.instance().addPatternRenderHandler(pattern -> {
Container container = Minecraft.getInstance().player.openContainer;
if (container instanceof CrafterContainer) {
for (int i = 0; i < 9; ++i) {
if (container.getSlot(i).getStack() == pattern) {
return true;
}
}
}
return false;
});
}
@SubscribeEvent

View File

@@ -27,34 +27,6 @@ public class ProxyCommon {
API.instance().getCraftingPreviewElementRegistry().add(CraftingPreviewElementFluidStack.ID, CraftingPreviewElementFluidStack::fromByteBuf);
API.instance().getCraftingPreviewElementRegistry().add(CraftingPreviewElementError.ID, CraftingPreviewElementError::fromByteBuf);
API.instance().addPatternRenderHandler(pattern -> GuiBase.isShiftKeyDown());
API.instance().addPatternRenderHandler(pattern -> {
Container container = Minecraft.getMinecraft().player.openContainer;
if (container instanceof ContainerCrafterManager) {
for (Slot slot : container.inventorySlots) {
if (slot instanceof SlotCrafterManager && slot.getStack() == pattern) {
return true;
}
}
}
return false;
});
API.instance().addPatternRenderHandler(pattern -> {
Container container = Minecraft.getMinecraft().player.openContainer;
if (container instanceof ContainerCrafter) {
for (int i = 0; i < 9; ++i) {
if (container.getSlot(i).getStack() == pattern) {
return true;
}
}
}
return false;
});
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerItems.ID, ReaderWriterHandlerItems::new);
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerFluids.ID, ReaderWriterHandlerFluids::new);
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerRedstone.ID, tag -> new ReaderWriterHandlerRedstone());

View File

@@ -1,78 +0,0 @@
package com.raoulvdberge.refinedstorage.render.model.baked;
/*
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternRenderHandler;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.CraftingPattern;
import com.raoulvdberge.refinedstorage.item.ItemPattern;
import com.raoulvdberge.refinedstorage.util.RenderUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.block.model.ItemOverrideList;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.common.model.TRSRTransformation;
import org.apache.commons.lang3.tuple.Pair;
import javax.vecmath.Matrix4f;
public class BakedModelPattern extends BakedModelDelegate {
public BakedModelPattern(IBakedModel base) {
super(base);
}
@Override
public Pair<? extends IBakedModel, Matrix4f> handlePerspective(ItemCameraTransforms.TransformType cameraTransformType) {
TRSRTransformation transform = RenderUtils.getDefaultItemTransforms().get(cameraTransformType);
return Pair.of(this, transform == null ? RenderUtils.EMPTY_MATRIX_TRANSFORM : transform.getMatrix());
}
@Override
public ItemOverrideList getOverrides() {
return new ItemOverrideList(base.getOverrides().getOverrides()) {
@Override
public IBakedModel handleItemState(IBakedModel originalModel, ItemStack stack, World world, EntityLivingBase entity) {
CraftingPattern pattern = ItemPattern.getPatternFromCache(world, stack);
if (canDisplayOutput(stack, pattern)) {
ItemStack outputToRender = pattern.getOutputs().get(0);
// @Volatile: Gregtech banned for rendering due to issues
if (!hasBrokenRendering(outputToRender)) {
return Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(outputToRender, world, entity);
}
}
return super.handleItemState(originalModel, stack, world, entity);
}
};
}
private boolean hasBrokenRendering(ItemStack stack) {
if ("gregtech".equals(stack.getItem().getCreatorModId(stack))) {
if ("tile.pipe".equals(stack.getTranslationKey())) {
return true;
}
if ("machine".equals(stack.getItem().delegate.name().getPath())) {
return true;
}
}
return false;
}
public static boolean canDisplayOutput(ItemStack patternStack, CraftingPattern pattern) {
if (pattern.isValid() && pattern.getOutputs().size() == 1) {
for (ICraftingPatternRenderHandler renderHandler : API.instance().getPatternRenderHandlers()) {
if (renderHandler.canRenderOutput(patternStack)) {
return true;
}
}
}
return false;
}
}
*/

View File

@@ -0,0 +1,60 @@
package com.raoulvdberge.refinedstorage.render.model.baked;
import com.google.common.collect.ImmutableList;
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternRenderHandler;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.CraftingPattern;
import com.raoulvdberge.refinedstorage.item.PatternItem;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.ItemOverride;
import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.entity.LivingEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import javax.annotation.Nullable;
public class PatternBakedModel extends DelegateBakedModel {
public PatternBakedModel(IBakedModel base) {
super(base);
}
@Override
public ItemOverrideList getOverrides() {
return new ItemOverrideList() {
@Nullable
@Override
public IBakedModel getModelWithOverrides(IBakedModel model, ItemStack stack, @Nullable World world, @Nullable LivingEntity entity) {
if (entity != null) {
CraftingPattern pattern = PatternItem.fromCache(entity.world, stack);
if (canDisplayOutput(stack, pattern)) {
ItemStack outputToRender = pattern.getOutputs().get(0);
return Minecraft.getInstance().getItemRenderer().getItemModelWithOverrides(outputToRender, world, entity);
}
}
return super.getModelWithOverrides(model, stack, world, entity);
}
@Override
public ImmutableList<ItemOverride> getOverrides() {
return base.getOverrides().getOverrides();
}
};
}
public static boolean canDisplayOutput(ItemStack patternStack, CraftingPattern pattern) {
if (pattern.isValid() && pattern.getOutputs().size() == 1) {
for (ICraftingPatternRenderHandler renderHandler : API.instance().getPatternRenderHandlers()) {
if (renderHandler.canRenderOutput(patternStack)) {
return true;
}
}
}
return false;
}
}

View File

@@ -1,6 +1,5 @@
package com.raoulvdberge.refinedstorage.util;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.mojang.blaze3d.platform.GlStateManager;
import com.raoulvdberge.refinedstorage.api.util.IComparer;
@@ -11,7 +10,6 @@ import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.model.BakedQuad;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.ItemCameraTransforms;
import net.minecraft.client.renderer.texture.MissingTextureSprite;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
@@ -30,27 +28,16 @@ import net.minecraftforge.client.MinecraftForgeClient;
import net.minecraftforge.client.event.RenderTooltipEvent;
import net.minecraftforge.common.ForgeMod;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.model.TRSRTransformation;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fml.client.config.GuiUtils;
import javax.annotation.Nonnull;
import javax.vecmath.Matrix4f;
import javax.vecmath.Vector3f;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
public final class RenderUtils {
public static final Matrix4f EMPTY_MATRIX_TRANSFORM = getTransform(0, 0, 0, 0, 0, 0, 1.0f).getMatrix(Direction.DOWN); // TODO: dir?
// @Volatile: From ForgeBlockStateV1
private static final TRSRTransformation FLIP_X = new TRSRTransformation(null, null, new Vector3f(-1, 1, 1), null);
private static ImmutableMap<ItemCameraTransforms.TransformType, TRSRTransformation> DEFAULT_ITEM_TRANSFORM;
private static ImmutableMap<ItemCameraTransforms.TransformType, TRSRTransformation> DEFAULT_BLOCK_TRANSFORM;
private static final VertexFormat ITEM_FORMAT_WITH_LIGHTMAP = new VertexFormat(DefaultVertexFormats.ITEM).addElement(DefaultVertexFormats.TEX_2S);
public static String shorten(String text, int length) {
@@ -60,52 +47,6 @@ public final class RenderUtils {
return text;
}
private static TRSRTransformation leftifyTransform(TRSRTransformation transform) {
return TRSRTransformation.blockCenterToCorner(FLIP_X.compose(TRSRTransformation.blockCornerToCenter(transform)).compose(FLIP_X));
}
private static TRSRTransformation getTransform(float tx, float ty, float tz, float ax, float ay, float az, float s) {
return new TRSRTransformation(
new Vector3f(tx / 16, ty / 16, tz / 16),
TRSRTransformation.quatFromXYZDegrees(new Vector3f(ax, ay, az)),
new Vector3f(s, s, s),
null
);
}
public static ImmutableMap<ItemCameraTransforms.TransformType, TRSRTransformation> getDefaultItemTransforms() {
if (DEFAULT_ITEM_TRANSFORM != null) {
return DEFAULT_ITEM_TRANSFORM;
}
return DEFAULT_ITEM_TRANSFORM = ImmutableMap.<ItemCameraTransforms.TransformType, TRSRTransformation>builder()
.put(ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND, getTransform(0, 3, 1, 0, 0, 0, 0.55f))
.put(ItemCameraTransforms.TransformType.THIRD_PERSON_LEFT_HAND, getTransform(0, 3, 1, 0, 0, 0, 0.55f))
.put(ItemCameraTransforms.TransformType.FIRST_PERSON_RIGHT_HAND, getTransform(1.13f, 3.2f, 1.13f, 0, -90, 25, 0.68f))
.put(ItemCameraTransforms.TransformType.FIRST_PERSON_LEFT_HAND, getTransform(1.13f, 3.2f, 1.13f, 0, 90, -25, 0.68f))
.put(ItemCameraTransforms.TransformType.GROUND, getTransform(0, 2, 0, 0, 0, 0, 0.5f))
.put(ItemCameraTransforms.TransformType.HEAD, getTransform(0, 13, 7, 0, 180, 0, 1))
.build();
}
public static ImmutableMap<ItemCameraTransforms.TransformType, TRSRTransformation> getDefaultBlockTransforms() {
if (DEFAULT_BLOCK_TRANSFORM != null) {
return DEFAULT_BLOCK_TRANSFORM;
}
TRSRTransformation thirdperson = getTransform(0, 2.5f, 0, 75, 45, 0, 0.375f);
return DEFAULT_BLOCK_TRANSFORM = ImmutableMap.<ItemCameraTransforms.TransformType, TRSRTransformation>builder()
.put(ItemCameraTransforms.TransformType.GUI, getTransform(0, 0, 0, 30, 225, 0, 0.625f))
.put(ItemCameraTransforms.TransformType.GROUND, getTransform(0, 3, 0, 0, 0, 0, 0.25f))
.put(ItemCameraTransforms.TransformType.FIXED, getTransform(0, 0, 0, 0, 0, 0, 0.5f))
.put(ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND, thirdperson)
.put(ItemCameraTransforms.TransformType.THIRD_PERSON_LEFT_HAND, leftifyTransform(thirdperson))
.put(ItemCameraTransforms.TransformType.FIRST_PERSON_RIGHT_HAND, getTransform(0, 0, 0, 0, 45, 0, 0.4f))
.put(ItemCameraTransforms.TransformType.FIRST_PERSON_LEFT_HAND, getTransform(0, 0, 0, 0, 225, 0, 0.4f))
.build();
}
public static int getOffsetOnScale(int pos, float scale) {
float multiplier = (pos / scale);
@@ -334,7 +275,7 @@ public final class RenderUtils {
return format;
}
public static TextureAtlasSprite getSprite(IBakedModel coverModel, BlockState coverState, Direction facing, long rand) {
public static TextureAtlasSprite getSprite(IBakedModel coverModel, BlockState coverState, Direction facing, Random rand) {
TextureAtlasSprite sprite = null;
BlockRenderLayer originalLayer = MinecraftForgeClient.getRenderLayer();
@@ -343,11 +284,11 @@ public final class RenderUtils {
for (BlockRenderLayer layer : BlockRenderLayer.values()) {
ForgeHooksClient.setRenderLayer(layer);
for (BakedQuad bakedQuad : coverModel.getQuads(coverState, facing, new Random())) {
for (BakedQuad bakedQuad : coverModel.getQuads(coverState, facing, rand)) {
return bakedQuad.getSprite();
}
for (BakedQuad bakedQuad : coverModel.getQuads(coverState, null, new Random())) { // TODO random inst
for (BakedQuad bakedQuad : coverModel.getQuads(coverState, null, rand)) {
if (sprite == null) {
sprite = bakedQuad.getSprite();
}
@@ -372,7 +313,7 @@ public final class RenderUtils {
}
if (sprite == null) {
sprite = MissingTextureSprite.func_217790_a(); // TODO Mapping
sprite = MissingTextureSprite.func_217790_a();
}
return sprite;