@SideOnly(Side.CLIENT)
public class RenederTileEntityAltar extends TileEntitySpecialRenderer {
private static Minecraft mc = Minecraft.getMinecraft();
@Override
public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float scale) {
render((TileEntityAltar)tile, x, y, z, scale);
}
private void render(TileEntityAltar tile, double x, double y, double z, float scale) {
Tessellator tessellator = Tessellator.instance;
GL11.glPushMatrix();
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glDisable(GL11.GL_CULL_FACE);
GL11.glTranslated(x, y, z);
GL11.glPushMatrix();
GL11.glTranslatef(0.5F, 1.5F, 0.5F);
tessellator.startDrawingQuads();
tessellator.setColorRGBA_F(255.0F, 0.0F, 0.0F, 0.5F);
tessellator.addVertex(-0.25D, 0D, -0.25D);
tessellator.addVertex(-0.25D, 0D, 0.25D);
tessellator.addVertex(0.25D, 0D, 0.25D);
tessellator.addVertex(0.25D, 0D, -0.25D);
tessellator.draw();
GL11.glPopMatrix();
if (tile.list_use != null && tile.list_use.size() > 0)
for (int i = 0; i < tile.list_use.size(); ++i) {
UtilBlock.BlockPosState bps = tile.list_use.get(i);
GL11.glBegin(GL11.GL_LINES);
GL11.glVertex3f(0.5F, 1.25F, 0.5F);//a
GL11.glVertex3f((float)((double)bps.getBlockPos().x - TileEntityRendererDispatcher.staticPlayerX - x) + 0.5F,
(float)((double)bps.getBlockPos().y - TileEntityRendererDispatcher.staticPlayerY - y) + 1.25F,
(float)((double)bps.getBlockPos().z - TileEntityRendererDispatcher.staticPlayerZ - z) + 0.5F);//b
GL11.glEnd();
/*
tessellator.startDrawingQuads();
tessellator.setColorRGBA_F(255.0F, 0.0F, 0.0F, 0.5F);
tessellator.addVertex(-0.25D, 0D, -0.25D);
tessellator.addVertex(-0.25D, 0D, 0.25D);
tessellator.addVertex(0.25D, 0D, 0.25D);
tessellator.addVertex(0.25D, 0D, -0.25D);
tessellator.draw();
*/
}
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glDisable(GL11.GL_BLEND);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glPopMatrix();
}
}
public class TileEntityAltar extends TileEntity {
public ArrayList<UtilBlock.BlockState> list_find = Lists.newArrayList();
public ArrayList<UtilBlock.BlockPosState> list_use = Lists.newArrayList();
private int tickReSearch = 0;
private boolean isSearch = false;
public TileEntityAltar() {
list_find.add(new UtilBlock.BlockState(Blocks.beacon, 0));
list_find.add(new UtilBlock.BlockState(Blocks.diamond_block, 0));
list_find.add(new UtilBlock.BlockState(Blocks.emerald_block, 0));
}
public void updateEntity() {
if (tickReSearch == 0) {
searchAddBlocks(9);
}
++tickReSearch;
if (tickReSearch >= 20 * 6) {
tickReSearch = 0;
}
}
public void searchAddBlocks(int radius) {
list_use.clear();
for (int px = xCoord - radius; px <= xCoord + radius; ++px) {
for (int py = yCoord - radius / 2; py <= yCoord + radius; ++py) {
for (int pz = zCoord - radius; pz <= zCoord + radius; ++pz) {
for (int i = 0; i < list_find.size(); ++i) {
UtilBlock.BlockState bs = list_find.get(i);
if (bs != null &&
//!worldObj.isAirBlock(px, py, pz) &&
worldObj.getBlock(px, py, pz) == bs.getBlock() &&
worldObj.getBlockMetadata(px, py, pz) == bs.getMetadata()) {
UtilBlock.BlockPosState bps = new UtilBlock.BlockPosState(
bs, new UtilBlock.BlockPos(px, py, pz)
);
list_use.add(bps);
}
}
}
}
}
}
}
public class UtilBlock {
public static class BlockPosState {
private BlockState state;
private BlockPos pos;
public BlockPosState(BlockState state, BlockPos pos) {
this.state = state;
this.pos = pos;
}
public BlockState getBlockState() {
return state;
}
public BlockPos getBlockPos() {
return pos;
}
}
public static class BlockState {
private Block block;
private int metadata;
public BlockState(Block block, int metadata) {
this.block = block;
this.metadata = metadata;
}
public Block getBlock() {
return block;
}
public int getMetadata() {
return metadata;
}
}
public static class BlockPos {
public int x;
public int y;
public int z;
public BlockPos(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
}
}
Не знаю что за там в коде, но как сказал довакин - "это просто квард который поворачивается лицом к игроку по одной оси"AlexSocol написал(а):Ну, вроде бы это не так уж и трудно...[merge_posts_bbcode]Добавлено: 22.02.2016 18:54:06[/merge_posts_bbcode]
Написал небольшое условие, которое выполняется автоматически для всех четырёх кристаллов, но каждый луч принадлежит своему (через if, но это уже другая история)
[merge_posts_bbcode]Добавлено: 22.02.2016 18:54:44[/merge_posts_bbcode]
А для создания текстурированного луча (типа как у маяка, с повторяемой текстурой) что нужно писать?
Это десятьмю строчками реализовывается.
MyMod.proxy.spawnMyParticle(x, y, z, finalX, finalY, finalZ);
Знаешь про производительность? Нет?FanKar написал(а):Да сделай с помощью партиклов, и красивее будет D:
Ну дай наводку :ermm:FanKar написал(а):Да сделай с помощью партиклов, и красивее будет D:
Посмотри в рендере шара гаста, он вертится по 2 осям, а тебе надо лишь 1.AlexSocol написал(а):Ну дай наводку :ermm:FanKar написал(а):Да сделай с помощью партиклов, и красивее будет D:
Партиклы я делать умею (вчера научился: могу менять цвет, размер и присваивать ванилла текстуру )
Думаю, рендер присобачить им будет не трудно, но вот как вращать эти партикло-лучи?
4000? Не верю.Asd73 написал(а):На счет партиклов: их максимальное количество в 1.7.10 - 4000 штук.
svk написал(а):4000? Не верю.Asd73 написал(а):На счет партиклов: их максимальное количество в 1.7.10 - 4000 штук.
public void addEffect(EntityFX p_78873_1_)
{
int i = p_78873_1_.getFXLayer();
if (this.fxLayers[i].size() >= 4000)
{
this.fxLayers[i].remove(0);
}
this.fxLayers[i].add(p_78873_1_);
}
Лол, партиклам можно настроить время жизни.AlexSocol написал(а):Ну да, сделаю я стопиццот партиклов, а потом мод будет лагать как у Рейки Хроматик
UPD: ещё один минус партиклов в том, что их нужно постоянно спаунить заново, ибо они исчезают со временем
[merge_posts_bbcode]Добавлено: 22.02.2016 21:34:21[/merge_posts_bbcode]
Но, с другой стороны, я больше не вижу способов оставлять их рендерящимися даже если кристаллы в "заспинной пустоте" остаются
[merge_posts_bbcode]Добавлено: 22.02.2016 21:45:15[/merge_posts_bbcode]
Кто знает, как заставить блок рендериться даже в заспинной пустоте?