Re-add Pattern rendering
This commit is contained in:
@@ -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
|
||||
|
@@ -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());
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
*/
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user