Сотый вопрос про вызов стороны блока .

Версия Minecraft
1.7.10
Я понимаю что вас уже заколебали с вопросами про нахождение стороны блока на который нажал игрок .
Я понимаю как это работает но не знаю как реализовать в коде .

В общем нужно просто получить номер стороны с который был сломан блок .

А дальше я с использованием switch сделаю для каждый стороны свои параметры ломания ближних блоков.
Java:
    public int convertBlockDrops(List<ItemStack> aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) {
        int rConversions = 0;
        
        if ((this.sIsHarvestingRightNow.get() == null) && ((aPlayer instanceof EntityPlayerMP))) {
            this.sIsHarvestingRightNow.set(this);           
            
            //Параметры ломания ближних блоков
            for (int i = -1; i < 2; i++) {
                for (int j = -1; j < 2; j++) {
                    for (int k = -1; k < 1; k++) {
                        if (aEvent.world.getBlock(aX + i, aY + j , aZ + k) == net.minecraft.init.Blocks.bedrock) {
                        } else {
                                if (((i != 0) || (j != 0) || (k != 0)) && (aStack.getItem().getDigSpeed(aStack, aPlayer.worldObj.getBlock(aX + i, aY + j, aZ + k), aPlayer.worldObj.getBlockMetadata(aX + i, aY + j, aZ + k)) > 0.0F) && (((EntityPlayerMP) aPlayer).theItemInWorldManager.tryHarvestBlock(aX + i, aY + j, aZ))) {
                                    rConversions++;
                            }
                        }
                    }
                }
            }
            this.sIsHarvestingRightNow.set(null);
        }
        return rConversions;
    }
 
Решение
Что-то типа этого:
Java:
MovingObjectPosition mop = EntityLook.block(player, 1F, 4D, true);

        if (mop != null) {
            int blockX = mop.blockX;
            int blockY = mop.blockY;
            int blockZ = mop.blockZ;
           
            switch(mop.sideHit) {
            case 0:++blockY;break;
            case 1:--blockY;break;
            case 2:++blockZ;break;
            case 3:--blockZ;break;
            case 4:++blockX;break;
            case 5:--blockX;break;
            default:break;
            }

            for (int x = blockX - 1; x <= blockX + 1; ++x) {
            for (int y = blockY - 1; y <= blockY + 1; ++y) {
            for (int z = blockZ - 1; z <= blockZ + 1; ++z) {
                if...
7,099
324
1,510
Для блоков ведь достаточно использовать Minecrft#objectMouseOver
 
Теперь при разрушении блока зависает к чёрту майнкрафт в консоли
Код:
at net.minecraft.server.management.ItemInWorldManager.tryHarvestBlock(ItemInWorldManager.java:325) ~[ItemInWorldManager.class:?]
    at gregtech.common.tools.GT_Tool_Drill_IV.convertBlockDrops(GT_Tool_Drill_IV.java:301) ~[GT_Tool_Drill_IV.class:?]
    at gregtech.api.items.GT_MetaGenerated_Tool.onHarvestBlockEvent(GT_MetaGenerated_Tool.java:216) ~[GT_MetaGenerated_Tool.class:?]
    at gregtech.common.GT_Proxy.onBlockHarvestingEvent(GT_Proxy.java:780) ~[GT_Proxy.class:?]
    at cpw.mods.fml.common.eventhandler.ASMEventHandler_22_GT_Proxy_onBlockHarvestingEvent_HarvestDropsEvent.invoke(.dynamic) ~[?:?]
    at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:54) ~[ASMEventHandler.class:?]
    at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:140) ~[EventBus.class:?]
    at net.minecraftforge.event.ForgeEventFactory.fireBlockHarvesting(ForgeEventFactory.java:162) ~[ForgeEventFactory.class:?]
    at net.minecraft.block.Block.dropBlockAsItemWithChance(Block.java:806) ~[Block.class:?]
    at net.minecraft.block.Block.dropBlockAsItem(Block.java:795) ~[Block.class:?]
    at net.minecraft.block.Block.harvestBlock(Block.java:1217) ~[Block.class:?]
    at net.minecraft.server.management.ItemInWorldManager.tryHarvestBlock(ItemInWorldManager.java:325) ~[ItemInWorldManager.class:?]
    at gregtech.common.tools.GT_Tool_Drill_IV.convertBlockDrops(GT_Tool_Drill_IV.java:301) ~[GT_Tool_Drill_IV.class:?]
    at gregtech.api.items.GT_MetaGenerated_Tool.onHarvestBlockEvent(GT_MetaGenerated_Tool.java:216) ~[GT_MetaGenerated_Tool.class:?]
[12:46:12] [Server thread/ERROR] [FML]: Index: 1 Listeners:
[12:46:12] [Server thread/ERROR] [FML]: 0: NORMAL
[12:46:12] [Server thread/ERROR] [FML]: 1: ASM: gregtech.common.GT_Client@1de66d6b onBlockHarvestingEvent(Lnet/minecraftforge/event/world/BlockEvent$HarvestDropsEvent;)V
[12:46:12] [Server thread/ERROR] [FML]: 2: ASM: crazypants.enderio.machine.spawner.BlockPoweredSpawner@626d3973 onHarvestDropsEvent(Lnet/minecraftforge/event/world/BlockEvent$HarvestDropsEvent;)V
[12:46:12] [Server thread/ERROR] [FML]: 3: ASM: com.enderio.core.common.handlers.RightClickCropHandler@76424e65 onHarvestDrop(Lnet/minecraftforge/event/world/BlockEvent$HarvestDropsEvent;)V
[12:46:12] [Server thread/ERROR] [FML]: 4: ASM: com.enderio.core.common.handlers.AutoSmeltHandler@1f94fd4b handleBlockBreak(Lnet/minecraftforge/event/world/BlockEvent$HarvestDropsEvent;)V
[12:46:12] [Server thread/ERROR] [FML]: 5: ASM: gregtech.common.GT_Client@1de66d6b onBlockEvent(Lnet/minecraftforge/event/world/BlockEvent;)V
 
Последнее редактирование модератором:

timaxa007

Модератор
5,831
409
672
Типа разрушай на стороне серверной:
Код:
if (!player.worldObj) {
//Твой код
}
Если всё равно будет такой-же краш, то тут вроде из-за эвента:
gregtech.common.GT_Proxy.onBlockHarvestingEvent(GT_Proxy.java:780)
Либо придётся тупо просто дропать блоки (без от имени игрока).
---
У меня при простой тестирования моего кода, всё нормально было.
 

timaxa007

Модератор
5,831
409
672
День добрый.
Можно ли использовать Ваш код в своём моде?
Да, код открытый взятый за основу код из ванильного майнкрафта.
здесь ответит.
Почему? Оповещения работают, если замечу, то постараюсь ответить.
Попробуй спросить его на самом Github.
Эм... Ты наверное с кем-то меня перепутал.
 
Сверху