diff --git a/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java index 0cefcbf83..4885d115b 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java @@ -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 diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index 7f099733b..b4f140c0d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -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()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/BakedModelPattern.java b/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/BakedModelPattern.java deleted file mode 100644 index 6d7fc8547..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/BakedModelPattern.java +++ /dev/null @@ -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 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; - } -} -*/ \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/PatternBakedModel.java b/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/PatternBakedModel.java new file mode 100644 index 000000000..a63d11053 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/PatternBakedModel.java @@ -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 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; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java index e1263ba0e..c9386afdd 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java @@ -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 DEFAULT_ITEM_TRANSFORM; - private static ImmutableMap 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 getDefaultItemTransforms() { - if (DEFAULT_ITEM_TRANSFORM != null) { - return DEFAULT_ITEM_TRANSFORM; - } - - return DEFAULT_ITEM_TRANSFORM = ImmutableMap.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 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.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;