Ported model dependency changes from Fabric 1.16.

Made IChestLid sided.
This commit is contained in:
Sebastian Hartte
2020-07-30 22:08:19 +02:00
parent a628a469ce
commit 98e9faa262
17 changed files with 152 additions and 149 deletions
@@ -1,26 +1,24 @@
package appeng.block.qnb; package appeng.block.qnb;
import java.util.Collection; import java.util.Collection;
import java.util.Set;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Stream;
import com.mojang.datafixers.util.Pair; import com.google.common.collect.ImmutableSet;
import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.IModelTransform; import net.minecraft.client.renderer.model.IModelTransform;
import net.minecraft.client.renderer.model.IUnbakedModel;
import net.minecraft.client.renderer.model.ItemOverrideList; import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.model.ModelBakery; import net.minecraft.client.renderer.model.ModelBakery;
import net.minecraft.client.renderer.model.RenderMaterial; import net.minecraft.client.renderer.model.RenderMaterial;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.IModelConfiguration; import net.minecraftforge.client.model.IModelConfiguration;
import net.minecraftforge.client.model.geometry.IModelGeometry;
import appeng.client.render.BasicUnbakedModel;
import appeng.core.AppEng; import appeng.core.AppEng;
public class QnbFormedModel implements IModelGeometry<QnbFormedModel> { public class QnbFormedModel implements BasicUnbakedModel<QnbFormedModel> {
private static final ResourceLocation MODEL_RING = new ResourceLocation(AppEng.MOD_ID, "block/qnb/ring"); private static final ResourceLocation MODEL_RING = new ResourceLocation(AppEng.MOD_ID, "block/qnb/ring");
@@ -33,9 +31,13 @@ public class QnbFormedModel implements IModelGeometry<QnbFormedModel> {
} }
@Override @Override
public Collection<RenderMaterial> getTextures(IModelConfiguration owner, public Collection<ResourceLocation> getModelDependencies() {
Function<ResourceLocation, IUnbakedModel> modelGetter, Set<Pair<String, String>> missingTextureErrors) { return ImmutableSet.of(MODEL_RING);
return QnbFormedBakedModel.getRequiredTextures(); }
@Override
public Stream<RenderMaterial> getAdditionalTextures() {
return QnbFormedBakedModel.getRequiredTextures().stream();
} }
} }
@@ -0,0 +1,42 @@
package appeng.client.render;
import java.util.Collection;
import java.util.Collections;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import com.mojang.datafixers.util.Pair;
import net.minecraft.client.renderer.model.IUnbakedModel;
import net.minecraft.client.renderer.model.RenderMaterial;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.IModelConfiguration;
import net.minecraftforge.client.model.geometry.IModelGeometry;
/**
* An unbaked model that has standard models as a dependency and produces a
* custom baked model as a result.
*/
public interface BasicUnbakedModel<T extends IModelGeometry<T>> extends IModelGeometry<T> {
default Collection<ResourceLocation> getModelDependencies() {
return Collections.emptyList();
}
default Stream<RenderMaterial> getAdditionalTextures() {
return Stream.empty();
}
@Override
default Collection<RenderMaterial> getTextures(IModelConfiguration owner,
Function<ResourceLocation, IUnbakedModel> unbakedModelGetter,
Set<Pair<String, String>> unresolvedTextureReferences) {
return Stream.concat(
getModelDependencies().stream().map(unbakedModelGetter)
.flatMap(ubm -> ubm.getTextures(unbakedModelGetter, unresolvedTextureReferences).stream()),
getAdditionalTextures()).collect(Collectors.toList());
}
}
@@ -19,21 +19,17 @@
package appeng.client.render; package appeng.client.render;
import java.util.Collection; import java.util.Collection;
import java.util.Set; import java.util.Collections;
import java.util.function.Function; import java.util.function.Function;
import com.mojang.datafixers.util.Pair;
import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.IModelTransform; import net.minecraft.client.renderer.model.IModelTransform;
import net.minecraft.client.renderer.model.IUnbakedModel;
import net.minecraft.client.renderer.model.ItemOverrideList; import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.model.ModelBakery; import net.minecraft.client.renderer.model.ModelBakery;
import net.minecraft.client.renderer.model.RenderMaterial; import net.minecraft.client.renderer.model.RenderMaterial;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.IModelConfiguration; import net.minecraftforge.client.model.IModelConfiguration;
import net.minecraftforge.client.model.geometry.IModelGeometry;
import appeng.client.render.cablebus.FacadeBuilder; import appeng.client.render.cablebus.FacadeBuilder;
import appeng.core.AppEng; import appeng.core.AppEng;
@@ -42,7 +38,7 @@ import appeng.core.AppEng;
* The model class for facades. Since facades wrap existing models, they don't * The model class for facades. Since facades wrap existing models, they don't
* declare any dependencies here other than the cable anchor. * declare any dependencies here other than the cable anchor.
*/ */
public class FacadeItemModel implements IModelGeometry<FacadeItemModel> { public class FacadeItemModel implements BasicUnbakedModel<FacadeItemModel> {
// We use this to get the default item transforms and make our lives easier // We use this to get the default item transforms and make our lives easier
private static final ResourceLocation MODEL_BASE = new ResourceLocation(AppEng.MOD_ID, "item/facade_base"); private static final ResourceLocation MODEL_BASE = new ResourceLocation(AppEng.MOD_ID, "item/facade_base");
@@ -58,9 +54,7 @@ public class FacadeItemModel implements IModelGeometry<FacadeItemModel> {
} }
@Override @Override
public Collection<RenderMaterial> getTextures(IModelConfiguration owner, public Collection<ResourceLocation> getModelDependencies() {
Function<ResourceLocation, IUnbakedModel> modelGetter, Set<Pair<String, String>> missingTextureErrors) { return Collections.singleton(MODEL_BASE);
return modelGetter.apply(MODEL_BASE).getTextures(modelGetter, missingTextureErrors);
} }
} }
@@ -19,33 +19,30 @@
package appeng.client.render.cablebus; package appeng.client.render.cablebus;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Stream;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.mojang.datafixers.util.Pair;
import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.IModelTransform; import net.minecraft.client.renderer.model.IModelTransform;
import net.minecraft.client.renderer.model.IUnbakedModel;
import net.minecraft.client.renderer.model.ItemOverrideList; import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.model.ModelBakery; import net.minecraft.client.renderer.model.ModelBakery;
import net.minecraft.client.renderer.model.RenderMaterial; import net.minecraft.client.renderer.model.RenderMaterial;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.IModelConfiguration; import net.minecraftforge.client.model.IModelConfiguration;
import net.minecraftforge.client.model.geometry.IModelGeometry;
import appeng.api.util.AEColor; import appeng.api.util.AEColor;
import appeng.client.render.BasicUnbakedModel;
import appeng.core.AELog; import appeng.core.AELog;
import appeng.core.features.registries.PartModels; import appeng.core.features.registries.PartModels;
/** /**
* The built-in model for the cable bus block. * The built-in model for the cable bus block.
*/ */
public class CableBusModel implements IModelGeometry<CableBusModel> { public class CableBusModel implements BasicUnbakedModel<CableBusModel> {
private final PartModels partModels; private final PartModels partModels;
@@ -53,6 +50,17 @@ public class CableBusModel implements IModelGeometry<CableBusModel> {
this.partModels = partModels; this.partModels = partModels;
} }
@Override
public Collection<ResourceLocation> getModelDependencies() {
partModels.setInitialized(true);
return partModels.getModels();
}
@Override
public Stream<RenderMaterial> getAdditionalTextures() {
return CableBuilder.getTextures().stream();
}
@Override @Override
public IBakedModel bake(IModelConfiguration owner, ModelBakery bakery, public IBakedModel bake(IModelConfiguration owner, ModelBakery bakery,
Function<RenderMaterial, TextureAtlasSprite> spriteGetter, IModelTransform modelTransform, Function<RenderMaterial, TextureAtlasSprite> spriteGetter, IModelTransform modelTransform,
@@ -70,12 +78,6 @@ public class CableBusModel implements IModelGeometry<CableBusModel> {
return new CableBusBakedModel(cableBuilder, facadeBuilder, partModels, particleTexture); return new CableBusBakedModel(cableBuilder, facadeBuilder, partModels, particleTexture);
} }
@Override
public Collection<RenderMaterial> getTextures(IModelConfiguration owner,
Function<ResourceLocation, IUnbakedModel> modelGetter, Set<Pair<String, String>> missingTextureErrors) {
return Collections.unmodifiableList(CableBuilder.getTextures());
}
private Map<ResourceLocation, IBakedModel> loadPartModels(ModelBakery bakery, private Map<ResourceLocation, IBakedModel> loadPartModels(ModelBakery bakery,
Function<RenderMaterial, TextureAtlasSprite> spriteGetterIn, IModelTransform transformIn) { Function<RenderMaterial, TextureAtlasSprite> spriteGetterIn, IModelTransform transformIn) {
ImmutableMap.Builder<ResourceLocation, IBakedModel> result = ImmutableMap.builder(); ImmutableMap.Builder<ResourceLocation, IBakedModel> result = ImmutableMap.builder();
@@ -1,15 +1,10 @@
package appeng.client.render.cablebus; package appeng.client.render.cablebus;
import java.util.Collection;
import java.util.Collections;
import java.util.Set;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Stream;
import com.mojang.datafixers.util.Pair;
import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.IModelTransform; import net.minecraft.client.renderer.model.IModelTransform;
import net.minecraft.client.renderer.model.IUnbakedModel;
import net.minecraft.client.renderer.model.ItemOverrideList; import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.model.ModelBakery; import net.minecraft.client.renderer.model.ModelBakery;
import net.minecraft.client.renderer.model.RenderMaterial; import net.minecraft.client.renderer.model.RenderMaterial;
@@ -17,11 +12,11 @@ import net.minecraft.client.renderer.texture.AtlasTexture;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.IModelConfiguration; import net.minecraftforge.client.model.IModelConfiguration;
import net.minecraftforge.client.model.geometry.IModelGeometry;
import appeng.client.render.BasicUnbakedModel;
import appeng.core.AppEng; import appeng.core.AppEng;
public class P2PTunnelFrequencyModel implements IModelGeometry<P2PTunnelFrequencyModel> { public class P2PTunnelFrequencyModel implements BasicUnbakedModel<P2PTunnelFrequencyModel> {
private static final RenderMaterial TEXTURE = new RenderMaterial(AtlasTexture.LOCATION_BLOCKS_TEXTURE, private static final RenderMaterial TEXTURE = new RenderMaterial(AtlasTexture.LOCATION_BLOCKS_TEXTURE,
new ResourceLocation(AppEng.MOD_ID, "part/p2p_tunnel_frequency")); new ResourceLocation(AppEng.MOD_ID, "part/p2p_tunnel_frequency"));
@@ -38,9 +33,8 @@ public class P2PTunnelFrequencyModel implements IModelGeometry<P2PTunnelFrequenc
} }
@Override @Override
public Collection<RenderMaterial> getTextures(IModelConfiguration owner, public Stream<RenderMaterial> getAdditionalTextures() {
Function<ResourceLocation, IUnbakedModel> modelGetter, Set<Pair<String, String>> missingTextureErrors) { return Stream.of(TEXTURE);
return Collections.singleton(TEXTURE);
} }
} }
@@ -18,16 +18,11 @@
package appeng.client.render.crafting; package appeng.client.render.crafting;
import java.util.Collection;
import java.util.Set;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Stream;
import com.google.common.collect.ImmutableList;
import com.mojang.datafixers.util.Pair;
import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.IModelTransform; import net.minecraft.client.renderer.model.IModelTransform;
import net.minecraft.client.renderer.model.IUnbakedModel;
import net.minecraft.client.renderer.model.ItemOverrideList; import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.model.ModelBakery; import net.minecraft.client.renderer.model.ModelBakery;
import net.minecraft.client.renderer.model.RenderMaterial; import net.minecraft.client.renderer.model.RenderMaterial;
@@ -35,15 +30,15 @@ import net.minecraft.client.renderer.texture.AtlasTexture;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.IModelConfiguration; import net.minecraftforge.client.model.IModelConfiguration;
import net.minecraftforge.client.model.geometry.IModelGeometry;
import appeng.block.crafting.AbstractCraftingUnitBlock; import appeng.block.crafting.AbstractCraftingUnitBlock;
import appeng.client.render.BasicUnbakedModel;
import appeng.core.AppEng; import appeng.core.AppEng;
/** /**
* The built-in model for the connected texture crafting cube. * The built-in model for the connected texture crafting cube.
*/ */
class CraftingCubeModel implements IModelGeometry<CraftingCubeModel> { class CraftingCubeModel implements BasicUnbakedModel<CraftingCubeModel> {
private final static RenderMaterial RING_CORNER = texture("ring_corner"); private final static RenderMaterial RING_CORNER = texture("ring_corner");
private final static RenderMaterial RING_SIDE_HOR = texture("ring_side_hor"); private final static RenderMaterial RING_SIDE_HOR = texture("ring_side_hor");
@@ -67,9 +62,8 @@ class CraftingCubeModel implements IModelGeometry<CraftingCubeModel> {
} }
@Override @Override
public Collection<RenderMaterial> getTextures(IModelConfiguration owner, public Stream<RenderMaterial> getAdditionalTextures() {
Function<ResourceLocation, IUnbakedModel> modelGetter, Set<Pair<String, String>> missingTextureErrors) { return Stream.of(RING_CORNER, RING_SIDE_HOR, RING_SIDE_VER, UNIT_BASE, LIGHT_BASE, ACCELERATOR_LIGHT,
return ImmutableList.of(RING_CORNER, RING_SIDE_HOR, RING_SIDE_VER, UNIT_BASE, LIGHT_BASE, ACCELERATOR_LIGHT,
STORAGE_1K_LIGHT, STORAGE_4K_LIGHT, STORAGE_16K_LIGHT, STORAGE_64K_LIGHT, MONITOR_BASE, STORAGE_1K_LIGHT, STORAGE_4K_LIGHT, STORAGE_16K_LIGHT, STORAGE_64K_LIGHT, MONITOR_BASE,
MONITOR_LIGHT_DARK, MONITOR_LIGHT_MEDIUM, MONITOR_LIGHT_BRIGHT); MONITOR_LIGHT_DARK, MONITOR_LIGHT_MEDIUM, MONITOR_LIGHT_BRIGHT);
} }
@@ -2,16 +2,13 @@ package appeng.client.render.model;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Set;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Stream;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.mojang.datafixers.util.Pair;
import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.IModelTransform; import net.minecraft.client.renderer.model.IModelTransform;
import net.minecraft.client.renderer.model.IUnbakedModel;
import net.minecraft.client.renderer.model.ItemOverrideList; import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.model.ModelBakery; import net.minecraft.client.renderer.model.ModelBakery;
import net.minecraft.client.renderer.model.RenderMaterial; import net.minecraft.client.renderer.model.RenderMaterial;
@@ -19,24 +16,28 @@ import net.minecraft.client.renderer.texture.AtlasTexture;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.IModelConfiguration; import net.minecraftforge.client.model.IModelConfiguration;
import net.minecraftforge.client.model.geometry.IModelGeometry;
import appeng.client.render.BasicUnbakedModel;
import appeng.core.AppEng; import appeng.core.AppEng;
/** /**
* Model wrapper for the biometric card item model, which combines a base card * Model wrapper for the biometric card item model, which combines a base card
* layer with a "visual hash" of the player name * layer with a "visual hash" of the player name
*/ */
public class BiometricCardModel implements IModelGeometry<BiometricCardModel> { public class BiometricCardModel implements BasicUnbakedModel<BiometricCardModel> {
public static final ResourceLocation MODEL_BASE = new ResourceLocation(AppEng.MOD_ID, "item/biometric_card_base"); private static final ResourceLocation MODEL_BASE = new ResourceLocation(AppEng.MOD_ID, "item/biometric_card_base");
private static final RenderMaterial TEXTURE = new RenderMaterial(AtlasTexture.LOCATION_BLOCKS_TEXTURE, private static final RenderMaterial TEXTURE = new RenderMaterial(AtlasTexture.LOCATION_BLOCKS_TEXTURE,
new ResourceLocation(AppEng.MOD_ID, "item/biometric_card_hash")); new ResourceLocation(AppEng.MOD_ID, "item/biometric_card_hash"));
@Override @Override
public Collection<RenderMaterial> getTextures(IModelConfiguration owner, public Collection<ResourceLocation> getModelDependencies() {
Function<ResourceLocation, IUnbakedModel> modelGetter, Set<Pair<String, String>> missingTextureErrors) { return Collections.singleton(MODEL_BASE);
return Collections.singleton(TEXTURE); }
@Override
public Stream<RenderMaterial> getAdditionalTextures() {
return Stream.of(TEXTURE);
} }
@Nullable @Nullable
@@ -1,15 +1,12 @@
package appeng.client.render.model; package appeng.client.render.model;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Set; import java.util.Collections;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Stream;
import com.mojang.datafixers.util.Pair;
import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.IModelTransform; import net.minecraft.client.renderer.model.IModelTransform;
import net.minecraft.client.renderer.model.IUnbakedModel;
import net.minecraft.client.renderer.model.ItemOverrideList; import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.model.ModelBakery; import net.minecraft.client.renderer.model.ModelBakery;
import net.minecraft.client.renderer.model.RenderMaterial; import net.minecraft.client.renderer.model.RenderMaterial;
@@ -17,15 +14,15 @@ import net.minecraft.client.renderer.texture.AtlasTexture;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.IModelConfiguration; import net.minecraftforge.client.model.IModelConfiguration;
import net.minecraftforge.client.model.geometry.IModelGeometry;
import appeng.client.render.BasicUnbakedModel;
import appeng.core.AppEng; import appeng.core.AppEng;
/** /**
* A color applicator uses the base model, and extends it with additional layers * A color applicator uses the base model, and extends it with additional layers
* that are colored according to the selected color of the applicator. * that are colored according to the selected color of the applicator.
*/ */
public class ColorApplicatorModel implements IModelGeometry<ColorApplicatorModel> { public class ColorApplicatorModel implements BasicUnbakedModel<ColorApplicatorModel> {
private static final ResourceLocation MODEL_BASE = new ResourceLocation(AppEng.MOD_ID, private static final ResourceLocation MODEL_BASE = new ResourceLocation(AppEng.MOD_ID,
"item/color_applicator_colored"); "item/color_applicator_colored");
@@ -38,9 +35,13 @@ public class ColorApplicatorModel implements IModelGeometry<ColorApplicatorModel
new ResourceLocation(AppEng.MOD_ID, "item/color_applicator_tip_bright")); new ResourceLocation(AppEng.MOD_ID, "item/color_applicator_tip_bright"));
@Override @Override
public Collection<RenderMaterial> getTextures(IModelConfiguration owner, public Collection<ResourceLocation> getModelDependencies() {
Function<ResourceLocation, IUnbakedModel> modelGetter, Set<Pair<String, String>> missingTextureErrors) { return Collections.singleton(MODEL_BASE);
return Arrays.asList(TEXTURE_DARK, TEXTURE_MEDIUM, TEXTURE_DARK); }
@Override
public Stream<RenderMaterial> getAdditionalTextures() {
return Stream.of(TEXTURE_DARK, TEXTURE_MEDIUM, TEXTURE_DARK);
} }
@Override @Override
@@ -19,18 +19,15 @@
package appeng.client.render.model; package appeng.client.render.model;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.IdentityHashMap; import java.util.IdentityHashMap;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set;
import java.util.function.Function; import java.util.function.Function;
import com.mojang.datafixers.util.Pair; import com.google.common.collect.ImmutableSet;
import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.IModelTransform; import net.minecraft.client.renderer.model.IModelTransform;
import net.minecraft.client.renderer.model.IUnbakedModel;
import net.minecraft.client.renderer.model.ItemOverrideList; import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.model.ModelBakery; import net.minecraft.client.renderer.model.ModelBakery;
import net.minecraft.client.renderer.model.RenderMaterial; import net.minecraft.client.renderer.model.RenderMaterial;
@@ -39,12 +36,13 @@ import net.minecraft.item.Item;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.IModelConfiguration; import net.minecraftforge.client.model.IModelConfiguration;
import net.minecraftforge.client.model.geometry.IModelGeometry;
import appeng.api.client.ICellModelRegistry; import appeng.api.client.ICellModelRegistry;
import appeng.client.render.BasicUnbakedModel;
import appeng.core.Api; import appeng.core.Api;
import appeng.core.api.client.ApiCellModelRegistry;
public class DriveModel implements IModelGeometry<DriveModel> { public class DriveModel implements BasicUnbakedModel<DriveModel> {
private static final ResourceLocation MODEL_BASE = new ResourceLocation( private static final ResourceLocation MODEL_BASE = new ResourceLocation(
"appliedenergistics2:block/drive/drive_base"); "appliedenergistics2:block/drive/drive_base");
@@ -73,9 +71,10 @@ public class DriveModel implements IModelGeometry<DriveModel> {
} }
@Override @Override
public Collection<RenderMaterial> getTextures(IModelConfiguration owner, public Collection<ResourceLocation> getModelDependencies() {
Function<ResourceLocation, IUnbakedModel> modelGetter, Set<Pair<String, String>> missingTextureErrors) { ICellModelRegistry cells = Api.instance().client().cells();
return Collections.emptyList(); return ImmutableSet.<ResourceLocation>builder().add(cells.getDefaultModel())
.addAll(ApiCellModelRegistry.getModels()).addAll(cells.models().values()).build();
} }
} }
@@ -18,28 +18,26 @@
package appeng.client.render.model; package appeng.client.render.model;
import java.util.Collection;
import java.util.Set;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Stream;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.mojang.datafixers.util.Pair;
import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.IModelTransform; import net.minecraft.client.renderer.model.IModelTransform;
import net.minecraft.client.renderer.model.IUnbakedModel;
import net.minecraft.client.renderer.model.ItemOverrideList; import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.model.ModelBakery; import net.minecraft.client.renderer.model.ModelBakery;
import net.minecraft.client.renderer.model.RenderMaterial; import net.minecraft.client.renderer.model.RenderMaterial;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.IModelConfiguration; import net.minecraftforge.client.model.IModelConfiguration;
import net.minecraftforge.client.model.geometry.IModelGeometry;
import appeng.client.render.BasicUnbakedModel;
/** /**
* Model class for the connected texture glass model. * Model class for the connected texture glass model.
*/ */
public class GlassModel implements IModelGeometry<GlassModel> { public class GlassModel implements BasicUnbakedModel<GlassModel> {
@Override @Override
public IBakedModel bake(IModelConfiguration owner, ModelBakery bakery, public IBakedModel bake(IModelConfiguration owner, ModelBakery bakery,
@@ -49,12 +47,11 @@ public class GlassModel implements IModelGeometry<GlassModel> {
} }
@Override @Override
public Collection<RenderMaterial> getTextures(IModelConfiguration owner, public Stream<RenderMaterial> getAdditionalTextures() {
Function<ResourceLocation, IUnbakedModel> modelGetter, Set<Pair<String, String>> missingTextureErrors) {
return ImmutableSet return ImmutableSet
.<RenderMaterial>builder().add(GlassBakedModel.TEXTURE_A, GlassBakedModel.TEXTURE_B, .<RenderMaterial>builder().add(GlassBakedModel.TEXTURE_A, GlassBakedModel.TEXTURE_B,
GlassBakedModel.TEXTURE_C, GlassBakedModel.TEXTURE_D) GlassBakedModel.TEXTURE_C, GlassBakedModel.TEXTURE_D)
.add(GlassBakedModel.TEXTURES_FRAME).build(); .add(GlassBakedModel.TEXTURES_FRAME).build().stream();
} }
} }
@@ -2,16 +2,13 @@ package appeng.client.render.model;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Set;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Stream;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.mojang.datafixers.util.Pair;
import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.IModelTransform; import net.minecraft.client.renderer.model.IModelTransform;
import net.minecraft.client.renderer.model.IUnbakedModel;
import net.minecraft.client.renderer.model.ItemOverrideList; import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.model.ModelBakery; import net.minecraft.client.renderer.model.ModelBakery;
import net.minecraft.client.renderer.model.RenderMaterial; import net.minecraft.client.renderer.model.RenderMaterial;
@@ -19,24 +16,23 @@ import net.minecraft.client.renderer.texture.AtlasTexture;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.IModelConfiguration; import net.minecraftforge.client.model.IModelConfiguration;
import net.minecraftforge.client.model.geometry.IModelGeometry;
import appeng.client.render.BasicUnbakedModel;
import appeng.core.AppEng; import appeng.core.AppEng;
/** /**
* Model wrapper for the memory card item model, which combines a base card * Model wrapper for the memory card item model, which combines a base card
* layer with a "visual hash" of the part/tile. * layer with a "visual hash" of the part/tile.
*/ */
public class MemoryCardModel implements IModelGeometry<MemoryCardModel> { public class MemoryCardModel implements BasicUnbakedModel<MemoryCardModel> {
public static final ResourceLocation MODEL_BASE = new ResourceLocation(AppEng.MOD_ID, "item/memory_card_base"); private static final ResourceLocation MODEL_BASE = new ResourceLocation(AppEng.MOD_ID, "item/memory_card_base");
private static final RenderMaterial TEXTURE = new RenderMaterial(AtlasTexture.LOCATION_BLOCKS_TEXTURE, private static final RenderMaterial TEXTURE = new RenderMaterial(AtlasTexture.LOCATION_BLOCKS_TEXTURE,
new ResourceLocation(AppEng.MOD_ID, "item/memory_card_hash")); new ResourceLocation(AppEng.MOD_ID, "item/memory_card_hash"));
@Override @Override
public Collection<RenderMaterial> getTextures(IModelConfiguration owner, public Collection<ResourceLocation> getModelDependencies() {
Function<ResourceLocation, IUnbakedModel> modelGetter, Set<Pair<String, String>> missingTextureErrors) { return Collections.singleton(MODEL_BASE);
return Collections.singleton(TEXTURE);
} }
@Nullable @Nullable
@@ -51,4 +47,9 @@ public class MemoryCardModel implements IModelGeometry<MemoryCardModel> {
return new MemoryCardBakedModel(baseModel, texture); return new MemoryCardBakedModel(baseModel, texture);
} }
@Override
public Stream<RenderMaterial> getAdditionalTextures() {
return Stream.of(TEXTURE);
}
} }
@@ -19,30 +19,26 @@
package appeng.client.render.model; package appeng.client.render.model;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.function.Function; import java.util.function.Function;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet;
import com.mojang.datafixers.util.Pair;
import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.IModelTransform; import net.minecraft.client.renderer.model.IModelTransform;
import net.minecraft.client.renderer.model.IUnbakedModel;
import net.minecraft.client.renderer.model.ItemOverrideList; import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.model.ModelBakery; import net.minecraft.client.renderer.model.ModelBakery;
import net.minecraft.client.renderer.model.RenderMaterial; import net.minecraft.client.renderer.model.RenderMaterial;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.IModelConfiguration; import net.minecraftforge.client.model.IModelConfiguration;
import net.minecraftforge.client.model.geometry.IModelGeometry;
import appeng.client.render.BasicUnbakedModel;
/** /**
* The parent model for the compass baked model. Declares the dependencies for * The parent model for the compass baked model. Declares the dependencies for
* the base and pointer submodels mostly. * the base and pointer submodels mostly.
*/ */
public class SkyCompassModel implements IModelGeometry<SkyCompassModel> { public class SkyCompassModel implements BasicUnbakedModel<SkyCompassModel> {
private static final ResourceLocation MODEL_BASE = new ResourceLocation( private static final ResourceLocation MODEL_BASE = new ResourceLocation(
"appliedenergistics2:block/sky_compass_base"); "appliedenergistics2:block/sky_compass_base");
@@ -50,8 +46,6 @@ public class SkyCompassModel implements IModelGeometry<SkyCompassModel> {
private static final ResourceLocation MODEL_POINTER = new ResourceLocation( private static final ResourceLocation MODEL_POINTER = new ResourceLocation(
"appliedenergistics2:block/sky_compass_pointer"); "appliedenergistics2:block/sky_compass_pointer");
public static final List<ResourceLocation> DEPENDENCIES = ImmutableList.of(MODEL_BASE, MODEL_POINTER);
@Override @Override
public IBakedModel bake(IModelConfiguration owner, ModelBakery bakery, public IBakedModel bake(IModelConfiguration owner, ModelBakery bakery,
Function<RenderMaterial, TextureAtlasSprite> spriteGetter, IModelTransform modelTransform, Function<RenderMaterial, TextureAtlasSprite> spriteGetter, IModelTransform modelTransform,
@@ -62,9 +56,8 @@ public class SkyCompassModel implements IModelGeometry<SkyCompassModel> {
} }
@Override @Override
public Collection<RenderMaterial> getTextures(IModelConfiguration owner, public Collection<ResourceLocation> getModelDependencies() {
Function<ResourceLocation, IUnbakedModel> modelGetter, Set<Pair<String, String>> missingTextureErrors) { return ImmutableSet.of(MODEL_BASE, MODEL_POINTER);
return Collections.emptyList();
} }
} }
@@ -19,18 +19,13 @@
package appeng.client.render.spatial; package appeng.client.render.spatial;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Stream;
import com.mojang.datafixers.util.Pair;
import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.IModelTransform; import net.minecraft.client.renderer.model.IModelTransform;
import net.minecraft.client.renderer.model.IUnbakedModel;
import net.minecraft.client.renderer.model.ItemOverrideList; import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.model.ModelBakery; import net.minecraft.client.renderer.model.ModelBakery;
import net.minecraft.client.renderer.model.RenderMaterial; import net.minecraft.client.renderer.model.RenderMaterial;
@@ -38,11 +33,11 @@ import net.minecraft.client.renderer.texture.AtlasTexture;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.IModelConfiguration; import net.minecraftforge.client.model.IModelConfiguration;
import net.minecraftforge.client.model.geometry.IModelGeometry;
import appeng.client.render.BasicUnbakedModel;
import appeng.core.AppEng; import appeng.core.AppEng;
public class SpatialPylonModel implements IModelGeometry<SpatialPylonModel> { public class SpatialPylonModel implements BasicUnbakedModel<SpatialPylonModel> {
@Override @Override
public IBakedModel bake(IModelConfiguration owner, ModelBakery bakery, public IBakedModel bake(IModelConfiguration owner, ModelBakery bakery,
@@ -58,10 +53,8 @@ public class SpatialPylonModel implements IModelGeometry<SpatialPylonModel> {
} }
@Override @Override
public Collection<RenderMaterial> getTextures(IModelConfiguration owner, public Stream<RenderMaterial> getAdditionalTextures() {
Function<ResourceLocation, IUnbakedModel> modelGetter, Set<Pair<String, String>> missingTextureErrors) { return Arrays.stream(SpatialPylonTextureType.values()).map(SpatialPylonModel::getTexturePath);
return Arrays.stream(SpatialPylonTextureType.values()).map(SpatialPylonModel::getTexturePath)
.collect(Collectors.toList());
} }
private static RenderMaterial getTexturePath(SpatialPylonTextureType type) { private static RenderMaterial getTexturePath(SpatialPylonTextureType type) {
@@ -126,9 +126,6 @@ import appeng.client.render.effects.LightningFX;
import appeng.client.render.effects.MatterCannonFX; import appeng.client.render.effects.MatterCannonFX;
import appeng.client.render.effects.ParticleTypes; import appeng.client.render.effects.ParticleTypes;
import appeng.client.render.effects.VibrantFX; import appeng.client.render.effects.VibrantFX;
import appeng.client.render.model.BiometricCardModel;
import appeng.client.render.model.MemoryCardModel;
import appeng.client.render.model.SkyCompassModel;
import appeng.client.render.tesr.InscriberTESR; import appeng.client.render.tesr.InscriberTESR;
import appeng.client.render.tesr.SkyChestTESR; import appeng.client.render.tesr.SkyChestTESR;
import appeng.container.AEBaseContainer; import appeng.container.AEBaseContainer;
@@ -166,7 +163,6 @@ import appeng.container.implementations.UpgradeableContainer;
import appeng.container.implementations.VibrationChamberContainer; import appeng.container.implementations.VibrationChamberContainer;
import appeng.container.implementations.WirelessContainer; import appeng.container.implementations.WirelessContainer;
import appeng.container.implementations.WirelessTermContainer; import appeng.container.implementations.WirelessTermContainer;
import appeng.core.api.client.ApiCellModelRegistry;
import appeng.core.features.registries.P2PTunnelRegistry; import appeng.core.features.registries.P2PTunnelRegistry;
import appeng.core.features.registries.PartModels; import appeng.core.features.registries.PartModels;
import appeng.core.features.registries.cell.BasicCellHandler; import appeng.core.features.registries.cell.BasicCellHandler;
@@ -251,10 +247,6 @@ final class Registration {
*/ */
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
private void registerSpecialModels() { private void registerSpecialModels() {
SkyCompassModel.DEPENDENCIES.forEach(ModelLoader::addSpecialModel);
ModelLoader.addSpecialModel(BiometricCardModel.MODEL_BASE);
ModelLoader.addSpecialModel(MemoryCardModel.MODEL_BASE);
ApiCellModelRegistry.registerModels();
ModelLoader.addSpecialModel(MolecularAssemblerRenderer.LIGHTS_MODEL); ModelLoader.addSpecialModel(MolecularAssemblerRenderer.LIGHTS_MODEL);
PartModels partModels = (PartModels) Api.INSTANCE.registries().partModels(); PartModels partModels = (PartModels) Api.INSTANCE.registries().partModels();
@@ -20,6 +20,7 @@
package appeng.core.api.client; package appeng.core.api.client;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.IdentityHashMap; import java.util.IdentityHashMap;
import java.util.Map; import java.util.Map;
@@ -31,7 +32,6 @@ import com.google.common.base.Preconditions;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.ModelLoader;
import appeng.api.client.ICellModelRegistry; import appeng.api.client.ICellModelRegistry;
import appeng.core.ApiDefinitions; import appeng.core.ApiDefinitions;
@@ -67,8 +67,8 @@ public class ApiCellModelRegistry implements ICellModelRegistry {
MODEL_CELL_ITEMS_1K, MODEL_CELL_ITEMS_4K, MODEL_CELL_ITEMS_16K, MODEL_CELL_ITEMS_64K, MODEL_CELL_FLUIDS_1K, MODEL_CELL_ITEMS_1K, MODEL_CELL_ITEMS_4K, MODEL_CELL_ITEMS_16K, MODEL_CELL_ITEMS_64K, MODEL_CELL_FLUIDS_1K,
MODEL_CELL_FLUIDS_4K, MODEL_CELL_FLUIDS_16K, MODEL_CELL_FLUIDS_64K, MODEL_CELL_CREATIVE }; MODEL_CELL_FLUIDS_4K, MODEL_CELL_FLUIDS_16K, MODEL_CELL_FLUIDS_64K, MODEL_CELL_CREATIVE };
public static void registerModels() { public static Collection<ResourceLocation> getModels() {
Arrays.stream(MODELS).forEach(ModelLoader::addSpecialModel); return Arrays.asList(MODELS);
} }
private final Map<Item, ResourceLocation> registry; private final Map<Item, ResourceLocation> registry;
@@ -18,16 +18,11 @@
package appeng.parts.automation; package appeng.parts.automation;
import java.util.Arrays;
import java.util.Collection;
import java.util.Set;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Stream;
import com.mojang.datafixers.util.Pair;
import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.IModelTransform; import net.minecraft.client.renderer.model.IModelTransform;
import net.minecraft.client.renderer.model.IUnbakedModel;
import net.minecraft.client.renderer.model.ItemOverrideList; import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.model.ModelBakery; import net.minecraft.client.renderer.model.ModelBakery;
import net.minecraft.client.renderer.model.RenderMaterial; import net.minecraft.client.renderer.model.RenderMaterial;
@@ -35,12 +30,13 @@ import net.minecraft.client.renderer.texture.AtlasTexture;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.IModelConfiguration; import net.minecraftforge.client.model.IModelConfiguration;
import net.minecraftforge.client.model.geometry.IModelGeometry;
import appeng.client.render.BasicUnbakedModel;
/** /**
* Built-in model for annihilation planes that supports connected textures. * Built-in model for annihilation planes that supports connected textures.
*/ */
public class PlaneModel implements IModelGeometry<PlaneModel> { public class PlaneModel implements BasicUnbakedModel<PlaneModel> {
private final RenderMaterial frontTexture; private final RenderMaterial frontTexture;
private final RenderMaterial sidesTexture; private final RenderMaterial sidesTexture;
@@ -64,9 +60,8 @@ public class PlaneModel implements IModelGeometry<PlaneModel> {
} }
@Override @Override
public Collection<RenderMaterial> getTextures(IModelConfiguration owner, public Stream<RenderMaterial> getAdditionalTextures() {
Function<ResourceLocation, IUnbakedModel> modelGetter, Set<Pair<String, String>> missingTextureErrors) { return Stream.of(frontTexture, sidesTexture, backTexture);
return Arrays.asList(frontTexture, sidesTexture, backTexture);
} }
} }
@@ -30,6 +30,8 @@ import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundCategory;
import net.minecraft.util.SoundEvents; import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import appeng.block.storage.SkyChestBlock; import appeng.block.storage.SkyChestBlock;
@@ -37,6 +39,7 @@ import appeng.tile.AEBaseInvTileEntity;
import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.AppEngInternalInventory;
import appeng.util.inv.InvOperation; import appeng.util.inv.InvOperation;
@OnlyIn(value = Dist.CLIENT, _interface = IChestLid.class)
public class SkyChestTileEntity extends AEBaseInvTileEntity implements ITickableTileEntity, IChestLid { public class SkyChestTileEntity extends AEBaseInvTileEntity implements ITickableTileEntity, IChestLid {
private final AppEngInternalInventory inv = new AppEngInternalInventory(this, 9 * 4); private final AppEngInternalInventory inv = new AppEngInternalInventory(this, 9 * 4);