diff --git a/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java new file mode 100644 index 000000000..278413502 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java @@ -0,0 +1,53 @@ +package com.raoulvdberge.refinedstorage; + +import com.raoulvdberge.refinedstorage.render.BakedModelOverrideRegistry; +import com.raoulvdberge.refinedstorage.render.model.baked.FullbrightBakedModel; +import com.raoulvdberge.refinedstorage.screen.FilterScreen; +import net.minecraft.client.gui.ScreenManager; +import net.minecraft.client.renderer.model.IBakedModel; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.event.ModelBakeEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +import java.util.function.Function; + +public class ClientSetup { + private BakedModelOverrideRegistry bakedModelOverrideRegistry = new BakedModelOverrideRegistry(); + + public ClientSetup() { + bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "controller"), base -> new FullbrightBakedModel( + base, + new ResourceLocation(RS.ID, "block/controller/cutouts/nearly_off"), + new ResourceLocation(RS.ID, "block/controller/cutouts/nearly_on"), + new ResourceLocation(RS.ID, "block/controller/cutouts/on") + )); + + bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "creative_controller"), base -> new FullbrightBakedModel( + base, + new ResourceLocation(RS.ID, "block/controller/cutouts/nearly_off"), + new ResourceLocation(RS.ID, "block/controller/cutouts/nearly_on"), + new ResourceLocation(RS.ID, "block/controller/cutouts/on") + )); + + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onClientSetup); + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onModelBake); + } + + @SubscribeEvent + public void onClientSetup(FMLClientSetupEvent e) { + ScreenManager.registerFactory(RSContainers.FILTER, FilterScreen::new); + } + + @SubscribeEvent + public void onModelBake(ModelBakeEvent e) { + for (ResourceLocation id : e.getModelRegistry().keySet()) { + Function factory = this.bakedModelOverrideRegistry.get(new ResourceLocation(id.getNamespace(), id.getPath())); + + if (factory != null) { + e.getModelRegistry().put(id, factory.apply(e.getModelRegistry().get(id))); + } + } + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RS.java b/src/main/java/com/raoulvdberge/refinedstorage/RS.java index 6de4a69b6..93492ed4d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RS.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RS.java @@ -14,21 +14,20 @@ import com.raoulvdberge.refinedstorage.item.blockitem.ControllerBlockItem; import com.raoulvdberge.refinedstorage.item.group.MainItemGroup; import com.raoulvdberge.refinedstorage.network.NetworkHandler; import com.raoulvdberge.refinedstorage.recipe.UpgradeWithEnchantedBookRecipeSerializer; -import com.raoulvdberge.refinedstorage.screen.FilterScreen; import com.raoulvdberge.refinedstorage.tile.ControllerTile; import com.raoulvdberge.refinedstorage.util.BlockUtils; import net.minecraft.block.Block; -import net.minecraft.client.gui.ScreenManager; import net.minecraft.inventory.container.ContainerType; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.item.crafting.IRecipeSerializer; import net.minecraft.tileentity.TileEntityType; +import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.common.extensions.IForgeContainerType; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; @@ -44,8 +43,9 @@ public final class RS { public static final Config CONFIG = new Config(); public RS() { + DistExecutor.runWhenOn(Dist.CLIENT, () -> ClientSetup::new); + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onCommonSetup); - FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onClientSetup); FMLJavaModLoadingContext.get().getModEventBus().addGenericListener(Block.class, this::onRegisterBlocks); FMLJavaModLoadingContext.get().getModEventBus().addGenericListener(TileEntityType.class, this::onRegisterTiles); FMLJavaModLoadingContext.get().getModEventBus().addGenericListener(Item.class, this::onRegisterItems); @@ -61,11 +61,6 @@ public final class RS { API.instance().getStorageDiskRegistry().add(StorageDiskFactoryFluid.ID, new StorageDiskFactoryFluid()); } - @SubscribeEvent - public void onClientSetup(FMLClientSetupEvent e) { - ScreenManager.registerFactory(RSContainers.FILTER, FilterScreen::new); - } - @SubscribeEvent public void onRegisterRecipeSerializers(RegistryEvent.Register> e) { e.getRegistry().register(new UpgradeWithEnchantedBookRecipeSerializer().setRegistryName(RS.ID, "upgrade_with_enchanted_book")); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCrafter.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCrafter.java index 3037b1755..8b5072962 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCrafter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCrafter.java @@ -4,7 +4,7 @@ import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.block.info.BlockDirection; import com.raoulvdberge.refinedstorage.block.info.BlockInfoBuilder; import com.raoulvdberge.refinedstorage.render.IModelRegistration; -import com.raoulvdberge.refinedstorage.render.model.baked.BakedModelFullbright; +import com.raoulvdberge.refinedstorage.render.model.baked.FullbrightBakedModel; import com.raoulvdberge.refinedstorage.tile.TileCrafter; import net.minecraft.client.renderer.model.ModelResourceLocation; import net.minecraft.util.BlockRenderLayer; @@ -24,7 +24,7 @@ public class BlockCrafter extends BlockNode { public void registerModels(IModelRegistration modelRegistration) { modelRegistration.setModel(this, 0, new ModelResourceLocation(info.getId(), "connected=false,direction=north")); - modelRegistration.addBakedModelOverride(info.getId(), base -> new BakedModelFullbright( + modelRegistration.addBakedModelOverride(info.getId(), base -> new FullbrightBakedModel( base, new ResourceLocation(RS.ID, "blocks/crafter/cutouts/side_connected"), new ResourceLocation(RS.ID, "blocks/crafter/cutouts/side_connected_90"), diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/ControllerBlock.java b/src/main/java/com/raoulvdberge/refinedstorage/block/ControllerBlock.java index 6db24255d..f4065b3a2 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/ControllerBlock.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/ControllerBlock.java @@ -19,8 +19,6 @@ import net.minecraftforge.energy.CapabilityEnergy; import javax.annotation.Nullable; -// TODO - Fullbright models -// TODO DROPS public class ControllerBlock extends Block { public enum Type { NORMAL, @@ -104,7 +102,7 @@ public class ControllerBlock extends Block { } } - /* + /* TODO Controller @Override public boolean onBlockActivated(World world, BlockPos pos, BlockState state, PlayerEntity player, EnumHand hand, Direction side, float hitX, float hitY, float hitZ) { return openNetworkGui(RSGui.CONTROLLER, player, world, pos, side); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelOverrideRegistry.java b/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelOverrideRegistry.java new file mode 100644 index 000000000..886ebf8fd --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelOverrideRegistry.java @@ -0,0 +1,22 @@ +package com.raoulvdberge.refinedstorage.render; + +import net.minecraft.client.renderer.model.IBakedModel; +import net.minecraft.util.ResourceLocation; + +import javax.annotation.Nullable; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +public class BakedModelOverrideRegistry { + private Map> registry = new HashMap<>(); + + public void add(ResourceLocation id, Function factory) { + registry.put(id, factory); + } + + @Nullable + public Function get(ResourceLocation id) { + return registry.get(id); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/BakedModelDelegate.java b/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/DelegateBakedModel.java similarity index 88% rename from src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/BakedModelDelegate.java rename to src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/DelegateBakedModel.java index 01ab3a6b9..5cec0e00e 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/BakedModelDelegate.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/DelegateBakedModel.java @@ -14,14 +14,15 @@ import javax.vecmath.Matrix4f; import java.util.List; import java.util.Random; -public class BakedModelDelegate implements IBakedModel { +public class DelegateBakedModel implements IBakedModel { protected final IBakedModel base; - public BakedModelDelegate(IBakedModel base) { + public DelegateBakedModel(IBakedModel base) { this.base = base; } @Override + @SuppressWarnings("deprecation") public List getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand) { return base.getQuads(state, side, rand); } @@ -31,11 +32,6 @@ public class BakedModelDelegate implements IBakedModel { return base.isAmbientOcclusion(); } - @Override - public boolean isAmbientOcclusion(BlockState state) { - return base.isAmbientOcclusion(state); - } - @Override public boolean isGui3d() { return base.isGui3d(); @@ -47,6 +43,7 @@ public class BakedModelDelegate implements IBakedModel { } @Override + @SuppressWarnings("deprecation") public TextureAtlasSprite getParticleTexture() { return base.getParticleTexture(); } @@ -63,6 +60,7 @@ public class BakedModelDelegate implements IBakedModel { } @Override + @SuppressWarnings("deprecation") public Pair handlePerspective(ItemCameraTransforms.TransformType cameraTransformType) { return base.handlePerspective(cameraTransformType); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/BakedModelFullbright.java b/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/FullbrightBakedModel.java similarity index 85% rename from src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/BakedModelFullbright.java rename to src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/FullbrightBakedModel.java index d3796ee46..b86344949 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/BakedModelFullbright.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/FullbrightBakedModel.java @@ -11,88 +11,48 @@ import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.vertex.VertexFormat; import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.data.EmptyModelData; +import net.minecraftforge.client.model.data.IModelData; import net.minecraftforge.client.model.pipeline.UnpackedBakedQuad; import net.minecraftforge.client.model.pipeline.VertexLighterFlat; import javax.annotation.Nullable; import java.util.*; -public class BakedModelFullbright extends BakedModelDelegate { - private class CacheKey { - private IBakedModel base; - private Set textures; - private BlockState state; - private Direction side; - - public CacheKey(IBakedModel base, Set textures, BlockState state, Direction side) { - this.base = base; - this.textures = textures; - this.state = state; - this.side = side; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - if (o == null || getClass() != o.getClass()) { - return false; - } - - CacheKey cacheKey = (CacheKey) o; - - if (cacheKey.side != side) { - return false; - } - - if (!state.equals(cacheKey.state)) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - return state.hashCode() + (31 * (side != null ? side.hashCode() : 0)); - } - } - +public class FullbrightBakedModel extends DelegateBakedModel { private static final LoadingCache> CACHE = CacheBuilder.newBuilder().build(new CacheLoader>() { @Override public List load(CacheKey key) { - return transformQuads(key.base.getQuads(key.state, key.side, new Random()), key.textures); + return transformQuads(key.base.getQuads(key.state, key.side, key.random, EmptyModelData.INSTANCE), key.textures); } }); private Set textures; private boolean cacheDisabled = false; - public BakedModelFullbright(IBakedModel base, ResourceLocation... textures) { + public FullbrightBakedModel(IBakedModel base, ResourceLocation... textures) { super(base); this.textures = new HashSet<>(Arrays.asList(textures)); } - public BakedModelFullbright setCacheDisabled() { + public FullbrightBakedModel disableCache() { this.cacheDisabled = true; return this; } @Override - public List getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand) { + public List getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand, IModelData data) { if (state == null) { - return base.getQuads(state, side, rand); + return base.getQuads(state, side, rand, data); } if (cacheDisabled) { - return transformQuads(base.getQuads(state, side, rand), textures); + return transformQuads(base.getQuads(state, side, rand, data), textures); } - return CACHE.getUnchecked(new CacheKey(base, textures, state, side)); + return CACHE.getUnchecked(new CacheKey(base, textures, rand, state, side)); } private static List transformQuads(List oldQuads, Set textures) { @@ -142,4 +102,48 @@ public class BakedModelFullbright extends BakedModelDelegate { return builder.build(); } + + private class CacheKey { + private IBakedModel base; + private Set textures; + private Random random; + private BlockState state; + private Direction side; + + public CacheKey(IBakedModel base, Set textures, Random random, BlockState state, Direction side) { + this.base = base; + this.textures = textures; + this.random = random; + this.state = state; + this.side = side; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + + if (o == null || getClass() != o.getClass()) { + return false; + } + + CacheKey cacheKey = (CacheKey) o; + + if (cacheKey.side != side) { + return false; + } + + if (!state.equals(cacheKey.state)) { + return false; + } + + return true; + } + + @Override + public int hashCode() { + return state.hashCode() + (31 * (side != null ? side.hashCode() : 0)); + } + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java index a7c91a8ad..19adeabf0 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java @@ -28,6 +28,7 @@ import net.minecraft.util.text.TextFormatting; import net.minecraftforge.client.ForgeHooksClient; 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; @@ -311,8 +312,7 @@ public final class RenderUtils { } public static boolean isLightMapDisabled() { - return false; - // TODO return FMLClientHandler.instance().hasOptifine() || !ForgeModContainer.forgeLightPipelineEnabled; + return !ForgeMod.forgeLightPipelineEnabled; } public static VertexFormat getFormatWithLightMap(VertexFormat format) {