Search in sources :

Example 1 with IBlockAccess

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);
}
Also used : IInventory(net.minecraft.inventory.IInventory) ChunkCache(net.minecraft.world.ChunkCache) ArrayList(java.util.ArrayList) IBlockAccess(net.minecraft.world.IBlockAccess) TileEntity(net.minecraft.tileentity.TileEntity) IBlockTrackEntry(pneumaticCraft.api.client.pneumaticHelmet.IBlockTrackEntry) PacketDescriptionPacketRequest(pneumaticCraft.common.network.PacketDescriptionPacketRequest) BlockTrackEvent(pneumaticCraft.api.client.pneumaticHelmet.BlockTrackEvent)

Example 2 with IBlockAccess

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);
            }
        }
    }
}
Also used : IBlockState(net.minecraft.block.state.IBlockState) IExtendedBlockState(net.minecraftforge.common.property.IExtendedBlockState) IBlockAccess(net.minecraft.world.IBlockAccess) IModelState(net.minecraftforge.common.model.IModelState) BlockPos(net.minecraft.util.math.BlockPos) IBakedModel(net.minecraft.client.renderer.block.model.IBakedModel) IAnimationStateMachine(net.minecraftforge.common.model.animation.IAnimationStateMachine)

Example 3 with IBlockAccess

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);
}
Also used : ChunkCache(net.minecraft.world.ChunkCache) IBlockAccess(net.minecraft.world.IBlockAccess) BlockPos(net.minecraft.util.math.BlockPos) VertexFormat(net.minecraft.client.renderer.vertex.VertexFormat)

Example 4 with IBlockAccess

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);
        }
    }
}
Also used : Block(net.minecraft.block.Block) IBlockAccess(net.minecraft.world.IBlockAccess) TileEntityEverstone(am2.blocks.tileentities.TileEntityEverstone)

Example 5 with IBlockAccess

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));
    }
}
Also used : TileEntityManaBattery(am2.blocks.tileentities.TileEntityManaBattery) IBlockAccess(net.minecraft.world.IBlockAccess)

Aggregations

IBlockAccess (net.minecraft.world.IBlockAccess)5 BlockPos (net.minecraft.util.math.BlockPos)2 ChunkCache (net.minecraft.world.ChunkCache)2 TileEntityEverstone (am2.blocks.tileentities.TileEntityEverstone)1 TileEntityManaBattery (am2.blocks.tileentities.TileEntityManaBattery)1 ArrayList (java.util.ArrayList)1 Block (net.minecraft.block.Block)1 IBlockState (net.minecraft.block.state.IBlockState)1 IBakedModel (net.minecraft.client.renderer.block.model.IBakedModel)1 VertexFormat (net.minecraft.client.renderer.vertex.VertexFormat)1 IInventory (net.minecraft.inventory.IInventory)1 TileEntity (net.minecraft.tileentity.TileEntity)1 IModelState (net.minecraftforge.common.model.IModelState)1 IAnimationStateMachine (net.minecraftforge.common.model.animation.IAnimationStateMachine)1 IExtendedBlockState (net.minecraftforge.common.property.IExtendedBlockState)1 BlockTrackEvent (pneumaticCraft.api.client.pneumaticHelmet.BlockTrackEvent)1 IBlockTrackEntry (pneumaticCraft.api.client.pneumaticHelmet.IBlockTrackEntry)1 PacketDescriptionPacketRequest (pneumaticCraft.common.network.PacketDescriptionPacketRequest)1