diff --git a/src/api/java/appeng/api/IAppEngApi.java b/src/api/java/appeng/api/IAppEngApi.java index 357ac1204..59b06c871 100644 --- a/src/api/java/appeng/api/IAppEngApi.java +++ b/src/api/java/appeng/api/IAppEngApi.java @@ -23,15 +23,21 @@ package appeng.api; +import appeng.api.client.IClientHelper; import appeng.api.definitions.IDefinitions; import appeng.api.features.IRegistryContainer; import appeng.api.networking.IGridHelper; import appeng.api.networking.IGridNode; import appeng.api.parts.IPartHelper; import appeng.api.storage.IStorageHelper; -import appeng.api.util.IClientHelper; public interface IAppEngApi { + + /** + * @return An accessible list of all AE definitions + */ + IDefinitions definitions(); + /** * @return Registry Container for the numerous registries in AE2. */ @@ -52,11 +58,6 @@ public interface IAppEngApi { */ IPartHelper partHelper(); - /** - * @return An accessible list of all AE definitions - */ - IDefinitions definitions(); - /** * @return Utility methods primarily useful for client side stuff */ diff --git a/src/api/java/appeng/api/client/ICellModelRegistry.java b/src/api/java/appeng/api/client/ICellModelRegistry.java new file mode 100644 index 000000000..0fbab4332 --- /dev/null +++ b/src/api/java/appeng/api/client/ICellModelRegistry.java @@ -0,0 +1,88 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2020 TeamAppliedEnergistics + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package appeng.api.client; + +import java.util.Map; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.client.renderer.model.ModelBakery; +import net.minecraft.item.Item; +import net.minecraft.util.ResourceLocation; + +/** + * A registry for 3D models used to render storage cells in the world, when they + * are inserted into a drive or similar machines. + */ +public interface ICellModelRegistry { + + /** + * Register a new model for a storage cell item. + * + *

+ * You are responsible for ensuring that the given model is actually loaded by + * the game. See + * {@see net.minecraftforge.client.model.ModelLoader#addSpecialModel}. + * + * This method only maps an {@link Item} to a {@link ResourceLocation} which can + * be looked up from the {@link ModelBakery}. No validation about missing models + * will be done. + * + * Will throw an exception in case a model is already registered for an item. + * + * For examples look at our cell part models within the drive model directory. + * + * @param item The cell item + * @param model The {@link ResourceLocation} representing the model. + * @return + */ + void registerModel(@Nonnull Item item, @Nonnull ResourceLocation model); + + /** + * The {@link ResourceLocation} of the model used to render the given storage + * cell {@link Item} when inserted into a drive or similar. + * + * @param item + * @return null, if no model is registered. + */ + @Nullable + ResourceLocation model(@Nonnull Item item); + + /** + * An unmodifiable map of all registered mappings. + * + * @return + */ + @Nonnull + Map models(); + + /** + * Returns the default model, which can be used when no explicit model is + * registered. + */ + @Nonnull + ResourceLocation getDefaultModel(); + +} diff --git a/src/api/java/appeng/api/util/IClientHelper.java b/src/api/java/appeng/api/client/IClientHelper.java similarity index 90% rename from src/api/java/appeng/api/util/IClientHelper.java rename to src/api/java/appeng/api/client/IClientHelper.java index 00d51ae46..df12ca411 100644 --- a/src/api/java/appeng/api/util/IClientHelper.java +++ b/src/api/java/appeng/api/client/IClientHelper.java @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -package appeng.api.util; +package appeng.api.client; import java.util.List; @@ -39,4 +39,11 @@ public interface IClientHelper { */ > void addCellInformation(ICellInventoryHandler handler, List lines); + /** + * A helper to work with clientside related tasks for cells. + * + * @return + */ + ICellModelRegistry cells(); + } diff --git a/src/main/java/appeng/block/storage/DriveSlotCellType.java b/src/main/java/appeng/block/storage/DriveSlotCellType.java deleted file mode 100644 index c808d614d..000000000 --- a/src/main/java/appeng/block/storage/DriveSlotCellType.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.block.storage; - -import net.minecraft.util.IStringSerializable; - -/** - * Describes the type of cell present in a slot. - */ -public enum DriveSlotCellType implements IStringSerializable { - - EMPTY("empty"), - - ITEM("item"), - - FLUID("fluid"); - - private final String name; - - DriveSlotCellType(String name) { - this.name = name; - } - - @Override - public String getName() { - return this.name; - } - -} diff --git a/src/main/java/appeng/client/render/model/DriveBakedModel.java b/src/main/java/appeng/client/render/model/DriveBakedModel.java index f5070eff0..1f9823a89 100644 --- a/src/main/java/appeng/client/render/model/DriveBakedModel.java +++ b/src/main/java/appeng/client/render/model/DriveBakedModel.java @@ -31,22 +31,22 @@ import net.minecraft.client.renderer.Matrix4f; import net.minecraft.client.renderer.model.BakedQuad; import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.item.Item; +import net.minecraft.item.Items; import net.minecraft.util.Direction; import net.minecraftforge.client.model.data.IModelData; import net.minecraftforge.client.model.pipeline.BakedQuadBuilder; -import appeng.api.definitions.IItems; -import appeng.block.storage.DriveSlotCellType; import appeng.block.storage.DriveSlotsState; import appeng.client.render.DelegateBakedModel; -import appeng.core.Api; public class DriveBakedModel extends DelegateBakedModel { - private final Map bakedCells; + private final Map bakedCells; + private final IBakedModel defaultCell; - public DriveBakedModel(IBakedModel bakedBase, Map bakedCells) { + public DriveBakedModel(IBakedModel bakedBase, Map cellModels, IBakedModel defaultCell) { super(bakedBase); - this.bakedCells = bakedCells; + this.bakedCells = cellModels; + this.defaultCell = defaultCell; } @Nonnull @@ -92,23 +92,18 @@ public class DriveBakedModel extends DelegateBakedModel { public boolean isAmbientOcclusion() { // We have faces inside the chassis that are facing east, but should not receive // ambient occlusion from the east-side, but sadly this cannot be fine-tuned on - // a - // face-by-face basis. + // a face-by-face basis. return false; } // Determine which drive chassis to show based on the used cell private IBakedModel getCellChassisModel(Item cell) { - IItems items = Api.INSTANCE.definitions().items(); if (cell == null) { - return bakedCells.get(DriveSlotCellType.EMPTY); - } else if (items.fluidCell1k().item() == cell || items.fluidCell4k().item() == cell - || items.fluidCell16k().item() == cell || items.fluidCell64k().item() == cell) { - return bakedCells.get(DriveSlotCellType.FLUID); - } else { - // Fall back to an item model - return bakedCells.get(DriveSlotCellType.ITEM); + return bakedCells.get(Items.AIR); } + final IBakedModel model = bakedCells.get(cell); + + return model != null ? model : defaultCell; } private static void addModel(@Nullable BlockState state, @Nonnull Random rand, @Nonnull IModelData extraData, diff --git a/src/main/java/appeng/client/render/model/DriveModel.java b/src/main/java/appeng/client/render/model/DriveModel.java index e5cf9100f..2988e9890 100644 --- a/src/main/java/appeng/client/render/model/DriveModel.java +++ b/src/main/java/appeng/client/render/model/DriveModel.java @@ -20,13 +20,12 @@ package appeng.client.render.model; import java.util.Collection; import java.util.Collections; -import java.util.EnumMap; +import java.util.IdentityHashMap; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.function.Function; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; import com.mojang.datafixers.util.Pair; import net.minecraft.client.renderer.model.IBakedModel; @@ -36,39 +35,41 @@ import net.minecraft.client.renderer.model.ItemOverrideList; import net.minecraft.client.renderer.model.Material; import net.minecraft.client.renderer.model.ModelBakery; import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.item.Item; +import net.minecraft.item.Items; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.IModelConfiguration; import net.minecraftforge.client.model.geometry.IModelGeometry; -import appeng.block.storage.DriveSlotCellType; +import appeng.api.client.ICellModelRegistry; +import appeng.core.Api; public class DriveModel implements IModelGeometry { private static final ResourceLocation MODEL_BASE = new ResourceLocation( "appliedenergistics2:block/drive/drive_base"); - - private static final Map MODELS_CELLS = ImmutableMap.of( - DriveSlotCellType.EMPTY, new ResourceLocation("appliedenergistics2:block/drive/drive_cell_empty"), - DriveSlotCellType.ITEM, new ResourceLocation("appliedenergistics2:block/drive/drive_cell_items"), - DriveSlotCellType.FLUID, new ResourceLocation("appliedenergistics2:block/drive/drive_cell_fluids")); - - public static final Set DEPENDENCIES = ImmutableSet.builder() - .addAll(MODELS_CELLS.values()).add(MODEL_BASE).build(); + private static final ResourceLocation MODEL_CELL_EMPTY = new ResourceLocation( + "appliedenergistics2:block/drive/drive_cell_empty"); @Override public IBakedModel bake(IModelConfiguration owner, ModelBakery bakery, Function spriteGetter, IModelTransform modelTransform, ItemOverrideList overrides, ResourceLocation modelLocation) { - EnumMap cellModels = new EnumMap<>(DriveSlotCellType.class); + final ICellModelRegistry cellRegistry = Api.instance().client().cells(); + final Map cellModels = new IdentityHashMap<>(); - // Load the base model and the model for each cell state. - for (DriveSlotCellType cellType : MODELS_CELLS.keySet()) { - IBakedModel cellModel = bakery.getBakedModel(MODELS_CELLS.get(cellType), modelTransform, spriteGetter); - cellModels.put(cellType, cellModel); + // Load the base model and the model for each cell model. + for (Entry entry : cellRegistry.models().entrySet()) { + IBakedModel cellModel = bakery.getBakedModel(entry.getValue(), modelTransform, spriteGetter); + cellModels.put(entry.getKey(), cellModel); } - IBakedModel baseModel = bakery.getBakedModel(MODEL_BASE, modelTransform, spriteGetter); - return new DriveBakedModel(baseModel, cellModels); + final IBakedModel baseModel = bakery.getBakedModel(MODEL_BASE, modelTransform, spriteGetter); + final IBakedModel defaultCell = bakery.getBakedModel(cellRegistry.getDefaultModel(), modelTransform, + spriteGetter); + cellModels.put(Items.AIR, bakery.getBakedModel(MODEL_CELL_EMPTY, modelTransform, spriteGetter)); + + return new DriveBakedModel(baseModel, cellModels, defaultCell); } @Override diff --git a/src/main/java/appeng/core/Api.java b/src/main/java/appeng/core/Api.java index b26d959af..b61134ab0 100644 --- a/src/main/java/appeng/core/Api.java +++ b/src/main/java/appeng/core/Api.java @@ -20,10 +20,10 @@ package appeng.core; import appeng.api.AEAddon; import appeng.api.IAppEngApi; +import appeng.api.client.IClientHelper; import appeng.api.features.IRegistryContainer; import appeng.api.networking.IGridHelper; import appeng.api.storage.IStorageHelper; -import appeng.api.util.IClientHelper; import appeng.core.api.ApiClientHelper; import appeng.core.api.ApiGrid; import appeng.core.api.ApiPart; @@ -67,7 +67,7 @@ public final class Api implements IAppEngApi { this.registryContainer = new RegistryContainer(); this.partHelper = new ApiPart(); this.definitions = new ApiDefinitions((PartModels) this.registryContainer.partModels()); - this.client = new ApiClientHelper(); + this.client = new ApiClientHelper(this.definitions); } public PartModels getPartModels() { diff --git a/src/main/java/appeng/core/Registration.java b/src/main/java/appeng/core/Registration.java index 80238ec6c..34321d1a6 100644 --- a/src/main/java/appeng/core/Registration.java +++ b/src/main/java/appeng/core/Registration.java @@ -125,7 +125,6 @@ import appeng.client.render.effects.MatterCannonFX; import appeng.client.render.effects.ParticleTypes; import appeng.client.render.effects.VibrantFX; import appeng.client.render.model.BiometricCardModel; -import appeng.client.render.model.DriveModel; import appeng.client.render.model.MemoryCardModel; import appeng.client.render.model.SkyCompassModel; import appeng.client.render.tesr.InscriberTESR; @@ -165,6 +164,7 @@ import appeng.container.implementations.UpgradeableContainer; import appeng.container.implementations.VibrationChamberContainer; import appeng.container.implementations.WirelessContainer; import appeng.container.implementations.WirelessTermContainer; +import appeng.core.api.client.ApiCellModelRegistry; import appeng.core.features.registries.P2PTunnelRegistry; import appeng.core.features.registries.PartModels; import appeng.core.features.registries.cell.BasicCellHandler; @@ -256,7 +256,7 @@ final class Registration { SkyCompassModel.DEPENDENCIES.forEach(ModelLoader::addSpecialModel); ModelLoader.addSpecialModel(BiometricCardModel.MODEL_BASE); ModelLoader.addSpecialModel(MemoryCardModel.MODEL_BASE); - DriveModel.DEPENDENCIES.forEach(ModelLoader::addSpecialModel); + ApiCellModelRegistry.registerModels(); ModelLoader.addSpecialModel(MolecularAssemblerRenderer.LIGHTS_MODEL); PartModels partModels = (PartModels) Api.INSTANCE.registries().partModels(); diff --git a/src/main/java/appeng/core/api/ApiClientHelper.java b/src/main/java/appeng/core/api/ApiClientHelper.java index 235962e29..67482ecb1 100644 --- a/src/main/java/appeng/core/api/ApiClientHelper.java +++ b/src/main/java/appeng/core/api/ApiClientHelper.java @@ -1,5 +1,6 @@ /* * This file is part of Applied Energistics 2. + * * Copyright (c) 2013 - 2020, AlgorithmX2, All rights reserved. * * Applied Energistics 2 is free software: you can redistribute it and/or modify @@ -23,14 +24,24 @@ import java.util.List; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; +import appeng.api.client.ICellModelRegistry; +import appeng.api.client.IClientHelper; import appeng.api.config.IncludeExclude; import appeng.api.storage.cells.ICellInventory; import appeng.api.storage.cells.ICellInventoryHandler; import appeng.api.storage.data.IAEStack; -import appeng.api.util.IClientHelper; +import appeng.core.ApiDefinitions; +import appeng.core.api.client.ApiCellModelRegistry; import appeng.core.localization.GuiText; public class ApiClientHelper implements IClientHelper { + + private final ICellModelRegistry cells; + + public ApiClientHelper(ApiDefinitions definitions) { + this.cells = new ApiCellModelRegistry(definitions); + } + @Override public > void addCellInformation(ICellInventoryHandler handler, List lines) { @@ -65,4 +76,9 @@ public class ApiClientHelper implements IClientHelper { } + @Override + public ICellModelRegistry cells() { + return this.cells; + } + } \ No newline at end of file diff --git a/src/main/java/appeng/core/api/client/ApiCellModelRegistry.java b/src/main/java/appeng/core/api/client/ApiCellModelRegistry.java new file mode 100644 index 000000000..837b61970 --- /dev/null +++ b/src/main/java/appeng/core/api/client/ApiCellModelRegistry.java @@ -0,0 +1,119 @@ +/* + * This file is part of Applied Energistics 2. + * + * Copyright (c) 2020, TeamAppliedEnergistics, All rights reserved. + * + * Applied Energistics 2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Applied Energistics 2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Applied Energistics 2. If not, see . + */ + +package appeng.core.api.client; + +import java.util.Arrays; +import java.util.Collections; +import java.util.IdentityHashMap; +import java.util.Map; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import com.google.common.base.Preconditions; + +import net.minecraft.item.Item; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.ModelLoader; + +import appeng.api.client.ICellModelRegistry; +import appeng.core.ApiDefinitions; + +public class ApiCellModelRegistry implements ICellModelRegistry { + + private static final ResourceLocation MODEL_BASE = new ResourceLocation( + "appliedenergistics2:block/drive/drive_base"); + private static final ResourceLocation MODEL_CELL_EMPTY = new ResourceLocation( + "appliedenergistics2:block/drive/drive_cell_empty"); + private static final ResourceLocation MODEL_CELL_DEFAULT = new ResourceLocation( + "appliedenergistics2:block/drive/drive_cell"); + private static final ResourceLocation MODEL_CELL_ITEMS_1K = new ResourceLocation( + "appliedenergistics2:block/drive/cells/1k_item_cell"); + private static final ResourceLocation MODEL_CELL_ITEMS_4K = new ResourceLocation( + "appliedenergistics2:block/drive/cells/4k_item_cell"); + private static final ResourceLocation MODEL_CELL_ITEMS_16K = new ResourceLocation( + "appliedenergistics2:block/drive/cells/16k_item_cell"); + private static final ResourceLocation MODEL_CELL_ITEMS_64K = new ResourceLocation( + "appliedenergistics2:block/drive/cells/64k_item_cell"); + private static final ResourceLocation MODEL_CELL_FLUIDS_1K = new ResourceLocation( + "appliedenergistics2:block/drive/cells/1k_fluid_cell"); + private static final ResourceLocation MODEL_CELL_FLUIDS_4K = new ResourceLocation( + "appliedenergistics2:block/drive/cells/4k_fluid_cell"); + private static final ResourceLocation MODEL_CELL_FLUIDS_16K = new ResourceLocation( + "appliedenergistics2:block/drive/cells/16k_fluid_cell"); + private static final ResourceLocation MODEL_CELL_FLUIDS_64K = new ResourceLocation( + "appliedenergistics2:block/drive/cells/64k_fluid_cell"); + private static final ResourceLocation MODEL_CELL_CREATIVE = new ResourceLocation( + "appliedenergistics2:block/drive/cells/creative_cell"); + + private static final ResourceLocation[] MODELS = { MODEL_BASE, MODEL_CELL_EMPTY, MODEL_CELL_DEFAULT, + 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 }; + + public static void registerModels() { + Arrays.stream(MODELS).forEach(ModelLoader::addSpecialModel); + } + + private final Map registry; + + public ApiCellModelRegistry(ApiDefinitions definitions) { + this.registry = new IdentityHashMap<>(); + this.registry.put(definitions.items().cell1k().item(), MODEL_CELL_ITEMS_1K); + this.registry.put(definitions.items().cell4k().item(), MODEL_CELL_ITEMS_4K); + this.registry.put(definitions.items().cell16k().item(), MODEL_CELL_ITEMS_16K); + this.registry.put(definitions.items().cell64k().item(), MODEL_CELL_ITEMS_64K); + this.registry.put(definitions.items().fluidCell1k().item(), MODEL_CELL_FLUIDS_1K); + this.registry.put(definitions.items().fluidCell4k().item(), MODEL_CELL_FLUIDS_4K); + this.registry.put(definitions.items().fluidCell16k().item(), MODEL_CELL_FLUIDS_16K); + this.registry.put(definitions.items().fluidCell64k().item(), MODEL_CELL_FLUIDS_64K); + this.registry.put(definitions.items().fluidCell64k().item(), MODEL_CELL_FLUIDS_64K); + this.registry.put(definitions.items().cellCreative().item(), MODEL_CELL_CREATIVE); + } + + @Override + public void registerModel(Item item, ResourceLocation model) { + Preconditions.checkNotNull(item); + Preconditions.checkNotNull(model); + Preconditions.checkArgument(!this.registry.containsKey(item), "Cannot register an item twice."); + + this.registry.put(item, model); + } + + @Override + @Nullable + public ResourceLocation model(@Nonnull Item item) { + Preconditions.checkNotNull(item); + + return this.registry.get(item); + } + + @Override + @Nonnull + public Map models() { + return Collections.unmodifiableMap(this.registry); + } + + @Override + @Nonnull + public ResourceLocation getDefaultModel() { + return MODEL_CELL_DEFAULT; + } + +} diff --git a/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/16k_fluid_cell.json b/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/16k_fluid_cell.json new file mode 100644 index 000000000..590869d5f --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/16k_fluid_cell.json @@ -0,0 +1,6 @@ +{ + "parent": "appliedenergistics2:block/drive/drive_cell", + "textures": { + "cell": "appliedenergistics2:block/drive/cells/16k_fluid_cell" + } +} diff --git a/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/16k_item_cell.json b/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/16k_item_cell.json new file mode 100644 index 000000000..92a0b85a7 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/16k_item_cell.json @@ -0,0 +1,6 @@ +{ + "parent": "appliedenergistics2:block/drive/drive_cell", + "textures": { + "cell": "appliedenergistics2:block/drive/cells/16k_item_cell" + } +} diff --git a/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/1k_fluid_cell.json b/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/1k_fluid_cell.json new file mode 100644 index 000000000..a6e124c7a --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/1k_fluid_cell.json @@ -0,0 +1,6 @@ +{ + "parent": "appliedenergistics2:block/drive/drive_cell", + "textures": { + "cell": "appliedenergistics2:block/drive/cells/1k_fluid_cell" + } +} diff --git a/src/main/resources/assets/appliedenergistics2/models/block/drive/drive_cell_fluids.json b/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/1k_item_cell.json similarity index 55% rename from src/main/resources/assets/appliedenergistics2/models/block/drive/drive_cell_fluids.json rename to src/main/resources/assets/appliedenergistics2/models/block/drive/cells/1k_item_cell.json index c1e46c708..335e0cc59 100644 --- a/src/main/resources/assets/appliedenergistics2/models/block/drive/drive_cell_fluids.json +++ b/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/1k_item_cell.json @@ -1,6 +1,6 @@ { "parent": "appliedenergistics2:block/drive/drive_cell", "textures": { - "cell": "appliedenergistics2:block/drive/fluid_cell" + "cell": "appliedenergistics2:block/drive/cells/1k_item_cell" } } diff --git a/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/4k_fluid_cell.json b/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/4k_fluid_cell.json new file mode 100644 index 000000000..bf12ce6bf --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/4k_fluid_cell.json @@ -0,0 +1,6 @@ +{ + "parent": "appliedenergistics2:block/drive/drive_cell", + "textures": { + "cell": "appliedenergistics2:block/drive/cells/4k_fluid_cell" + } +} diff --git a/src/main/resources/assets/appliedenergistics2/models/block/drive/drive_cell_items.json b/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/4k_item_cell.json similarity index 55% rename from src/main/resources/assets/appliedenergistics2/models/block/drive/drive_cell_items.json rename to src/main/resources/assets/appliedenergistics2/models/block/drive/cells/4k_item_cell.json index 5fcaa819c..518338801 100644 --- a/src/main/resources/assets/appliedenergistics2/models/block/drive/drive_cell_items.json +++ b/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/4k_item_cell.json @@ -1,6 +1,6 @@ { "parent": "appliedenergistics2:block/drive/drive_cell", "textures": { - "cell": "appliedenergistics2:block/drive/item_cell" + "cell": "appliedenergistics2:block/drive/cells/4k_item_cell" } } diff --git a/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/64k_fluid_cell.json b/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/64k_fluid_cell.json new file mode 100644 index 000000000..190c69796 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/64k_fluid_cell.json @@ -0,0 +1,6 @@ +{ + "parent": "appliedenergistics2:block/drive/drive_cell", + "textures": { + "cell": "appliedenergistics2:block/drive/cells/64k_fluid_cell" + } +} diff --git a/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/64k_item_cell.json b/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/64k_item_cell.json new file mode 100644 index 000000000..64bfb14cc --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/64k_item_cell.json @@ -0,0 +1,6 @@ +{ + "parent": "appliedenergistics2:block/drive/drive_cell", + "textures": { + "cell": "appliedenergistics2:block/drive/cells/64k_item_cell" + } +} diff --git a/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/creative_cell.json b/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/creative_cell.json new file mode 100644 index 000000000..a289cd039 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/drive/cells/creative_cell.json @@ -0,0 +1,6 @@ +{ + "parent": "appliedenergistics2:block/drive/drive_cell", + "textures": { + "cell": "appliedenergistics2:block/drive/cells/creative_cell" + } +} diff --git a/src/main/resources/assets/appliedenergistics2/models/block/drive/drive_cell.json b/src/main/resources/assets/appliedenergistics2/models/block/drive/drive_cell.json index fdeb22556..147637da8 100644 --- a/src/main/resources/assets/appliedenergistics2/models/block/drive/drive_cell.json +++ b/src/main/resources/assets/appliedenergistics2/models/block/drive/drive_cell.json @@ -1,6 +1,6 @@ { "textures": { - "cell": "appliedenergistics2:block/drive/item_cell" + "cell": "appliedenergistics2:block/drive/cells/default_cell" }, "elements": [ { diff --git a/src/main/resources/assets/appliedenergistics2/textures/block/drive/item_cell.png b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/16k_fluid_cell.png similarity index 53% rename from src/main/resources/assets/appliedenergistics2/textures/block/drive/item_cell.png rename to src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/16k_fluid_cell.png index 4c90c29d3..fa2693a04 100644 Binary files a/src/main/resources/assets/appliedenergistics2/textures/block/drive/item_cell.png and b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/16k_fluid_cell.png differ diff --git a/src/main/resources/assets/appliedenergistics2/textures/block/drive/fluid_cell.png b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/16k_item_cell.png similarity index 53% rename from src/main/resources/assets/appliedenergistics2/textures/block/drive/fluid_cell.png rename to src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/16k_item_cell.png index d3abeda66..e4679422b 100644 Binary files a/src/main/resources/assets/appliedenergistics2/textures/block/drive/fluid_cell.png and b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/16k_item_cell.png differ diff --git a/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/1k_fluid_cell.png b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/1k_fluid_cell.png new file mode 100644 index 000000000..e0a03f24a Binary files /dev/null and b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/1k_fluid_cell.png differ diff --git a/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/1k_item_cell.png b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/1k_item_cell.png new file mode 100644 index 000000000..3cc05dfb6 Binary files /dev/null and b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/1k_item_cell.png differ diff --git a/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/4k_fluid_cell.png b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/4k_fluid_cell.png new file mode 100644 index 000000000..f6836271a Binary files /dev/null and b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/4k_fluid_cell.png differ diff --git a/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/4k_item_cell.png b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/4k_item_cell.png new file mode 100644 index 000000000..7668e0ea5 Binary files /dev/null and b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/4k_item_cell.png differ diff --git a/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/64k_fluid_cell.png b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/64k_fluid_cell.png new file mode 100644 index 000000000..0d4c7e2cc Binary files /dev/null and b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/64k_fluid_cell.png differ diff --git a/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/64k_item_cell.png b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/64k_item_cell.png new file mode 100644 index 000000000..816f526a2 Binary files /dev/null and b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/64k_item_cell.png differ diff --git a/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/creative_cell.png b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/creative_cell.png new file mode 100644 index 000000000..85fe9b851 Binary files /dev/null and b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/creative_cell.png differ diff --git a/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/default_cell.png b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/default_cell.png new file mode 100644 index 000000000..3a78b7800 Binary files /dev/null and b/src/main/resources/assets/appliedenergistics2/textures/block/drive/cells/default_cell.png differ