A slightly better way of loading the book model texture
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package electroblob.wizardry.client.model;
|
package electroblob.wizardry.client.model;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
import electroblob.wizardry.Wizardry;
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.block.BlockBookshelf;
|
import electroblob.wizardry.block.BlockBookshelf;
|
||||||
import net.minecraft.client.renderer.block.model.IBakedModel;
|
import net.minecraft.client.renderer.block.model.IBakedModel;
|
||||||
@@ -11,13 +12,26 @@ import net.minecraftforge.client.model.IModel;
|
|||||||
import net.minecraftforge.client.model.ModelLoaderRegistry;
|
import net.minecraftforge.client.model.ModelLoaderRegistry;
|
||||||
import net.minecraftforge.common.model.IModelState;
|
import net.minecraftforge.common.model.IModelState;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
public class ModelBookshelf implements IModel {
|
public class ModelBookshelf implements IModel {
|
||||||
|
|
||||||
|
private static final ResourceLocation BOOK_TEXTURE = new ResourceLocation(Wizardry.MODID, "blocks/books");
|
||||||
|
|
||||||
|
private static final List<ResourceLocation> bookModelLocations = new ArrayList<>();
|
||||||
|
|
||||||
private final ModelResourceLocation bookshelfModelLocation;
|
private final ModelResourceLocation bookshelfModelLocation;
|
||||||
private final String variant;
|
private final String variant;
|
||||||
|
|
||||||
|
static {
|
||||||
|
for(int i = 0; i < BlockBookshelf.SLOT_COUNT; i++){
|
||||||
|
bookModelLocations.add(new ResourceLocation(Wizardry.MODID, "bookshelf_parts/books" + i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public ModelBookshelf(String bookshelfModelName){
|
public ModelBookshelf(String bookshelfModelName){
|
||||||
String[] args = bookshelfModelName.split("#", 2);
|
String[] args = bookshelfModelName.split("#", 2);
|
||||||
String model = args[0];
|
String model = args[0];
|
||||||
@@ -37,10 +51,12 @@ public class ModelBookshelf implements IModel {
|
|||||||
IBakedModel[] books = new IBakedModel[BlockBookshelf.SLOT_COUNT];
|
IBakedModel[] books = new IBakedModel[BlockBookshelf.SLOT_COUNT];
|
||||||
|
|
||||||
for(int i = 0; i < BlockBookshelf.SLOT_COUNT; i++){
|
for(int i = 0; i < BlockBookshelf.SLOT_COUNT; i++){
|
||||||
IModel bookModel = ModelLoaderRegistry.getModel(new ModelResourceLocation(new ResourceLocation(Wizardry.MODID, "bookshelf_parts/books" + i), variant));
|
IModel bookModel = ModelLoaderRegistry.getModel(new ModelResourceLocation(bookModelLocations.get(i), variant));
|
||||||
books[i] = bookModel.bake(bookModel.getDefaultState(), format, bakedTextureGetter); // Same here!
|
books[i] = bookModel.bake(bookModel.getDefaultState(), format, bakedTextureGetter); // Same here!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// To clarify: the whole point of doing this was to avoid having to bake 4 * 2^12 models per bookshelf type
|
||||||
|
// Therefore we have to have a baked bookshelf model that's kind of dynamic
|
||||||
return new BakedModelBookshelf(bookshelf, books);
|
return new BakedModelBookshelf(bookshelf, books);
|
||||||
|
|
||||||
}catch(Exception exception){
|
}catch(Exception exception){
|
||||||
@@ -50,4 +66,26 @@ public class ModelBookshelf implements IModel {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<ResourceLocation> getDependencies(){
|
||||||
|
return bookModelLocations;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<ResourceLocation> getTextures(){
|
||||||
|
|
||||||
|
// I simply have no idea how I'm *supposed* to do it, so I'm using the best solution I can come up with
|
||||||
|
// This is at least better than manually registering it with TextureStitchEvent
|
||||||
|
// However I'm also pretty sure that if a texture pack decides to change the texture that the book models point
|
||||||
|
// to, it won't work... but since nobody ever will, I don't really care!
|
||||||
|
|
||||||
|
// Why am I confused?
|
||||||
|
// 1. How come it magically finds the bookshelf texture, but not the book texture?
|
||||||
|
// 2. Why don't the textures get retrieved automatically based on getDependencies? Surely that's the point?
|
||||||
|
// 3. Is it correct to use getModel() to get the dependency models upon construction of this class so I can
|
||||||
|
// access their textures properly? Or is that too early?
|
||||||
|
// 4. If so, what's the point of getDependencies, and why should I override it?
|
||||||
|
return ImmutableList.of(BOOK_TEXTURE);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -378,9 +378,4 @@ public final class WizardryModels {
|
|||||||
new ModelResourceLocation(item.getRegistryName(), variant));
|
new ModelResourceLocation(item.getRegistryName(), variant));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public static void onTextureStitchEvent(TextureStitchEvent.Pre event){
|
|
||||||
event.getMap().registerSprite(new ResourceLocation(Wizardry.MODID, "blocks/books"));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user