Добавить шанс дропа существующему монстру

476
9
39
Интересует, как добавить уже существующим монстрам дроп своих или чужих предметов с определенным шансом, есть что-то не костыльное для этого?
 
Вы вообще умеете смотреть файлы форджа?
LivingDropsEvent.
 
Я предполагал, что это так же просто, как и зарегистрировать предмет/блок/ивент.Но тут опять же ивентом только, печально.
 
Эм, с каких пор юзать ивенты - это плохо?
Они для этого и созданы, лол.
 
Я написал, а не сказал, а печально, потому что пойду разбирать всё это потом.
 
Код:
public class CustomLivingDrops {
    public static double rand;

    @ForgeSubscribe
    public void dropPig(LivingDropsEvent event) {

        if (event.source.getDamageType().equals("player")) { 

            rand = Math.random(); 

            if (event.entityLiving instanceof EntityPig) { 

                if (rand < 0.25D) { 

                    event.entityLiving.dropItem(Item.leather.itemID, 1); 

                }
            }
        }
    }

}
 
Я сделал иначе
Код:
  public static double rand;
            public Random r = new Random();

@ForgeSubscribe
    public void DropHandler(LivingDropsEvent event) {
        if(event.entityLiving instanceof EntityPigZombie) {
           event.entityLiving.entityDropItem(new ItemStack(vazkii.tinkerer.common.item.ModItems.kamiResource.itemID, 1, 6),  r.nextInt(40)); 
        }
}
[merge_posts_bbcode]Добавлено: 18.08.2014 18:33:10[/merge_posts_bbcode]

Volkula написал(а):
Код:
public class CustomLivingDrops {
    public static double rand;

    @ForgeSubscribe
    public void dropPig(LivingDropsEvent event) {

        if (event.source.getDamageType().equals("player")) { 

            rand = Math.random(); 

            if (event.entityLiving instanceof EntityPig) { 

                if (rand < 0.25D) { 

                    event.entityLiving.dropItem(Item.leather.itemID, 1); 

                }
            }
        }
    }

}
Спасибо, не учёл, что нужно сделать проверку исходит ли урон от игрока или от внешнего объекта.
 
И в итоге получил херню из за того что рандом на сервере и клиенте разный. делай рандом с сидом.
 
Dragon2488 написал(а):
И в итоге получил херню из за того что рандом на сервере и клиенте разный. делай рандом с сидом.
То есть представленные выше варианты не являются корректными, и нужно делать рандом 
вот так:
Код:
Math.random()*WorldSeed;

Или я опять в своей нубизме перешёл все границы?
 
Random rand = new Random(13124);
Вот так устанавливается сид.
А обычно делают свои генераторы рандома.
 
Dragon2488 написал(а):
И в итоге получил херню из за того что рандом на сервере и клиенте разный.

А почему бы не просто world.isRemote?
У меня все прекрасно работает:
Код:
for(int i1 = 0; i1 < mobData.getItemsData().size(); i1++) {
    MobItem item = mobData.getItemsData().get(i1);
    
    double random = Math.random();
    double randomFor = (double) item.getDropChance() / 100;
    
    if(random < randomFor) {
        int count = MathHelper.getRandomIntegerInRange(new Random(), item.getCountFrom(), item.getCountTo());
        eventEntity.entityDropItem(new ItemStack(item.getID(), count, item.getMetaData()), 1.0F);
    }
}

this.disableXpDrop((EntityLivingBase) eventEntity);

double random = Math.random();
double randomFor = (double) mobData.getXpDropChance() / 100;

if(random < randomFor) {
    int count = MathHelper.getRandomIntegerInRange(new Random(), mobData.getXpDropFrom(), mobData.getXpDropTo());
    
    while (count > 0)
    {
        int j = EntityXPOrb.getXPSplit(i);
        count -= j;
        eventEntity.worldObj.spawnEntityInWorld(new EntityXPOrb(eventEntity.worldObj, eventEntity.posX, eventEntity.posY, eventEntity.posZ, count));
    }
}
 
Я обычно юзаю рандом мира, а не генерирую свой с сидом.
[merge_posts_bbcode]Добавлено: 19.08.2014 18:45:55[/merge_posts_bbcode]

Я обычно юзаю рандом мира, а не генерирую свой с сидом.
 
Назад
Сверху