mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-11-06 16:33:00 +00:00
Most of the port is pretty simple. The main problems are regarding
changes to Minecraft's rendering system.
- Remove several rendering tweaks until Forge's compatibility it
brought up-to-date
- Map rendering for pocket computers and printouts
- Item frame rendering for printouts
- Custom block outlines for monitors and cables/wired modems
- Custom breaking progress for cables/wired modems
- Turtle "Dinnerbone" rendering is currently broken, as normals are not
correctly transformed.
- Rewrite FixedWidthFontRenderer to to the buffer in a single sweep.
In order to do this, the term_font now also bundles a "background"
section, which is just a blank region of the screen.
- Render monitors using a VBO instead of a call list. I haven't
compared performance yet, but it manages to render a 6x5 array of
_static_ monitors at almost 60fps, which seems pretty reasonable.
78 lines
2.9 KiB
Java
78 lines
2.9 KiB
Java
/*
|
|
* This file is part of ComputerCraft - http://www.computercraft.info
|
|
* Copyright Daniel Ratcliffe, 2011-2020. Do not distribute without permission.
|
|
* Send enquiries to dratcliffe@gmail.com
|
|
*/
|
|
package dan200.computercraft.client.render;
|
|
|
|
import com.google.gson.JsonDeserializationContext;
|
|
import com.google.gson.JsonObject;
|
|
import com.mojang.datafixers.util.Pair;
|
|
import dan200.computercraft.ComputerCraft;
|
|
import net.minecraft.client.renderer.model.*;
|
|
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
|
import net.minecraft.resources.IResourceManager;
|
|
import net.minecraft.util.JSONUtils;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraftforge.client.model.IModelConfiguration;
|
|
import net.minecraftforge.client.model.IModelLoader;
|
|
import net.minecraftforge.client.model.geometry.IModelGeometry;
|
|
|
|
import javax.annotation.Nonnull;
|
|
import java.util.Collection;
|
|
import java.util.HashSet;
|
|
import java.util.Set;
|
|
import java.util.function.Function;
|
|
|
|
public final class TurtleModelLoader implements IModelLoader<TurtleModelLoader.TurtleModel>
|
|
{
|
|
private static final ResourceLocation COLOUR_TURTLE_MODEL = new ResourceLocation( ComputerCraft.MOD_ID, "block/turtle_colour" );
|
|
|
|
public static final TurtleModelLoader INSTANCE = new TurtleModelLoader();
|
|
|
|
private TurtleModelLoader()
|
|
{
|
|
}
|
|
|
|
@Override
|
|
public void onResourceManagerReload( @Nonnull IResourceManager manager )
|
|
{
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public TurtleModel read( @Nonnull JsonDeserializationContext deserializationContext, @Nonnull JsonObject modelContents )
|
|
{
|
|
ResourceLocation model = new ResourceLocation( JSONUtils.getString( modelContents, "model" ) );
|
|
return new TurtleModel( model );
|
|
}
|
|
|
|
public static final class TurtleModel implements IModelGeometry<TurtleModel>
|
|
{
|
|
private final ResourceLocation family;
|
|
|
|
private TurtleModel( ResourceLocation family )
|
|
{
|
|
this.family = family;
|
|
}
|
|
|
|
@Override
|
|
public Collection<Material> getTextures( IModelConfiguration owner, Function<ResourceLocation, IUnbakedModel> modelGetter, Set<Pair<String, String>> missingTextureErrors )
|
|
{
|
|
Set<Material> materials = new HashSet<>();
|
|
materials.addAll( modelGetter.apply( family ).getTextures( modelGetter, missingTextureErrors ) );
|
|
materials.addAll( modelGetter.apply( COLOUR_TURTLE_MODEL ).getTextures( modelGetter, missingTextureErrors ) );
|
|
return materials;
|
|
}
|
|
|
|
@Override
|
|
public IBakedModel bake( IModelConfiguration owner, ModelBakery bakery, Function<Material, TextureAtlasSprite> spriteGetter, IModelTransform transform, ItemOverrideList overrides, ResourceLocation modelLocation )
|
|
{
|
|
return new TurtleSmartItemModel(
|
|
bakery.getBakedModel( family, transform, spriteGetter ),
|
|
bakery.getBakedModel( COLOUR_TURTLE_MODEL, transform, spriteGetter )
|
|
);
|
|
}
|
|
}
|
|
}
|