All parameters on one line (for now)
Easier picking of 1.7 changes
This commit is contained in:
@@ -48,9 +48,7 @@ import appeng.util.ReadableNumberConverter;
|
||||
*/
|
||||
public class AppEngRenderItem extends RenderItem
|
||||
{
|
||||
public AppEngRenderItem(
|
||||
final TextureManager textureManager,
|
||||
final ModelManager modelManager )
|
||||
public AppEngRenderItem( final TextureManager textureManager, final ModelManager modelManager )
|
||||
{
|
||||
super( textureManager, modelManager );
|
||||
}
|
||||
@@ -61,12 +59,7 @@ public class AppEngRenderItem extends RenderItem
|
||||
private IAEItemStack aeStack = null;
|
||||
|
||||
@Override
|
||||
public void renderItemOverlayIntoGUI(
|
||||
final FontRenderer fontRenderer,
|
||||
final ItemStack is,
|
||||
final int xPos,
|
||||
final int yPos,
|
||||
final String text )
|
||||
public void renderItemOverlayIntoGUI( final FontRenderer fontRenderer, final ItemStack is, final int xPos, final int yPos, final String text )
|
||||
{
|
||||
if( is != null )
|
||||
{
|
||||
|
||||
@@ -443,11 +443,11 @@ public class BaseBlockRender<B extends AEBaseBlock, T extends AEBaseTile>
|
||||
|
||||
protected void renderBlockBounds( final ModelGenerator renderer,
|
||||
|
||||
double minX, double minY, double minZ,
|
||||
double minX, double minY, double minZ,
|
||||
|
||||
double maxX, double maxY, double maxZ,
|
||||
double maxX, double maxY, double maxZ,
|
||||
|
||||
final EnumFacing x, final EnumFacing y, final EnumFacing z )
|
||||
final EnumFacing x, final EnumFacing y, final EnumFacing z )
|
||||
{
|
||||
minX /= 16.0;
|
||||
minY /= 16.0;
|
||||
@@ -557,28 +557,28 @@ public class BaseBlockRender<B extends AEBaseBlock, T extends AEBaseTile>
|
||||
final double layerBX = 0.0;
|
||||
final double layerAY = 0.0;
|
||||
this.renderFace( orientation, tess, offsetX, offsetY, offsetZ, layerAX, layerAY, layerAZ, layerBX, layerBY, layerBZ,
|
||||
// u -> u
|
||||
0, 1.0,
|
||||
// v -> v
|
||||
0, edgeThickness, ico, flip );
|
||||
// u -> u
|
||||
0, 1.0,
|
||||
// v -> v
|
||||
0, edgeThickness, ico, flip );
|
||||
|
||||
this.renderFace( orientation, tess, offsetX, offsetY, offsetZ, layerAX, layerAY, layerAZ, layerBX, layerBY, layerBZ,
|
||||
// u -> u
|
||||
0.0, edgeThickness,
|
||||
// v -> v
|
||||
edgeThickness, 1.0 - edgeThickness, ico, flip );
|
||||
// u -> u
|
||||
0.0, edgeThickness,
|
||||
// v -> v
|
||||
edgeThickness, 1.0 - edgeThickness, ico, flip );
|
||||
|
||||
this.renderFace( orientation, tess, offsetX, offsetY, offsetZ, layerAX, layerAY, layerAZ, layerBX, layerBY, layerBZ,
|
||||
// u -> u
|
||||
1.0 - edgeThickness, 1.0,
|
||||
// v -> v
|
||||
edgeThickness, 1.0 - edgeThickness, ico, flip );
|
||||
// u -> u
|
||||
1.0 - edgeThickness, 1.0,
|
||||
// v -> v
|
||||
edgeThickness, 1.0 - edgeThickness, ico, flip );
|
||||
|
||||
this.renderFace( orientation, tess, offsetX, offsetY, offsetZ, layerAX, layerAY, layerAZ, layerBX, layerBY, layerBZ,
|
||||
// u -> u
|
||||
0, 1.0,
|
||||
// v -> v
|
||||
1.0 - edgeThickness, 1.0, ico, flip );
|
||||
// u -> u
|
||||
0, 1.0,
|
||||
// v -> v
|
||||
1.0 - edgeThickness, 1.0, ico, flip );
|
||||
}
|
||||
|
||||
@SideOnly( Side.CLIENT )
|
||||
|
||||
@@ -31,8 +31,7 @@ public class BusRenderer
|
||||
return this.mg;
|
||||
}
|
||||
|
||||
public void setRenderer(
|
||||
ModelGenerator renderer )
|
||||
public void setRenderer( ModelGenerator renderer )
|
||||
{
|
||||
this.mg = renderer;
|
||||
}
|
||||
|
||||
@@ -10,17 +10,8 @@ import net.minecraft.world.IBlockAccess;
|
||||
public interface ISimpleBlockRenderingHandler
|
||||
{
|
||||
|
||||
void renderInventoryBlock(
|
||||
Block block,
|
||||
int metadata,
|
||||
int modelID,
|
||||
ModelGenerator renderer );
|
||||
void renderInventoryBlock( Block block, int metadata, int modelID, ModelGenerator renderer );
|
||||
|
||||
boolean renderWorldBlock(
|
||||
IBlockAccess world,
|
||||
BlockPos pos,
|
||||
Block block,
|
||||
int modelId,
|
||||
ModelGenerator renderer );
|
||||
boolean renderWorldBlock( IBlockAccess world, BlockPos pos, Block block, int modelId, ModelGenerator renderer );
|
||||
|
||||
}
|
||||
|
||||
@@ -18,8 +18,7 @@ public class IconUnwrapper extends TextureAtlasSprite
|
||||
private final float min_v;
|
||||
private final float max_v;
|
||||
|
||||
protected IconUnwrapper(
|
||||
final IAESprite src )
|
||||
protected IconUnwrapper( final IAESprite src )
|
||||
{
|
||||
super( src.getIconName() );
|
||||
this.width = src.getIconWidth();
|
||||
|
||||
@@ -90,8 +90,7 @@ public class ModelGenerator
|
||||
}
|
||||
|
||||
@Override
|
||||
public List getFaceQuads(
|
||||
final EnumFacing p_177551_1_ )
|
||||
public List getFaceQuads( final EnumFacing p_177551_1_ )
|
||||
{
|
||||
return this.faces[p_177551_1_.ordinal()];
|
||||
}
|
||||
@@ -125,16 +124,7 @@ public class ModelGenerator
|
||||
private float tx = 0, ty = 0, tz = 0;
|
||||
private final float[] defUVs = { 0, 0, 1, 1 };
|
||||
|
||||
private final float[] quadsUV = {
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1
|
||||
};
|
||||
private final float[] quadsUV = { 0, 0, 1, 1, 0, 0, 1, 1 };
|
||||
private EnumSet<EnumFacing> renderFaces = EnumSet.allOf( EnumFacing.class );
|
||||
private boolean flipTexture = false;
|
||||
private final List<SMFace> faces = new ArrayList();
|
||||
@@ -145,8 +135,7 @@ public class ModelGenerator
|
||||
private EnumFacing currentFace = EnumFacing.UP;
|
||||
private int color = -1;
|
||||
|
||||
public void setRenderBoundsFromBlock(
|
||||
final Block block )
|
||||
public void setRenderBoundsFromBlock( final Block block )
|
||||
{
|
||||
if( block == null )
|
||||
{
|
||||
@@ -161,13 +150,7 @@ public class ModelGenerator
|
||||
this.setRenderMaxZ( block.getBlockBoundsMaxZ() );
|
||||
}
|
||||
|
||||
public void setRenderBounds(
|
||||
final double d,
|
||||
final double e,
|
||||
final double f,
|
||||
final double g,
|
||||
final double h,
|
||||
final double i )
|
||||
public void setRenderBounds( final double d, final double e, final double f, final double g, final double h, final double i )
|
||||
{
|
||||
this.setRenderMinX( d );
|
||||
this.setRenderMinY( e );
|
||||
@@ -177,74 +160,49 @@ public class ModelGenerator
|
||||
this.setRenderMaxZ( i );
|
||||
}
|
||||
|
||||
public void setBrightness(
|
||||
final int i )
|
||||
public void setBrightness( final int i )
|
||||
{
|
||||
this.brightness = i;
|
||||
}
|
||||
|
||||
public void setColorRGBA_F(
|
||||
final int r,
|
||||
final int g,
|
||||
final int b,
|
||||
final float a )
|
||||
public void setColorRGBA_F( final int r, final int g, final int b, final float a )
|
||||
{
|
||||
final int alpha = (int) ( a * 0xff );
|
||||
this.color = alpha << 24 |
|
||||
r << 16 |
|
||||
b << 8 |
|
||||
b;
|
||||
this.color = alpha << 24 | r << 16 | b << 8 | b;
|
||||
}
|
||||
|
||||
public void setColorOpaque_I(
|
||||
final int whiteVariant )
|
||||
public void setColorOpaque_I( final int whiteVariant )
|
||||
{
|
||||
final int alpha = 0xff;
|
||||
this.color = // alpha << 24 |
|
||||
whiteVariant;
|
||||
}
|
||||
|
||||
public void setColorOpaque(
|
||||
final int r,
|
||||
final int g,
|
||||
final int b )
|
||||
public void setColorOpaque( final int r, final int g, final int b )
|
||||
{
|
||||
final int alpha = 0xff;
|
||||
this.color = // alpha << 24 |
|
||||
r << 16 |
|
||||
g << 8 |
|
||||
b;
|
||||
r << 16 | g << 8 | b;
|
||||
}
|
||||
|
||||
public void setColorOpaque_F(
|
||||
final int r,
|
||||
final int g,
|
||||
final int b )
|
||||
public void setColorOpaque_F( final int r, final int g, final int b )
|
||||
{
|
||||
final int alpha = 0xff;
|
||||
this.color = // alpha << 24 |
|
||||
Math.min( 0xff, Math.max( 0, r ) ) << 16 |
|
||||
Math.min( 0xff, Math.max( 0, g ) ) << 8 |
|
||||
Math.min( 0xff, Math.max( 0, b ) );
|
||||
Math.min( 0xff, Math.max( 0, r ) ) << 16 | Math.min( 0xff, Math.max( 0, g ) ) << 8 | Math.min( 0xff, Math.max( 0, b ) );
|
||||
}
|
||||
|
||||
public void setColorOpaque_F(
|
||||
final float rf,
|
||||
final float bf,
|
||||
final float gf )
|
||||
public void setColorOpaque_F( final float rf, final float bf, final float gf )
|
||||
{
|
||||
final int r = (int) ( rf * 0xff );
|
||||
final int g = (int) ( gf * 0xff );
|
||||
final int b = (int) ( bf * 0xff );
|
||||
final int alpha = 0xff;
|
||||
this.color = // alpha << 24 |
|
||||
Math.min( 0xff, Math.max( 0, r ) ) << 16 |
|
||||
Math.min( 0xff, Math.max( 0, g ) ) << 8 |
|
||||
Math.min( 0xff, Math.max( 0, b ) );
|
||||
Math.min( 0xff, Math.max( 0, r ) ) << 16 | Math.min( 0xff, Math.max( 0, g ) ) << 8 | Math.min( 0xff, Math.max( 0, b ) );
|
||||
}
|
||||
|
||||
public IAESprite getIcon(
|
||||
final ItemStack is )
|
||||
public IAESprite getIcon( final ItemStack is )
|
||||
{
|
||||
final Item it = is.getItem();
|
||||
|
||||
@@ -272,8 +230,7 @@ public class ModelGenerator
|
||||
return new MissingIcon( is );
|
||||
}
|
||||
|
||||
public IAESprite[] getIcon(
|
||||
final IBlockState state )
|
||||
public IAESprite[] getIcon( final IBlockState state )
|
||||
{
|
||||
final IAESprite[] out = new IAESprite[6];
|
||||
|
||||
@@ -334,52 +291,20 @@ public class ModelGenerator
|
||||
return this.getIcon( state );
|
||||
}
|
||||
|
||||
public void addVertexWithUV(
|
||||
final EnumFacing face,
|
||||
final double x,
|
||||
final double y,
|
||||
final double z,
|
||||
final double u,
|
||||
final double v )
|
||||
public void addVertexWithUV( final EnumFacing face, final double x, final double y, final double z, final double u, final double v )
|
||||
{
|
||||
this.points[this.point++] = new float[] { (float) x + this.tx, (float) y + this.ty, (float) z + this.tz, (float) u, (float) v };
|
||||
|
||||
if( this.point == 4 )
|
||||
{
|
||||
this.brightness = -1;
|
||||
final int[] vertData = {
|
||||
Float.floatToRawIntBits( this.points[0][0] ),
|
||||
Float.floatToRawIntBits( this.points[0][1] ),
|
||||
Float.floatToRawIntBits( this.points[0][2] ),
|
||||
this.brightness,
|
||||
Float.floatToRawIntBits( this.points[0][3] ),
|
||||
Float.floatToRawIntBits( this.points[0][4] ),
|
||||
0,
|
||||
final int[] vertData = { Float.floatToRawIntBits( this.points[0][0] ), Float.floatToRawIntBits( this.points[0][1] ), Float.floatToRawIntBits( this.points[0][2] ), this.brightness, Float.floatToRawIntBits( this.points[0][3] ), Float.floatToRawIntBits( this.points[0][4] ), 0,
|
||||
|
||||
Float.floatToRawIntBits( this.points[1][0] ),
|
||||
Float.floatToRawIntBits( this.points[1][1] ),
|
||||
Float.floatToRawIntBits( this.points[1][2] ),
|
||||
this.brightness,
|
||||
Float.floatToRawIntBits( this.points[1][3] ),
|
||||
Float.floatToRawIntBits( this.points[1][4] ),
|
||||
0,
|
||||
Float.floatToRawIntBits( this.points[1][0] ), Float.floatToRawIntBits( this.points[1][1] ), Float.floatToRawIntBits( this.points[1][2] ), this.brightness, Float.floatToRawIntBits( this.points[1][3] ), Float.floatToRawIntBits( this.points[1][4] ), 0,
|
||||
|
||||
Float.floatToRawIntBits( this.points[2][0] ),
|
||||
Float.floatToRawIntBits( this.points[2][1] ),
|
||||
Float.floatToRawIntBits( this.points[2][2] ),
|
||||
this.brightness,
|
||||
Float.floatToRawIntBits( this.points[2][3] ),
|
||||
Float.floatToRawIntBits( this.points[2][4] ),
|
||||
0,
|
||||
Float.floatToRawIntBits( this.points[2][0] ), Float.floatToRawIntBits( this.points[2][1] ), Float.floatToRawIntBits( this.points[2][2] ), this.brightness, Float.floatToRawIntBits( this.points[2][3] ), Float.floatToRawIntBits( this.points[2][4] ), 0,
|
||||
|
||||
Float.floatToRawIntBits( this.points[3][0] ),
|
||||
Float.floatToRawIntBits( this.points[3][1] ),
|
||||
Float.floatToRawIntBits( this.points[3][2] ),
|
||||
this.brightness,
|
||||
Float.floatToRawIntBits( this.points[3][3] ),
|
||||
Float.floatToRawIntBits( this.points[3][4] ),
|
||||
0,
|
||||
};
|
||||
Float.floatToRawIntBits( this.points[3][0] ), Float.floatToRawIntBits( this.points[3][1] ), Float.floatToRawIntBits( this.points[3][2] ), this.brightness, Float.floatToRawIntBits( this.points[3][3] ), Float.floatToRawIntBits( this.points[3][4] ), 0, };
|
||||
|
||||
this.generatedModel.general.add( new IColoredBakedQuad.ColoredBakedQuad( vertData, this.color, face ) );
|
||||
|
||||
@@ -387,9 +312,7 @@ public class ModelGenerator
|
||||
}
|
||||
}
|
||||
|
||||
public boolean renderStandardBlock(
|
||||
final Block block,
|
||||
final BlockPos pos )
|
||||
public boolean renderStandardBlock( final Block block, final BlockPos pos )
|
||||
{
|
||||
// setRenderBoundsFromBlock( block );
|
||||
|
||||
@@ -406,10 +329,7 @@ public class ModelGenerator
|
||||
return false;
|
||||
}
|
||||
|
||||
public void setTranslation(
|
||||
final int x,
|
||||
final int y,
|
||||
final int z )
|
||||
public void setTranslation( final int x, final int y, final int z )
|
||||
{
|
||||
this.tx = x;
|
||||
this.ty = y;
|
||||
@@ -421,10 +341,7 @@ public class ModelGenerator
|
||||
return MinecraftForgeClient.getRenderLayer() == EnumWorldBlockLayer.TRANSLUCENT;
|
||||
}
|
||||
|
||||
private float[] getFaceUvs(
|
||||
final EnumFacing face,
|
||||
final Vector3f to_16,
|
||||
final Vector3f from_16 )
|
||||
private float[] getFaceUvs( final EnumFacing face, final Vector3f to_16, final Vector3f from_16 )
|
||||
{
|
||||
float from_a = 0;
|
||||
float from_b = 0;
|
||||
@@ -494,10 +411,7 @@ public class ModelGenerator
|
||||
return afloat;
|
||||
}
|
||||
|
||||
public void renderFaceXNeg(
|
||||
final Block blk,
|
||||
final BlockPos pos,
|
||||
final IAESprite lights )
|
||||
public void renderFaceXNeg( final Block blk, final BlockPos pos, final IAESprite lights )
|
||||
{
|
||||
final boolean isEdge = this.getRenderMinX() < 0.0001;
|
||||
final Vector3f to = new Vector3f( (float) this.getRenderMinX() * 16.0f, (float) this.getRenderMinY() * 16.0f, (float) this.getRenderMinZ() * 16.0f );
|
||||
@@ -507,10 +421,7 @@ public class ModelGenerator
|
||||
this.addFace( myFace, isEdge, to, from, this.defUVs, lights );
|
||||
}
|
||||
|
||||
public void renderFaceYNeg(
|
||||
final Block blk,
|
||||
final BlockPos pos,
|
||||
final IAESprite lights )
|
||||
public void renderFaceYNeg( final Block blk, final BlockPos pos, final IAESprite lights )
|
||||
{
|
||||
final boolean isEdge = this.getRenderMinY() < 0.0001;
|
||||
final Vector3f to = new Vector3f( (float) this.getRenderMinX() * 16.0f, (float) this.getRenderMinY() * 16.0f, (float) this.getRenderMinZ() * 16.0f );
|
||||
@@ -520,10 +431,7 @@ public class ModelGenerator
|
||||
this.addFace( myFace, isEdge, to, from, this.defUVs, lights );
|
||||
}
|
||||
|
||||
public void renderFaceZNeg(
|
||||
final Block blk,
|
||||
final BlockPos pos,
|
||||
final IAESprite lights )
|
||||
public void renderFaceZNeg( final Block blk, final BlockPos pos, final IAESprite lights )
|
||||
{
|
||||
final boolean isEdge = this.getRenderMinZ() < 0.0001;
|
||||
final Vector3f to = new Vector3f( (float) this.getRenderMinX() * 16.0f, (float) this.getRenderMinY() * 16.0f, (float) this.getRenderMinZ() * 16.0f );
|
||||
@@ -533,10 +441,7 @@ public class ModelGenerator
|
||||
this.addFace( myFace, isEdge, to, from, this.defUVs, lights );
|
||||
}
|
||||
|
||||
public void renderFaceYPos(
|
||||
final Block blk,
|
||||
final BlockPos pos,
|
||||
final IAESprite lights )
|
||||
public void renderFaceYPos( final Block blk, final BlockPos pos, final IAESprite lights )
|
||||
{
|
||||
final boolean isEdge = this.getRenderMaxY() > 0.9999;
|
||||
final Vector3f to = new Vector3f( (float) this.getRenderMinX() * 16.0f, (float) this.getRenderMaxY() * 16.0f, (float) this.getRenderMinZ() * 16.0f );
|
||||
@@ -546,10 +451,7 @@ public class ModelGenerator
|
||||
this.addFace( myFace, isEdge, to, from, this.defUVs, lights );
|
||||
}
|
||||
|
||||
public void renderFaceZPos(
|
||||
final Block blk,
|
||||
final BlockPos pos,
|
||||
final IAESprite lights )
|
||||
public void renderFaceZPos( final Block blk, final BlockPos pos, final IAESprite lights )
|
||||
{
|
||||
final boolean isEdge = this.getRenderMaxZ() > 0.9999;
|
||||
final Vector3f to = new Vector3f( (float) this.getRenderMinX() * 16.0f, (float) this.getRenderMinY() * 16.0f, (float) this.getRenderMaxZ() * 16.0f );
|
||||
@@ -559,10 +461,7 @@ public class ModelGenerator
|
||||
this.addFace( myFace, isEdge, to, from, this.defUVs, lights );
|
||||
}
|
||||
|
||||
public void renderFaceXPos(
|
||||
final Block blk,
|
||||
final BlockPos pos,
|
||||
final IAESprite lights )
|
||||
public void renderFaceXPos( final Block blk, final BlockPos pos, final IAESprite lights )
|
||||
{
|
||||
final boolean isEdge = this.getRenderMaxX() > 0.9999;
|
||||
final Vector3f to = new Vector3f( (float) this.getRenderMaxX() * 16.0f, (float) this.getRenderMinY() * 16.0f, (float) this.getRenderMinZ() * 16.0f );
|
||||
@@ -572,12 +471,7 @@ public class ModelGenerator
|
||||
this.addFace( myFace, isEdge, to, from, this.defUVs, lights );
|
||||
}
|
||||
|
||||
private void addFace(
|
||||
final EnumFacing face, final boolean isEdge,
|
||||
final Vector3f to,
|
||||
final Vector3f from,
|
||||
final float[] defUVs2,
|
||||
IAESprite texture )
|
||||
private void addFace( final EnumFacing face, final boolean isEdge, final Vector3f to, final Vector3f from, final float[] defUVs2, IAESprite texture )
|
||||
{
|
||||
if( this.getOverrideBlockTexture() != null )
|
||||
{
|
||||
@@ -587,10 +481,7 @@ public class ModelGenerator
|
||||
this.faces.add( new SMFace( face, isEdge, this.color, to, from, defUVs2, new IconUnwrapper( texture ) ) );
|
||||
}
|
||||
|
||||
public void setNormal(
|
||||
final float x,
|
||||
final float y,
|
||||
final float z )
|
||||
public void setNormal( final float x, final float y, final float z )
|
||||
{
|
||||
if( x > 0.5 )
|
||||
{
|
||||
@@ -618,8 +509,7 @@ public class ModelGenerator
|
||||
}
|
||||
}
|
||||
|
||||
public void setOverrideBlockTexture(
|
||||
final IAESprite object )
|
||||
public void setOverrideBlockTexture( final IAESprite object )
|
||||
{
|
||||
this.overrideBlockTexture = object;
|
||||
}
|
||||
|
||||
@@ -36,8 +36,7 @@ public class RenderBlocksWorkaround extends ModelGenerator
|
||||
private EnumSet<EnumFacing> renderFaces;
|
||||
private float opacity;
|
||||
|
||||
public void setTexture(
|
||||
final Object object )
|
||||
public void setTexture( final Object object )
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
}
|
||||
|
||||
@@ -23,13 +23,7 @@ public class SMFace
|
||||
|
||||
private final int color;
|
||||
|
||||
public SMFace(
|
||||
final EnumFacing face, final boolean isEdge,
|
||||
final int color,
|
||||
final Vector3f to,
|
||||
final Vector3f from,
|
||||
final float[] defUVs2,
|
||||
final TextureAtlasSprite iconUnwrapper )
|
||||
public SMFace( final EnumFacing face, final boolean isEdge, final int color, final Vector3f to, final Vector3f from, final float[] defUVs2, final TextureAtlasSprite iconUnwrapper )
|
||||
{
|
||||
this.color = color;
|
||||
this.face = face;
|
||||
|
||||
@@ -44,10 +44,7 @@ public class RenderBlockSkyChest extends BaseBlockRender<BlockSkyChest, TileSkyC
|
||||
|
||||
private static final ResourceLocation SKY_STONE_CHEST = new ResourceLocation( "appliedenergistics2", "textures/models/skychest.png" );
|
||||
private static final ResourceLocation SKY_BLOCK_CHEST = new ResourceLocation( "appliedenergistics2", "textures/models/skyblockchest.png" );
|
||||
private static final ResourceLocation[] METADATA_TO_TEXTURE = {
|
||||
SKY_STONE_CHEST,
|
||||
SKY_BLOCK_CHEST
|
||||
};
|
||||
private static final ResourceLocation[] METADATA_TO_TEXTURE = { SKY_STONE_CHEST, SKY_BLOCK_CHEST };
|
||||
|
||||
private final ModelChest model = new ModelChest();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user