831, doesnt seem impossible
This commit is contained in:
parent
4e03ac893c
commit
e8396dbc33
48 changed files with 328 additions and 704 deletions
|
@ -1,221 +0,0 @@
|
|||
/*
|
||||
* This file is part of TechReborn, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) 2018 TechReborn
|
||||
*
|
||||
* 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 techreborn.client.render;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import net.minecraft.client.render.VertexFormat;
|
||||
import net.minecraft.client.render.model.BakedModel;
|
||||
import net.minecraft.client.render.model.BakedQuad;
|
||||
import net.minecraft.client.render.model.UnbakedModel;
|
||||
import net.minecraft.client.render.model.json.ModelItemPropertyOverrideList;
|
||||
import net.minecraft.client.render.model.json.ModelTransformation;
|
||||
import net.minecraft.client.renderer.model.*;
|
||||
import net.minecraft.client.texture.Sprite;
|
||||
import net.minecraft.client.util.ModelIdentifier;
|
||||
import net.minecraft.resource.ResourceManager;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
|
||||
//TODO 1.13 very broken, look at ModelDynBucket for help porting this fully
|
||||
@Environment(EnvType.CLIENT)
|
||||
public class ModelDynamicCell implements UnbakedModel {
|
||||
|
||||
public static final ModelDynamicCell MODEL = new ModelDynamicCell(
|
||||
new Identifier("techreborn:items/cell_cover"),
|
||||
new Identifier("techreborn:items/cell_empty")
|
||||
);
|
||||
|
||||
public static final ModelIdentifier MODEL_LOCATION = new ModelIdentifier(new Identifier("techreborn", "dynamic_cell"), "default");
|
||||
|
||||
private static final float NORTH_Z_FLUID = 7.6f / 16f;
|
||||
private static final float SOUTH_Z_FLUID = 8.4f / 16f;
|
||||
|
||||
public static void init() {
|
||||
// ModelLoader.setCustomMeshDefinition(TRContent.CELL, stack -> MODEL_LOCATION);
|
||||
// ModelBakery.registerItemVariants(TRContent.CELL, MODEL_LOCATION);
|
||||
ModelLoaderRegistry.registerLoader(new DynamicCellLoader());
|
||||
}
|
||||
|
||||
private final Identifier baseTexture;
|
||||
private final Identifier emptyTexture;
|
||||
private final Fluid fluid;
|
||||
|
||||
public ModelDynamicCell(Identifier baseTexture, Identifier emptyTexture) {
|
||||
this(baseTexture, emptyTexture, null);
|
||||
}
|
||||
|
||||
public ModelDynamicCell(Identifier baseTexture, Identifier emptyTexture, Fluid fluid) {
|
||||
this.baseTexture = baseTexture;
|
||||
this.emptyTexture = emptyTexture;
|
||||
this.fluid = fluid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Identifier> getModelDependencies() {
|
||||
return ImmutableList.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Identifier> getTextureDependencies(Function<Identifier, UnbakedModel> modelGetter, Set<String> missingTextureErrors) {
|
||||
return ImmutableList.of(baseTexture, emptyTexture);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BakedModel bake(Function<Identifier, UnbakedModel> modelGetter, Function<Identifier, Sprite> spriteGetter, IModelState state, boolean uvlock, VertexFormat format) {
|
||||
|
||||
ImmutableMap<ModelTransformation.Type, TRSRTransformation> transformMap = PerspectiveMapWrapper.getTransforms(state);
|
||||
TRSRTransformation transform = state.apply(Optional.empty()).orElse(TRSRTransformation.identity());
|
||||
|
||||
ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder();
|
||||
builder.addAll(new ItemLayerModel(ImmutableList.of(baseTexture)).bake(modelGetter, spriteGetter, state, uvlock, format).getQuads(null, null, new Random()));
|
||||
|
||||
Identifier sprite = fluid != null ? fluid.getStill() : emptyTexture;
|
||||
int color = fluid != null ? fluid.getColor() : Color.WHITE.getRGB();
|
||||
Sprite fluidSprite = spriteGetter.apply(sprite);
|
||||
if (fluid != null) {
|
||||
if (fluidSprite != null) {
|
||||
builder.add(ItemTextureQuadConverter.genQuad(format, transform, 5, 2, 11, 14, NORTH_Z_FLUID, fluidSprite, Direction.NORTH, color, -1));
|
||||
builder.add(ItemTextureQuadConverter.genQuad(format, transform, 5, 2, 11, 14, SOUTH_Z_FLUID, fluidSprite, Direction.SOUTH, color, -1));
|
||||
}
|
||||
}
|
||||
|
||||
return new BakedDynamicCell(builder.build(), this, spriteGetter.apply(baseTexture), format, transformMap);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public IModelState getDefaultState() {
|
||||
return TRSRTransformation.identity();
|
||||
}
|
||||
|
||||
public static class DynamicCellLoader implements ICustomModelLoader {
|
||||
|
||||
@Override
|
||||
public boolean accepts(Identifier modelLocation) {
|
||||
return modelLocation.getNamespace().equals("techreborn") && modelLocation.getPath().contains("dynamic_cell");
|
||||
}
|
||||
|
||||
@Override
|
||||
public UnbakedModel loadModel(Identifier modelLocation) {
|
||||
return MODEL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResourceManagerReload(ResourceManager resourceManager) {}
|
||||
|
||||
}
|
||||
|
||||
public static class BakedDynamicCell extends BakedItemModel {
|
||||
|
||||
private final List<BakedQuad> quads;
|
||||
private final ModelDynamicCell parent;
|
||||
private final Sprite particle;
|
||||
private final VertexFormat format;
|
||||
private final ImmutableMap<ModelTransformation.Type, TRSRTransformation> transformMap;
|
||||
|
||||
public BakedDynamicCell(ImmutableList<BakedQuad> quads,
|
||||
ModelDynamicCell parent,
|
||||
Sprite particle,
|
||||
VertexFormat format,
|
||||
ImmutableMap<ModelTransformation.Type, TRSRTransformation> transformMap) {
|
||||
super(quads, particle, transformMap, null /* TODO fix this */);
|
||||
this.transformMap = transformMap;
|
||||
this.quads = quads;
|
||||
this.parent = parent;
|
||||
this.particle = particle;
|
||||
this.format = format;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAmbientOcclusion() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isGui3d() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBuiltInRenderer() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sprite getParticleTexture() {
|
||||
return particle;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelTransformation getItemCameraTransforms() {
|
||||
return ModelHelper.DEFAULT_ITEM_TRANSFORMS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelItemPropertyOverrideList getOverrides() {
|
||||
return OVERRIDES;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static final OverrideHandler OVERRIDES = new OverrideHandler();
|
||||
|
||||
public static class OverrideHandler extends ModelItemPropertyOverrideList {
|
||||
|
||||
private final HashMap<String, BakedModel> modelCache = new HashMap<>();
|
||||
|
||||
// private final Function<ResourceLocation, TextureAtlasSprite> textureGetter = location ->
|
||||
// Minecraft.getInstance().getTextureMapBlocks().getAtlasSprite(location.toString());
|
||||
|
||||
// private OverrideHandler() {
|
||||
// super(ImmutableList.of());
|
||||
// }
|
||||
|
||||
// @Override
|
||||
// public IBakedModel handleItemState(IBakedModel originalModel, ItemStack stack, World world, EntityLivingBase entity) {
|
||||
// FluidStack fluidStack = DynamicCell.getFluidHandler(stack).getFluid();
|
||||
// if (fluidStack == null) {
|
||||
// //return default bucket
|
||||
// return originalModel;
|
||||
// }
|
||||
// String name = fluidStack.getFluid().getName();
|
||||
// if (!modelCache.containsKey(name)) {
|
||||
// BakedDynamicCell bakedCell = (BakedDynamicCell) originalModel;
|
||||
// ModelDynamicCell model = new ModelDynamicCell(bakedCell.parent.baseTexture, bakedCell.parent.emptyTexture, fluidStack.getFluid());
|
||||
// modelCache.put(name, model.bake(new SimpleModelState(bakedCell.transformMap), bakedCell.format, textureGetter));
|
||||
// }
|
||||
// return modelCache.get(name);
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue