hoosiertransfer-mod/src/main/java/net/minecraft/client/renderer/RegionRenderCache.java

130 lines
4.3 KiB
Java

package net.minecraft.client.renderer;
import java.util.Arrays;
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Blocks;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockPos;
import net.minecraft.util.Vec3i;
import net.minecraft.world.ChunkCache;
import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk;
/**+
* This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source code.
*
* Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!"
* Mod Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team
*
* EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
public class RegionRenderCache extends ChunkCache {
private final IBlockState DEFAULT_STATE = Blocks.air.getDefaultState();
private final BlockPos position;
private int[] combinedLights;
private IBlockState[] blockStates;
public RegionRenderCache(World worldIn, BlockPos posFromIn, BlockPos posToIn, int subIn) {
super(worldIn, posFromIn, posToIn, subIn);
this.position = posFromIn.subtract(new Vec3i(subIn, subIn, subIn));
boolean flag = true;
this.combinedLights = new int[8000];
Arrays.fill(this.combinedLights, -1);
this.blockStates = new IBlockState[8000];
}
public TileEntity getTileEntity(BlockPos blockpos) {
int i = (blockpos.getX() >> 4) - this.chunkX;
int j = (blockpos.getZ() >> 4) - this.chunkZ;
return this.chunkArray[i][j].getTileEntity(blockpos, Chunk.EnumCreateEntityType.QUEUED);
}
public int getCombinedLight(BlockPos blockpos, int i) {
int j = this.getPositionIndex(blockpos);
int k = this.combinedLights[j];
if (k == -1) {
k = super.getCombinedLight(blockpos, i);
this.combinedLights[j] = k;
}
return k;
}
public IBlockState getBlockState(BlockPos blockpos) {
int i = this.getPositionIndex(blockpos);
IBlockState iblockstate = this.blockStates[i];
if (iblockstate == null) {
iblockstate = this.getBlockStateRaw(blockpos);
this.blockStates[i] = iblockstate;
}
return iblockstate;
}
/**
* only use with a regular "net.minecraft.util.BlockPos"!
*/
public IBlockState getBlockStateFaster(BlockPos blockpos) {
int i = this.getPositionIndexFaster(blockpos);
IBlockState iblockstate = this.blockStates[i];
if (iblockstate == null) {
iblockstate = this.getBlockStateRawFaster(blockpos);
this.blockStates[i] = iblockstate;
}
return iblockstate;
}
private IBlockState getBlockStateRaw(BlockPos pos) {
if (pos.getY() >= 0 && pos.getY() < 256) {
int i = (pos.getX() >> 4) - this.chunkX;
int j = (pos.getZ() >> 4) - this.chunkZ;
return this.chunkArray[i][j].getBlockState(pos);
} else {
return DEFAULT_STATE;
}
}
/**
* only use with a regular "net.minecraft.util.BlockPos"!
*/
private IBlockState getBlockStateRawFaster(BlockPos pos) {
if (pos.y >= 0 && pos.y < 256) {
int i = (pos.x >> 4) - this.chunkX;
int j = (pos.z >> 4) - this.chunkZ;
return this.chunkArray[i][j].getBlockState(pos);
} else {
return DEFAULT_STATE;
}
}
private int getPositionIndex(BlockPos parBlockPos) {
int i = parBlockPos.getX() - this.position.getX();
int j = parBlockPos.getY() - this.position.getY();
int k = parBlockPos.getZ() - this.position.getZ();
return i * 400 + k * 20 + j;
}
/**
* only use with a regular "net.minecraft.util.BlockPos"!
*/
private int getPositionIndexFaster(BlockPos parBlockPos) {
int i = parBlockPos.x - this.position.x;
int j = parBlockPos.y - this.position.y;
int k = parBlockPos.z - this.position.z;
return i * 400 + k * 20 + j;
}
}