use of net.minecraft.world.IBlockAccess in project PneumaticCraft by MineMaarten.
the class BlockTrackUpgradeHandler method update.
@Override
public void update(EntityPlayer player, int rangeUpgrades) {
ticksExisted++;
SearchUpgradeHandler searchHandler = HUDHandler.instance().getSpecificRenderer(SearchUpgradeHandler.class);
if (ticksExisted % updateInterval == 0) {
int timeTaken = (int) accTime / updateInterval;
updateInterval = updateInterval * timeTaken / MAX_TIME;
if (updateInterval <= 1)
updateInterval = 2;
accTime = 0;
ticksExisted = 0;
}
accTime -= System.currentTimeMillis();
int blockTrackRange = BLOCK_TRACKING_RANGE + Math.min(rangeUpgrades, 5) * PneumaticValues.RANGE_UPGRADE_HELMET_RANGE_INCREASE;
int baseX = (int) Math.floor(player.posX) - blockTrackRange;
int baseY = (int) Math.floor(player.posY) - blockTrackRange + blockTrackRange * (ticksExisted % updateInterval) / (updateInterval / 2);
int maxY = (int) Math.floor(player.posY) - blockTrackRange + blockTrackRange * (ticksExisted % updateInterval + 1) / (updateInterval / 2);
baseY = MathHelper.clamp_int(baseY, 0, 255);
maxY = MathHelper.clamp_int(maxY, 0, 255);
int baseZ = (int) Math.floor(player.posZ) - blockTrackRange;
IBlockAccess chunkCache = new ChunkCache(player.worldObj, baseX, baseY, baseZ, baseX + 2 * blockTrackRange, maxY, baseZ + 2 * blockTrackRange, 0);
for (int i = baseX; i <= baseX + 2 * blockTrackRange; i++) {
for (int j = baseY; j < maxY; j++) {
for (int k = baseZ; k <= baseZ + 2 * blockTrackRange; k++) {
if (player.getDistance(i, j, k) > blockTrackRange)
continue;
TileEntity te = chunkCache.getTileEntity(i, j, k);
if (MinecraftForge.EVENT_BUS.post(new BlockTrackEvent(player.worldObj, i, j, k, te)))
continue;
if (searchHandler != null && te instanceof IInventory) {
searchHandler.checkInventoryForItems(te);
}
List<IBlockTrackEntry> entries = BlockTrackEntryList.instance.getEntriesForCoordinate(chunkCache, i, j, k, te);
if (entries.isEmpty())
continue;
boolean inList = false;
for (int l = 0; l < blockTargets.size(); l++) {
if (blockTargets.get(l).isSameTarget(player.worldObj, i, j, k)) {
inList = true;
// cancel lost targets
blockTargets.get(l).ticksExisted = Math.abs(blockTargets.get(l).ticksExisted);
blockTargets.get(l).setTileEntity(te);
break;
}
}
if (!inList) {
boolean sentUpdate = false;
for (IBlockTrackEntry entry : entries) {
if (entry.shouldBeUpdatedFromServer(te)) {
if (!sentUpdate) {
NetworkHandler.sendToServer(new PacketDescriptionPacketRequest(i, j, k));
sentUpdate = true;
}
}
}
addBlockTarget(new RenderBlockTarget(player.worldObj, player, i, j, k, te, this));
for (IBlockTrackEntry entry : entries) {
if (countBlockTrackersOfType(entry) == entry.spamThreshold() + 1) {
HUDHandler.instance().addMessage(new ArmorMessage(I18n.format("blockTracker.message.stopSpam", I18n.format(entry.getEntryName())), new ArrayList<String>(), 60, 0x7700AA00));
}
}
}
}
}
}
accTime += System.currentTimeMillis();
for (int i = 0; i < blockTargets.size(); i++) {
RenderBlockTarget blockTarget = blockTargets.get(i);
boolean wasNegative = blockTarget.ticksExisted < 0;
blockTarget.ticksExisted += CommonHUDHandler.getHandlerForPlayer(player).getSpeedFromUpgrades();
if (blockTarget.ticksExisted >= 0 && wasNegative)
blockTarget.ticksExisted = -1;
blockTarget.update();
if (blockTarget.getDistanceToEntity(player) > blockTrackRange + 5 || !blockTarget.isTargetStillValid()) {
if (blockTarget.ticksExisted > 0) {
blockTarget.ticksExisted = -60;
} else if (blockTarget.ticksExisted == -1) {
removeBlockTarget(i);
i--;
}
}
}
List<String> textList = new ArrayList<String>();
RenderBlockTarget focusedTarget = null;
for (RenderBlockTarget blockTarget : blockTargets) {
if (blockTarget.isInitialized() && blockTarget.isPlayerLooking()) {
focusedTarget = blockTarget;
break;
}
}
if (focusedTarget != null) {
blockTrackInfo.setTitle(focusedTarget.stat.getTitle());
textList.addAll(focusedTarget.textList);
} else {
blockTrackInfo.setTitle("Current tracked blocks:");
if (blockTypeCount == null || ticksExisted % 40 == 0) {
blockTypeCount = new int[BlockTrackEntryList.instance.trackList.size()];
for (RenderBlockTarget target : blockTargets) {
for (IBlockTrackEntry validEntry : target.getApplicableEntries()) {
blockTypeCount[BlockTrackEntryList.instance.trackList.indexOf(validEntry)]++;
}
}
}
for (int i = 0; i < blockTypeCount.length; i++) {
if (blockTypeCount[i] > 0) {
textList.add(blockTypeCount[i] + " " + I18n.format(BlockTrackEntryList.instance.trackList.get(i).getEntryName()));
}
}
if (textList.size() == 0)
textList.add("Tracking no blocks currently.");
}
blockTrackInfo.setText(textList);
}
use of net.minecraft.world.IBlockAccess in project MinecraftForge by MinecraftForge.
the class AnimationTESR method renderTileEntityFast.
public void renderTileEntityFast(@Nonnull T te, double x, double y, double z, float partialTick, int breakStage, @Nonnull VertexBuffer renderer) {
if (!te.hasCapability(CapabilityAnimation.ANIMATION_CAPABILITY, null)) {
return;
}
if (blockRenderer == null)
blockRenderer = Minecraft.getMinecraft().getBlockRendererDispatcher();
BlockPos pos = te.getPos();
IBlockAccess world = MinecraftForgeClient.getRegionRenderCache(te.getWorld(), pos);
IBlockState state = world.getBlockState(pos);
if (state.getPropertyKeys().contains(Properties.StaticProperty)) {
state = state.withProperty(Properties.StaticProperty, false);
}
if (state instanceof IExtendedBlockState) {
IExtendedBlockState exState = (IExtendedBlockState) state;
if (exState.getUnlistedNames().contains(Properties.AnimationProperty)) {
float time = Animation.getWorldTime(getWorld(), partialTick);
IAnimationStateMachine capability = te.getCapability(CapabilityAnimation.ANIMATION_CAPABILITY, null);
if (capability != null) {
Pair<IModelState, Iterable<Event>> pair = capability.apply(time);
handleEvents(te, time, pair.getRight());
// TODO: caching?
IBakedModel model = blockRenderer.getBlockModelShapes().getModelForState(exState.getClean());
exState = exState.withProperty(Properties.AnimationProperty, pair.getLeft());
renderer.setTranslation(x - pos.getX(), y - pos.getY(), z - pos.getZ());
blockRenderer.getBlockModelRenderer().renderModel(world, model, exState, pos, renderer, false);
}
}
}
}
use of net.minecraft.world.IBlockAccess in project ImmersiveEngineering by BluSunrize.
the class SmartLightingQuad method pipe.
@Override
public void pipe(IVertexConsumer consumer) {
IBlockAccess world = null;
BlockInfo info = null;
if (consumer instanceof VertexLighterFlat) {
try {
info = (BlockInfo) blockInfo.get(consumer);
world = info.getWorld();
if (world instanceof ChunkCache)
world = ((ChunkCache) world).worldObj;
consumer = (IVertexConsumer) parent.get(consumer);
} catch (Throwable e) {
e.printStackTrace();
}
}
consumer.setQuadOrientation(this.getFace());
if (this.hasTintIndex())
consumer.setQuadTint(this.getTintIndex());
float[] data = new float[4];
VertexFormat format = consumer.getVertexFormat();
int count = format.getElementCount();
int[] eMap = LightUtil.mapFormats(format, DefaultVertexFormats.ITEM);
int itemCount = DefaultVertexFormats.ITEM.getElementCount();
eMap[eMap.length - 1] = 2;
for (int v = 0; v < 4; v++) for (int e = 0; e < count; e++) if (eMap[e] != itemCount) {
if (//lightmap is UV with 2 shorts
format.getElement(e).getUsage() == EnumUsage.UV && format.getElement(e).getType() == EnumType.SHORT) {
int brightness;
if (!ignoreLight && world != null && !(world instanceof ChunkCache)) {
BlockPos here = blockPos.add(relativePos[v][0], relativePos[v][1], relativePos[v][2]);
brightness = world.getCombinedLight(here, 0);
} else
brightness = staticBrightness;
data[0] = ((float) ((brightness >> 0x04) & 0xF) * 0x20) / 0xFFFF;
data[1] = ((float) ((brightness >> 0x14) & 0xF) * 0x20) / 0xFFFF;
} else
LightUtil.unpack(this.getVertexData(), data, DefaultVertexFormats.ITEM, v, eMap[e]);
consumer.put(e, data);
} else
consumer.put(e, 0);
}
use of net.minecraft.world.IBlockAccess in project ArsMagica2 by Mithion.
the class SimpleBlockRenderHandler method renderEverstoneBlock.
private void renderEverstoneBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
if (world == null)
return;
if (block == null)
return;
GL11.glColor4f(1, 1, 1, 1);
TileEntityEverstone te = (TileEntityEverstone) Minecraft.getMinecraft().theWorld.getTileEntity(x, y, z);
if (te != null) {
Block fBlock = te.getFacade();
if (fBlock != null) {
if (te.isSolid()) {
IBlockAccess old = renderer.blockAccess;
renderer.blockAccess = this.blockAccess;
this.blockAccess.setControllingTileEntity(te);
this.blockAccess.setFakeBlockAndMeta(te.getFacade(), te.getFacadeMeta());
this.blockAccess.setOuterBlockAccess(world);
this.blockAccess.setOverrideCoords(x, y, z);
renderer.renderStandardBlock(fBlock, x, y, z);
this.blockAccess.setOuterBlockAccess(null);
renderer.blockAccess = old;
} else {
Tessellator.instance.setColorRGBA(te.getFadeStrength(), te.getFadeStrength(), te.getFadeStrength(), te.getFadeStrength());
renderer.renderFaceYPos(block, x, y, z, fBlock.getIcon(1, te.getFacadeMeta()));
renderer.renderFaceYNeg(block, x, y, z, fBlock.getIcon(0, te.getFacadeMeta()));
renderer.renderFaceXPos(block, x, y, z, fBlock.getIcon(2, te.getFacadeMeta()));
renderer.renderFaceXNeg(block, x, y, z, fBlock.getIcon(3, te.getFacadeMeta()));
renderer.renderFaceZPos(block, x, y, z, fBlock.getIcon(4, te.getFacadeMeta()));
renderer.renderFaceZNeg(block, x, y, z, fBlock.getIcon(5, te.getFacadeMeta()));
}
} else {
renderer.renderStandardBlock(block, x, y, z);
}
}
}
use of net.minecraft.world.IBlockAccess in project ArsMagica2 by Mithion.
the class SimpleBlockRenderHandler method renderManaBattery.
private void renderManaBattery(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
GL11.glColor4f(1, 1, 1, 1);
TileEntityManaBattery te = (TileEntityManaBattery) world.getTileEntity(x, y, z);
if (te != null) {
IBlockAccess old = renderer.blockAccess;
renderer.blockAccess = this.blockAccess;
this.blockAccess.setControllingTileEntity(te);
this.blockAccess.setFakeBlockAndMeta(BlocksCommonProxy.manaBattery, 0);
this.blockAccess.setOuterBlockAccess(world);
this.blockAccess.setOverrideCoords(x, y, z);
renderer.renderStandardBlock(BlocksCommonProxy.manaBattery, x, y, z);
this.blockAccess.setOuterBlockAccess(null);
renderer.blockAccess = old;
Tessellator.instance.setColorOpaque_I(0xFFFFFF);
renderer.renderFaceYPos(block, x, y, z, BlocksCommonProxy.manaBattery.getIcon(1, 15));
renderer.renderFaceYNeg(block, x, y, z, BlocksCommonProxy.manaBattery.getIcon(0, 15));
renderer.renderFaceXPos(block, x, y, z, BlocksCommonProxy.manaBattery.getIcon(2, 15));
renderer.renderFaceXNeg(block, x, y, z, BlocksCommonProxy.manaBattery.getIcon(3, 15));
renderer.renderFaceZPos(block, x, y, z, BlocksCommonProxy.manaBattery.getIcon(4, 15));
renderer.renderFaceZNeg(block, x, y, z, BlocksCommonProxy.manaBattery.getIcon(5, 15));
}
}
Aggregations