1.7.10 Не работает Event UpdateTick на сервере и клиенте.

Привет!
Ребят, пол дня страдал пока не наткнулся на форум :D
Я хочу чтобы блок (он же посев) спустя время удалился а на замену ему появился другой блок.

Когда я делал мод только на клиент, то фишка работала и использовал я этот код:
public void onBlockAdded(World world, int i, int j, int k) {
EntityPlayer entity = Minecraft.getMinecraft().thePlayer;
if (entity != null && world != null) {
int le = MathHelper.floor_double((double) (entity.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
world.setBlockMetadataWithNotify(i, j, k, le, 2);
}

world.scheduleBlockUpdate(i, j, k, this, this.tickRate(world));

}

Тут рванул заливать на сервер и разумеется краш...
Тот код выше я поменял на это:
public void onBlockPlacedBy(World world, int i, int j, int k, EntityLivingBase entity, ItemStack stack) {
if (entity != null && world != null) {
int le = MathHelper.floor_double((double) (entity.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
world.setBlockMetadataWithNotify(i, j, k, le, 2);
}

world.scheduleBlockUpdate(i, j, k, this, this.tickRate(world));

}

И мод встал как на клиент, так и на сервер, но беда в том, что ни клиент в одиночке не сервер это событие не производит....
И к тому же, сервер никаких ошибок не выдает и не крашится.

Прошу помочь пожалуйста...

Ниже код класса, спасибо!




BlockStage:
package mod.mab;

import net.minecraft.world.World;
import net.minecraft.world.IBlockAccess;
import net.minecraft.util.MathHelper;
import net.minecraft.util.IIcon;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Item;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.client.Minecraft;
import net.minecraft.block.material.Material;
import net.minecraft.block.Block;
import net.minecraft.entity.EntityLivingBase;

import java.util.Random;

import cpw.mods.fml.relauncher.SideOnly;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.event.FMLServerStartingEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;

public class mab_blocktomatestage1 {

    public mab_blocktomatestage1() {
    }

    public static BlockBlocktomatestage1 block;

    public static Object instance;

    public int addFuel(ItemStack fuel) {
        return 0;
    }

    public void serverLoad(FMLServerStartingEvent event) {
    }

    public void preInit(FMLPreInitializationEvent event) {

        GameRegistry.registerBlock(block, "Blocktomatestage1");
    }

    public void registerRenderers() {
    }

    public void load() {
    }

    static {

        block = (BlockBlocktomatestage1) (new BlockBlocktomatestage1().setHardness(0.2F).setResistance(10.0F).setLightLevel(0.0F)
                .setBlockName("Blocktomatestage1").setBlockTextureName("blocktomatestage1").setLightOpacity(0).setStepSound(Block.soundTypeGrass)
                .setCreativeTab(mab_stages.tab));
        block.setBlockBounds(0.30000000000000004F, 0.0F, 0.30000000000000004F, 0.7000000000000001F, 0.7000000000000001F, 0.7000000000000001F);
        Block.blockRegistry.addObject(192, "Blocktomatestage1", block);
        block.setHarvestLevel("shovel", 0);
    }

    public void generateSurface(World world, Random random, int chunkX, int chunkZ) {
    }

    public void generateNether(World world, Random random, int chunkX, int chunkZ) {
    }

    static class BlockBlocktomatestage1 extends Block {

        int a1 = 0, a2 = 0, a3 = 0, a4 = 0, a5 = 0, a6 = 0;

        Random field_149942_b = new Random();

        IIcon gor = null, dol = null, st1 = null, st2 = null, st3 = null, st4 = null;

        boolean red = false;

        protected BlockBlocktomatestage1() {
            super(Material.grass);

        }

        public void onBlockPlacedBy(World world, int i, int j, int k, EntityLivingBase entity, ItemStack stack) {
            if (entity != null && world != null) {
                int le = MathHelper.floor_double((double) (entity.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
                world.setBlockMetadataWithNotify(i, j, k, le, 2);
            }
 
            world.scheduleBlockUpdate(i, j, k, this, this.tickRate(world));
 
        }

        public int isProvidingStrongPower(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5) {
            return red ? 1 : 0;
        }

        public void updateTick(World world, int i, int j, int k, Random random) {
            EntityPlayer entity = Minecraft.getMinecraft().thePlayer;

            if (true) {

                if (true) {
                    world.setBlockToAir(i, j, k);
                }

                if (true) {
                    world.setBlock(i, j, k, mab_blocktomatestage2.block, 0, 2);
                }

            }

            world.scheduleBlockUpdate(i, j, k, this, this.tickRate(world));
        }

        @SideOnly(Side.CLIENT)
        @Override
        public IIcon getIcon(int i, int par2) {

            if (i == 0)
                return gor;

            else if (i == 1)
                return dol;

            else if (i == 2)
                return st1;

            else if (i == 3)
                return st2;

            else if (i == 4)
                return st4;

            else if (i == 5)
                return st3;

            else
                return gor;

        }

        @SideOnly(Side.CLIENT)
        @Override
        public void registerBlockIcons(IIconRegister reg) {
            this.gor = reg.registerIcon("blocktomatestage1");
            this.dol = reg.registerIcon("blocktomatestage1");
            this.st1 = reg.registerIcon("blocktomatestage1");
            this.st2 = reg.registerIcon("blocktomatestage1");
            this.st3 = reg.registerIcon("blocktomatestage1");
            this.st4 = reg.registerIcon("blocktomatestage1");
        }

        public boolean isOpaqueCube() {
            return false;
        }

        public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int i, int j, int k) {
            return null;
        }

        public boolean renderAsNormalBlock() {
            return false;
        }

        public int getRenderType() {
            return 1;
        }

        @Override
        public int tickRate(World world) {
            return 2571;
        }

        public int quantityDropped(Random par1Random) {
            return 1;
        }

        public Item getItemDropped(int par1, Random par2Random, int par3) {
            return mab_tomatoseeds.block;
        }
    }
}
 
Последнее редактирование:
package mod.mab;

public class ClientProxymabmod extends CommonProxymabmod {

@Override
public void registerRenderers(mabmod ins) {
ins.mab_0.registerRenderers();
ins.mab_1.registerRenderers();
ins.mab_2.registerRenderers();
ins.mab_3.registerRenderers();
ins.mab_4.registerRenderers();
ins.mab_5.registerRenderers();

}
}


package mod.mab;

public class CommonProxymabmod {
public void registerRenderers(mabmod ins) {
}
}
 
929
30
66
Может тайл блоку сделать? Туда время записывай и при нужном времени в апдейте ставь блок.
 
1,159
38
544
Не могу читать это без форматирования, сорян.
 
3,005
192
592
Это называется мкреатор + не знание языка..
 
Короче говоря, прошу помощи, кто хочет оставить своё «экспертное заключение» в виде: - Ты не знаешь код.

Спасибо, этого я не прошу, мнение Ваше и оставьте при себе. Оно и так понятно что был бы кодером от Бога, вряд ли писал бы тут.

Поэтому те кто действительно могут помочь, объясните пожалуйста.... Ибо не понимаю почему, если ставлю EntiryPlayerSP то Eclipse показывает ошибку, скорее я уже туплю, поэтому нуждаюсь в помощи 😩
 
1,159
38
544
7,099
324
1,509

Icosider

Kotliner
Администратор
3,600
99
663
@hohserg1, ему onBlockPlacedBy достаточно. На клиенте ему в принципе не нужен onBlockAdded как и onBlockPlacedBy.
 
Сверху