1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Фикс Эвенты для модов [1.7.10/Устаревшие/SRC]

Тема в разделе "Управление сервером Bukkit", создана пользователем Shevchik, 12 янв 2014.

  1. ensirius

    ensirius Старожил Пользователь

    Баллы:
    123
    Я не спорю. Пришлось бы ловить EntityBlockFormEvent. Но это было 1 событие которое нужно было обработать, а не десяток. Должен действовать паттерн DRY - Dont Repeat Yourself. У нас своя защита, я бы просто хукнул это событие без необходимости писать другой плагин где я добавлю кучу кастомных событий :) Повторюсь, но проблем не будет до тех пор, пока вы не передаете нулевые значения. Что само собой вызовет NPE в каком нибудь плагине. Это вопрос реализации с вашей стороны. Просто учтите это на будущие :)
     
  2. Автор темы
    Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Сначала я вообще хотел сделать одно событие для одного типа действия, но потом решил сделать так чтобы различать типы машин (плагин стоящий у меня на сервер отличается от выложенного здесь), просто надо было сделать Enum который будет обозначать какой тип машины бросил эвент. Хотя мне кажется что фордж умер, так что писать эвенты мне больше не придётся.
     
  3. ensirius

    ensirius Старожил Пользователь

    Баллы:
    123
    Как вариант с ENUM. Правда я тоже не очень одобряю :) Фордж вроде как развивается. Хотя меня не особо интересует. Рано или поздно мы уже наконец допишем свой сервер и моды под себя..
     
  4. SkyPrince

    SkyPrince Активный участник Пользователь

    Баллы:
    88
    Skype:
    skyprince-2014
    Имя в Minecraft:
    SkyPrince
    Ситуация...

    Смотрите, есть 2 мода, BC 4.2.2 и Project Red 4.3.7
    Ставлю ваши эвенты, на тестовом серваке все идет отлично!
    Но после установки на игровой, он начинает падать, как я понимаю из-за фикса труб:

    Код:
    2014-04-21 14:25:06 [SEVERE] net.minecraft.util.ReportedException: Ticking tile entity
    2014-04-21 14:25:06 [SEVERE]    at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:889)
    2014-04-21 14:25:06 [SEVERE]    at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:330)
    2014-04-21 14:25:06 [SEVERE]    at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:777)
    2014-04-21 14:25:06 [SEVERE]    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:659)
    2014-04-21 14:25:06 [SEVERE]    at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16)
    2014-04-21 14:25:06 [SEVERE] Caused by: java.lang.NullPointerException
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.RequestBranchNode$$anonfun$doCraftReq$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(requests.scala:191)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.RequestBranchNode$$anonfun$doCraftReq$1$$anonfun$apply$mcV$sp$1.apply(requests.scala:155)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.RequestBranchNode$$anonfun$doCraftReq$1$$anonfun$apply$mcV$sp$1.apply(requests.scala:155)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.core.utils.LabelBreaks.label(LabelBreaks.scala:13)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.core.utils.LabelBreaks.label(LabelBreaks.scala:25)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.RequestBranchNode$$anonfun$doCraftReq$1.apply$mcV$sp(requests.scala:155)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.RequestBranchNode$$anonfun$doCraftReq$1.apply(requests.scala:154)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.RequestBranchNode$$anonfun$doCraftReq$1.apply(requests.scala:154)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.core.utils.LabelBreaks.label(LabelBreaks.scala:13)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.RequestBranchNode.doCraftReq(requests.scala:153)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.RequestBranchNode.doRequest$1(requests.scala:50)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.RequestBranchNode.<init>(requests.scala:52)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.RequestRoot.<init>(requests.scala:341)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.RequestConsole.makeRequest(requests.scala:669)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.ChipStockKeeper$$anonfun$update$1$$anonfun$apply$mcVI$sp$1.apply$mcV$sp(ChipStockKeeper.scala:55)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.ChipStockKeeper$$anonfun$update$1$$anonfun$apply$mcVI$sp$1.apply(ChipStockKeeper.scala:43)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.ChipStockKeeper$$anonfun$update$1$$anonfun$apply$mcVI$sp$1.apply(ChipStockKeeper.scala:43)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.core.utils.LabelBreaks.label(LabelBreaks.scala:13)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.core.utils.LabelBreaks.label(LabelBreaks.scala:25)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.ChipStockKeeper$$anonfun$update$1.apply$mcVI$sp(ChipStockKeeper.scala:43)
    2014-04-21 14:25:06 [SEVERE]    at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:141)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.ChipStockKeeper.update(ChipStockKeeper.scala:42)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.RoutedInterfacePipePart$$anonfun$updateServer$1.apply(RoutedInterfacePipePart.scala:63)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.RoutedInterfacePipePart$$anonfun$updateServer$1.apply(RoutedInterfacePipePart.scala:63)
    2014-04-21 14:25:06 [SEVERE]    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
    2014-04-21 14:25:06 [SEVERE]    at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.RoutedInterfacePipePart.updateServer(RoutedInterfacePipePart.scala:63)
    2014-04-21 14:25:06 [SEVERE]    at mrtjp.projectred.transportation.RoutedJunctionPipePart.update(RoutedJunctionPipePart.scala:187)
    2014-04-21 14:25:06 [SEVERE]    at codechicken.multipart.TileMultipart$$anonfun$updateEntity$1.apply(TileMultipart.scala:85)
    2014-04-21 14:25:06 [SEVERE]    at codechicken.multipart.TileMultipart$$anonfun$updateEntity$1.apply(TileMultipart.scala:85)
    2014-04-21 14:25:06 [SEVERE]    at codechicken.multipart.TileMultipart.operate(TileMultipart.scala:79)
    2014-04-21 14:25:06 [SEVERE]    at codechicken.multipart.TileMultipart.func_70316_g(TileMultipart.scala:85)
    2014-04-21 14:25:06 [SEVERE]    at net.minecraft.world.World.func_72939_s(World.java:2782)
    2014-04-21 14:25:06 [SEVERE]    at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:883)
    2014-04-21 14:25:06 [SEVERE]    ... 4 more
    2014-04-21 14:25:06 [SEVERE] Encountered an unexpected exception ReportedException
    net.minecraft.util.ReportedException: Ticking tile entity
        at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:889)
        at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:330)
        at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:777)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:659)
        at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16)
    Caused by: java.lang.NullPointerException
        at mrtjp.projectred.transportation.RequestBranchNode$$anonfun$doCraftReq$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(requests.scala:191)
        at mrtjp.projectred.transportation.RequestBranchNode$$anonfun$doCraftReq$1$$anonfun$apply$mcV$sp$1.apply(requests.scala:155)
        at mrtjp.projectred.transportation.RequestBranchNode$$anonfun$doCraftReq$1$$anonfun$apply$mcV$sp$1.apply(requests.scala:155)
        at mrtjp.projectred.core.utils.LabelBreaks.label(LabelBreaks.scala:13)
        at mrtjp.projectred.core.utils.LabelBreaks.label(LabelBreaks.scala:25)
        at mrtjp.projectred.transportation.RequestBranchNode$$anonfun$doCraftReq$1.apply$mcV$sp(requests.scala:155)
        at mrtjp.projectred.transportation.RequestBranchNode$$anonfun$doCraftReq$1.apply(requests.scala:154)
        at mrtjp.projectred.transportation.RequestBranchNode$$anonfun$doCraftReq$1.apply(requests.scala:154)
        at mrtjp.projectred.core.utils.LabelBreaks.label(LabelBreaks.scala:13)
        at mrtjp.projectred.transportation.RequestBranchNode.doCraftReq(requests.scala:153)
        at mrtjp.projectred.transportation.RequestBranchNode.doRequest$1(requests.scala:50)
        at mrtjp.projectred.transportation.RequestBranchNode.<init>(requests.scala:52)
        at mrtjp.projectred.transportation.RequestRoot.<init>(requests.scala:341)
        at mrtjp.projectred.transportation.RequestConsole.makeRequest(requests.scala:669)
        at mrtjp.projectred.transportation.ChipStockKeeper$$anonfun$update$1$$anonfun$apply$mcVI$sp$1.apply$mcV$sp(ChipStockKeeper.scala:55)
        at mrtjp.projectred.transportation.ChipStockKeeper$$anonfun$update$1$$anonfun$apply$mcVI$sp$1.apply(ChipStockKeeper.scala:43)
        at mrtjp.projectred.transportation.ChipStockKeeper$$anonfun$update$1$$anonfun$apply$mcVI$sp$1.apply(ChipStockKeeper.scala:43)
        at mrtjp.projectred.core.utils.LabelBreaks.label(LabelBreaks.scala:13)
        at mrtjp.projectred.core.utils.LabelBreaks.label(LabelBreaks.scala:25)
        at mrtjp.projectred.transportation.ChipStockKeeper$$anonfun$update$1.apply$mcVI$sp(ChipStockKeeper.scala:43)
        at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:141)
        at mrtjp.projectred.transportation.ChipStockKeeper.update(ChipStockKeeper.scala:42)
        at mrtjp.projectred.transportation.RoutedInterfacePipePart$$anonfun$updateServer$1.apply(RoutedInterfacePipePart.scala:63)
        at mrtjp.projectred.transportation.RoutedInterfacePipePart$$anonfun$updateServer$1.apply(RoutedInterfacePipePart.scala:63)
        at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
        at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108)
        at mrtjp.projectred.transportation.RoutedInterfacePipePart.updateServer(RoutedInterfacePipePart.scala:63)
        at mrtjp.projectred.transportation.RoutedJunctionPipePart.update(RoutedJunctionPipePart.scala:187)
        at codechicken.multipart.TileMultipart$$anonfun$updateEntity$1.apply(TileMultipart.scala:85)
        at codechicken.multipart.TileMultipart$$anonfun$updateEntity$1.apply(TileMultipart.scala:85)
        at codechicken.multipart.TileMultipart.operate(TileMultipart.scala:79)
        at codechicken.multipart.TileMultipart.func_70316_g(TileMultipart.scala:85)
        at net.minecraft.world.World.func_72939_s(World.java:2782)
        at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:883)
        ... 4 more
    Краш:

    Код:
    ---- Minecraft Crash Report ----
    // Daisy, daisy...
    
    Time: 4/21/14 4:12 PM
    Description: Ticking tile entity
    
    java.lang.NullPointerException
        at mrtjp.projectred.transportation.RequestBranchNode$$anonfun$doCraftReq$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(requests.scala:191)
        at mrtjp.projectred.transportation.RequestBranchNode$$anonfun$doCraftReq$1$$anonfun$apply$mcV$sp$1.apply(requests.scala:155)
        at mrtjp.projectred.transportation.RequestBranchNode$$anonfun$doCraftReq$1$$anonfun$apply$mcV$sp$1.apply(requests.scala:155)
        at mrtjp.projectred.core.utils.LabelBreaks.label(LabelBreaks.scala:13)
        at mrtjp.projectred.core.utils.LabelBreaks.label(LabelBreaks.scala:25)
        at mrtjp.projectred.transportation.RequestBranchNode$$anonfun$doCraftReq$1.apply$mcV$sp(requests.scala:155)
        at mrtjp.projectred.transportation.RequestBranchNode$$anonfun$doCraftReq$1.apply(requests.scala:154)
        at mrtjp.projectred.transportation.RequestBranchNode$$anonfun$doCraftReq$1.apply(requests.scala:154)
        at mrtjp.projectred.core.utils.LabelBreaks.label(LabelBreaks.scala:13)
        at mrtjp.projectred.transportation.RequestBranchNode.doCraftReq(requests.scala:153)
        at mrtjp.projectred.transportation.RequestBranchNode.doRequest$1(requests.scala:50)
        at mrtjp.projectred.transportation.RequestBranchNode.<init>(requests.scala:52)
        at mrtjp.projectred.transportation.RequestRoot.<init>(requests.scala:341)
        at mrtjp.projectred.transportation.RequestConsole.makeRequest(requests.scala:669)
        at mrtjp.projectred.transportation.ChipStockKeeper$$anonfun$update$1$$anonfun$apply$mcVI$sp$1.apply$mcV$sp(ChipStockKeeper.scala:55)
        at mrtjp.projectred.transportation.ChipStockKeeper$$anonfun$update$1$$anonfun$apply$mcVI$sp$1.apply(ChipStockKeeper.scala:43)
        at mrtjp.projectred.transportation.ChipStockKeeper$$anonfun$update$1$$anonfun$apply$mcVI$sp$1.apply(ChipStockKeeper.scala:43)
        at mrtjp.projectred.core.utils.LabelBreaks.label(LabelBreaks.scala:13)
        at mrtjp.projectred.core.utils.LabelBreaks.label(LabelBreaks.scala:25)
        at mrtjp.projectred.transportation.ChipStockKeeper$$anonfun$update$1.apply$mcVI$sp(ChipStockKeeper.scala:43)
        at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:141)
        at mrtjp.projectred.transportation.ChipStockKeeper.update(ChipStockKeeper.scala:42)
        at mrtjp.projectred.transportation.RoutedInterfacePipePart$$anonfun$updateServer$1.apply(RoutedInterfacePipePart.scala:63)
        at mrtjp.projectred.transportation.RoutedInterfacePipePart$$anonfun$updateServer$1.apply(RoutedInterfacePipePart.scala:63)
        at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
        at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108)
        at mrtjp.projectred.transportation.RoutedInterfacePipePart.updateServer(RoutedInterfacePipePart.scala:63)
        at mrtjp.projectred.transportation.RoutedJunctionPipePart.update(RoutedJunctionPipePart.scala:187)
        at codechicken.multipart.TileMultipart$$anonfun$updateEntity$1.apply(TileMultipart.scala:85)
        at codechicken.multipart.TileMultipart$$anonfun$updateEntity$1.apply(TileMultipart.scala:85)
        at codechicken.multipart.TileMultipart.operate(TileMultipart.scala:79)
        at codechicken.multipart.TileMultipart.func_70316_g(TileMultipart.scala:85)
        at net.minecraft.world.World.func_72939_s(World.java:2782)
        at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:883)
        at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:330)
        at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:777)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:659)
        at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16)
    
    
    
    Но при этом дюпы труб на Project Red так же фиксятся.
    Кто-нибудь сталкивался с данной проблемой?

    И еще второй вопрос, есть ли фиксы IC2E для более старших версий?
     
  5. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Project Red 4.3.7 - это не проверенный билд. На тестовом сервере всё конечно работает хорошо, так как там некому пользоваться трубами кроме Вас.
     
    SkyPrince нравится это.
  6. SkyPrince

    SkyPrince Активный участник Пользователь

    Баллы:
    88
    Skype:
    skyprince-2014
    Имя в Minecraft:
    SkyPrince
    Можешь подсказать какая версия лучше? Поставил 4.3.5 все равно падает, но уже не так сильно
     
  7. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Качай с официального сайта. Там всё написано.
     
  8. SkyPrince

    SkyPrince Активный участник Пользователь

    Баллы:
    88
    Skype:
    skyprince-2014
    Имя в Minecraft:
    SkyPrince
    Так я оттуда и скачал 4.3.5 build #30
    И 4.3.7 работал без ошибок пока эти эвенты не воткнул.
    Хотя нет, с 4.3.5 не падает вроде больше, спасибо!
     
  9. komiss

    komiss Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    komiss77
    Пытаюсь слепить разрушение блоков от взрыва в моде в основном мире, и оставить в других мирах.
    Помогите дописать.
    Вот ключевой участок кода:
    int k1 = worldObj.getBlockId(l, i1, j1); --берётся id блока

    if (k1 > 0)
    { Block block = Block.blocksList[k1];
    float f3 = exploder != null ? exploder.getBlockExplosionResistance(this, worldObj, l, i1, j1, block) : block.getExplosionResistance(exploder, worldObj, l, i1, j1, explosionX, explosionY, explosionZ);
    f1 -= (f3 + 0.3F) * f2; }
    - если это не воздух, то расчитывается какой дамаж он должен получить

    if (f1 > 0.0F && (exploder == null || exploder.shouldExplodeBlock(this, worldObj, l, i1, j1, k1, f1)))
    { hashset.add(new ChunkPosition(l, i1, j1)); }
    -если дамаж не нулвой, то блок обновляется в мире

    Моих скудных знаний хватает сообразить, что проверку мира нужно добавить где-то тут:
    if (f1 > 0.0F && <<<<world!=world >>>>&& (exploder == null ||
    только как это правильно сделать??
     
  10. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Здесь я не вижу метода, вызывающего взрыв (тут только расчёт). Выкладывай весь класс (запихни в тег code или на rghost закинь).
     
  11. komiss

    komiss Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    komiss77
    Код:
    package co.uk.flansmods.common.guns;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Random;
    
    import co.uk.flansmods.common.InfoType;
    
    import net.minecraft.block.Block;
    import net.minecraft.enchantment.EnchantmentProtection;
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.entity.item.EntityTNTPrimed;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.entity.player.EntityPlayerMP;
    import net.minecraft.network.packet.Packet60Explosion;
    import net.minecraft.util.AxisAlignedBB;
    import net.minecraft.util.DamageSource;
    import net.minecraft.util.MathHelper;
    import net.minecraft.util.Vec3;
    import net.minecraft.world.ChunkPosition;
    import net.minecraft.world.Explosion;
    import net.minecraft.world.World;
    import net.minecraftforge.event.world.BlockEvent.BreakEvent;
    
    public class FlansModExplosion extends Explosion
    {
        private int boomRadius = 16;
        private Random explosionRNG = new Random();
        private HashMap<EntityPlayer, Vec3> playerLocations = new HashMap<EntityPlayer, Vec3>();
        private World worldObj;
        public InfoType type;
        public EntityPlayer player;
        public List nonProcessedBlockPositions = new ArrayList();
    
        public FlansModExplosion(World w, Entity e, EntityPlayer p, InfoType t, double x, double y, double z, float r, boolean breakBlocks)
        {
            super(w, e, x, y, z, r);
            worldObj = w;
            type = t;
            player = p;
            isFlaming = false;
            isSmoking = breakBlocks;
            doExplosionA();
            doExplosionB(true);
      
            if(!worldObj.isRemote)
            {
                if (!breakBlocks)
                    affectedBlockPositions.clear();
    
                Iterator iterator = worldObj.playerEntities.iterator();
    
                while (iterator.hasNext())
                {
                    EntityPlayer entityplayer = (EntityPlayer)iterator.next();
                    if (entityplayer.getDistanceSq(x, y, z) < 4096.0D)
                        ((EntityPlayerMP)entityplayer).playerNetServerHandler.sendPacketToPlayer(new Packet60Explosion(x, y, z, r, affectedBlockPositions, (Vec3)func_77277_b().get(entityplayer)));
                }
            }
        }
    
        @Override
        public void doExplosionA()
        {
            float f = explosionSize;
            HashSet hashset = new HashSet();
            double d0;
            double d1;
            double d2;
    
            for(int i = 0; i < boomRadius; ++i)
            {
                for(int j = 0; j < boomRadius; ++j)
                {
                    for(int k = 0; k < boomRadius; ++k)
                    {
                        if(i == 0 || i == boomRadius - 1 || j == 0 || j == boomRadius - 1 || k == 0 || k == boomRadius - 1)
                        {
                            double d3 = (i / (boomRadius - 1.0F) * 2.0F - 1.0F);
                            double d4 = (j / (boomRadius - 1.0F) * 2.0F - 1.0F);
                            double d5 = (k / (boomRadius - 1.0F) * 2.0F - 1.0F);
                            double d6 = Math.sqrt(d3 * d3 + d4 * d4 + d5 * d5);
                            d3 /= d6;
                            d4 /= d6;
                            d5 /= d6;
                            float f1 = explosionSize * (0.7F + worldObj.rand.nextFloat() * 0.6F);
                            d0 = explosionX;
                            d1 = explosionY;
                            d2 = explosionZ;
    
                            for (float f2 = 0.3F; f1 > 0.0F; f1 -= f2 * 0.75F)
                            {
                                int l = MathHelper.floor_double(d0);
                                int i1 = MathHelper.floor_double(d1);
                                int j1 = MathHelper.floor_double(d2);
                                int k1 = worldObj.getBlockId(l, i1, j1);
    
                                if (k1 > 0)
                                {
                                    Block block = Block.blocksList[k1];
                                    float f3 = exploder != null ? exploder.getBlockExplosionResistance(this, worldObj, l, i1, j1, block) : block.getExplosionResistance(exploder, worldObj, l, i1, j1, explosionX, explosionY, explosionZ);
                                    f1 -= (f3 + 0.3F) * f2;
                                }
    
                                if (f1 > 0.0F && (exploder == null || exploder.shouldExplodeBlock(this, worldObj, l, i1, j1, k1, f1)))
                                {
                              //    hashset.add(new ChunkPosition(l, i1, j1));
                                }
    
                                d0 += d3 * f2;
                                d1 += d4 * f2;
                                d2 += d5 * f2;
                            }
                        }
                    }
                }
            }
    
            nonProcessedBlockPositions.addAll(hashset);
            explosionSize *= 2.0F;
            int i = MathHelper.floor_double(explosionX - explosionSize - 1.0D);
            int j = MathHelper.floor_double(explosionX + explosionSize + 1.0D);
            int k = MathHelper.floor_double(explosionY - explosionSize - 1.0D);
            int l1 = MathHelper.floor_double(explosionY + explosionSize + 1.0D);
            int i2 = MathHelper.floor_double(explosionZ - explosionSize - 1.0D);
            int j2 = MathHelper.floor_double(explosionZ + explosionSize + 1.0D);
            List list = worldObj.getEntitiesWithinAABBExcludingEntity(exploder, AxisAlignedBB.getAABBPool().getAABB(i, k, i2, j, l1, j2));
            Vec3 vec3 = worldObj.getWorldVec3Pool().getVecFromPool(explosionX, explosionY, explosionZ);
    
            for (int k2 = 0; k2 < list.size(); ++k2)
            {
                Entity entity = (Entity)list.get(k2);
                double d7 = entity.getDistance(explosionX, explosionY, explosionZ) / explosionSize;
    
                if (d7 <= 1.0D)
                {
                    d0 = entity.posX - explosionX;
                    d1 = entity.posY + entity.getEyeHeight() - explosionY;
                    d2 = entity.posZ - explosionZ;
                    double d8 = MathHelper.sqrt_double(d0 * d0 + d1 * d1 + d2 * d2);
    
                    if (d8 != 0.0D)
                    {
                        d0 /= d8;
                        d1 /= d8;
                        d2 /= d8;
                        double d9 = worldObj.getBlockDensity(vec3, entity.boundingBox);
                        double d10 = (1.0D - d7) * d9;
                        entity.attackEntityFrom(player == null ? DamageSource.setExplosionSource(this) : new EntityDamageSourceGun(type.shortName, entity, player, type), ((int)((d10 * d10 + d10) / 2.0D * 8.0D * explosionSize + 1.0D)));
                        double d11 = EnchantmentProtection.func_92092_a(entity, d10);
                        entity.motionX += d0 * d11;
                        entity.motionY += d1 * d11;
                        entity.motionZ += d2 * d11;
    
                        if (entity instanceof EntityPlayer)
                        {
                            playerLocations.put((EntityPlayer)entity, worldObj.getWorldVec3Pool().getVecFromPool(d0 * d10, d1 * d10, d2 * d10));
                        }
                    }
                }
            }
    
            explosionSize = f;
        }
    
        /**
        * Does the second part of the explosion (sound, particles, drop spawn)
        */
        @Override
        public void doExplosionB(boolean par1)
        {
            worldObj.playSoundEffect(explosionX, explosionY, explosionZ, "random.explode", 4.0F, (1.0F + (worldObj.rand.nextFloat() - worldObj.rand.nextFloat()) * 0.2F) * 0.7F);
    
            if (explosionSize >= 2.0F && isSmoking)
            {
                worldObj.spawnParticle("hugeexplosion", explosionX, explosionY, explosionZ, 1.0D, 0.0D, 0.0D);
            }
            else
            {
                worldObj.spawnParticle("largeexplode", explosionX, explosionY, explosionZ, 1.0D, 0.0D, 0.0D);
            }
    
            Iterator iterator;
            ChunkPosition chunkposition;
            int i;
            int j;
            int k;
            int l;
    
            if (isSmoking)
            {
                iterator = nonProcessedBlockPositions.iterator();
    
                while (iterator.hasNext())
                {
                    chunkposition = (ChunkPosition)iterator.next();
                    i = chunkposition.x;
                    j = chunkposition.y;
                    k = chunkposition.z;
                    l = worldObj.getBlockId(i, j, k);
    
                    if (par1)
                    {
                        double d0 = (i + worldObj.rand.nextFloat());
                        double d1 = (j + worldObj.rand.nextFloat());
                        double d2 = (k + worldObj.rand.nextFloat());
                        double d3 = d0 - explosionX;
                        double d4 = d1 - explosionY;
                        double d5 = d2 - explosionZ;
                        double d6 = MathHelper.sqrt_double(d3 * d3 + d4 * d4 + d5 * d5);
                        d3 /= d6;
                        d4 /= d6;
                        d5 /= d6;
                        double d7 = 0.5D / (d6 / explosionSize + 0.1D);
                        d7 *= (worldObj.rand.nextFloat() * worldObj.rand.nextFloat() + 0.3F);
                        d3 *= d7;
                        d4 *= d7;
                        d5 *= d7;
                        worldObj.spawnParticle("explode", (d0 + explosionX * 1.0D) / 2.0D, (d1 + explosionY * 1.0D) / 2.0D, (d2 + explosionZ * 1.0D) / 2.0D, d3, d4, d5);
                        worldObj.spawnParticle("smoke", d0, d1, d2, d3, d4, d5);
                    }
    
                    if (l > 0)
                    {
                        Block block = Block.blocksList[l];
                        BreakEvent breakEvent = new BreakEvent(i, j, k, worldObj, block, worldObj.getBlockMetadata(i, j, k), player);
    
                        if(!breakEvent.isCanceled())
                        {
                            if (block.canDropFromExplosion(this))
                            {
                                block.dropBlockAsItemWithChance(worldObj, i, j, k, worldObj.getBlockMetadata(i, j, k), 1.0F / explosionSize, 0);
                            }
    
                            block.onBlockExploded(worldObj, i, j, k, this);
                            affectedBlockPositions.add(chunkposition);
                        }
                    }
                }
            }
    
            if (isFlaming)
            {
                iterator = nonProcessedBlockPositions.iterator();
    
                while (iterator.hasNext())
                {
                    chunkposition = (ChunkPosition)iterator.next();
                    i = chunkposition.x;
                    j = chunkposition.y;
                    k = chunkposition.z;
                    l = worldObj.getBlockId(i, j, k);
                    int i1 = worldObj.getBlockId(i, j - 1, k);
    
                    if (l == 0 && Block.opaqueCubeLookup[i1] && explosionRNG.nextInt(3) == 0)
                    {
                        worldObj.setBlock(i, j, k, Block.fire.blockID);
                    }
                }
            }
        }
    
        @Override
        public Map func_77277_b()
        {
            return playerLocations;
        }
    
        public EntityLivingBase func_94613_c()
        {
            return exploder == null ? null : (exploder instanceof EntityTNTPrimed ? ((EntityTNTPrimed)exploder).getTntPlacedBy() : (exploder instanceof EntityLivingBase ? (EntityLivingBase)exploder : null));
        }
    }
    
    Насколько я понял, вызова метода взрыва нет, а, как и во многих модах, идет прямая работа с содержимым чанков. Через события кидается только дроп, EntityDamage, звук взрыва и т.д.
    С помощью // перед hashset.add(new ChunkPosition я на данный момент просто убрал разрушения блоков вообще.
     
    Последнее редактирование: 23 апр 2014
  12. Автор темы
    Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    BreakEvent breakEvent = new BreakEvent(i, j, k, worldObj, block, worldObj.getBlockMetadata(i, j, k), player);
    Опа чё, мод бросает стандартный форджевский эвент.
     
  13. komiss

    komiss Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    komiss77
    Ну, мне до Шевчика ещё учиться и учиться..) Но всё же, как добавить проверку мира? У меня просто такая концепция на сервере - основной мир для жизни с максимальной защитой от вандализма, и есть мир, где можно всё взрывать/копать.

    PS немного подумал, похоже что этот BreakEvent делает только дроп. А уничтожение блоков в от взрыва идёт именно там, где я поставил // (проверял, работает, блоки не рушатся). Надо вечером ещё поэксперементировать, разобраться до конца.
     
    Последнее редактирование: 23 апр 2014
  14. Radviger

    Radviger Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    Radviger
    Прошу прилепить к событию открытия Сейфа из IC2 не проверку на op, а проверку на пермиссию, например - ic2.safe.access(для открытия), ic2.safe.destroy(для ломания/сворачивания) или что-то подобное

    P.S. Было бы очень полезно, особенно для модерации, для проверки сейфов на предмет дюперства, читерства и т.д. , т.к. в основном плохие игроки там и прячут всё своё "добро".
     
  15. dirt34

    dirt34 Старожил Пользователь

    Баллы:
    143
    Skype:
    alucid2
    Имя в Minecraft:
    dirt34

    запрети его и всё.
    Shevchik, сделай пожалуйста крафт предметов в IC2 Experimental build #397, ибо если я ставлю фикс у меня не работают крафты из Gravity Suite
     
  16. Автор темы
    Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Данную инфу легко вытащить из TileEntity в этой позиции. Так что закажите кому-нибудь написание плагина который может вытащить такую инфу.
    Я работать с IC2 скорее всего уже не буду, слишком занят.
    IC2Fixes установи.
     
  17. dirt34

    dirt34 Старожил Пользователь

    Баллы:
    143
    Skype:
    alucid2
    Имя в Minecraft:
    dirt34
    я ж тебе написал что я его ставил и из-за него у меня не крафтов предметов из мода GraviSuite
     
  18. Автор темы
    Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    В таком случае ничем не могу помочь.
     
  19. dirt34

    dirt34 Старожил Пользователь

    Баллы:
    143
    Skype:
    alucid2
    Имя в Minecraft:
    dirt34
    а посмотерть никак не можешь?
    решил проблему.
    Shevchik, Почему у меня в консоли появляеться вот такое:

    Код:
    2014-05-03 13:53:28 [SEVERE] Could not pass event BlockPlaceEvent to ModFixNG v1.0
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:437)
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
        at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:31)
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:479)
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:464)
        at org.bukkit.craftbukkit.v1_6_R3.event.CraftEventFactory.callBlockPlaceEvent(CraftEventFactory.java:123)
        at net.minecraft.item.ItemStack.func_77943_a(ItemStack.java:235)
        at net.minecraft.item.ItemInWorldManager.func_73078_a(ItemInWorldManager.java:549)
        at net.minecraft.network.NetServerHandler.func_72472_a(NetServerHandler.java:896)
        at net.minecraft.network.packet.Packet15Place.func_73279_a(Packet15Place.java:79)
        at net.minecraft.network.TcpConnection.func_74428_b(TcpConnection.java:470)
        at net.minecraft.network.NetServerHandler.func_72570_d(NetServerHandler.java:233)
        at net.minecraft.network.NetworkListenThread.func_71747_b(NetworkListenThread.java:54)
        at net.minecraft.server.dedicated.DedicatedServerListenThread.func_71747_b(DedicatedServerListenThread.java:34)
        at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:910)
        at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:330)
        at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:777)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:659)
        at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16)
    Caused by: java.lang.NullPointerException
        at modfixng.fixes.ForgeMultipartPlaceFix.onBlockPlaceEvent(ForgeMultipartPlaceFix.java:60)
        at sun.reflect.GeneratedMethodAccessor141.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:435)
        ... 18 more
     
  20. Автор темы
    Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    У вас неправильно настоены айди мультиблоков.
     
    Последнее редактирование: 3 май 2014

Поделиться этой страницей