рандом замена блока

Версия Minecraft
1.7.10
создал предмет, который из камня делает руду. только вот я бы хотел с опр. шансами руду ставить (там... 10% алмаз 70 уголь 20 железо на пример) вот код который тупо ставит алмаз вместо камня.
Код:
@Override
 public boolean onItemUse(ItemStack item, EntityPlayer entity, World world, int i, int j, int k, int l, float a, float b, float c) {
 float var4 = 1.0F;
 if (true) {
 if(world.getBlock(i, j, k) == Blocks.stone){
 if(item.getItemDamage() <= 7500){
 item.damageItem(2500,entity);
 world.setBlock(i,j,k, Blocks.diamond_ore);
 }}}
 return true;
 }
 
MaximPixel написал(а):
Ну это математика 4-6 класс
Код:
int r = new Random().nextInt(10);
if (r == 0) // 1/10 = 10%
    set_diamond(); else
if (r > 0 && r < 3) // 2/10 = 20%
    set_iron(); else
    set_coal(); // 7/10 = 70%

спасибо, работает! но есть небольшое но: немного проглючивает (ставит железо а потом через милисекунду ставит алмаз)
 
MaximPixel написал(а):
Работает это?
Код:
int r = new Random().nextInt(10);
if (r == 0) {
    set_diamond(); 
} else if (r > 0 && r < 3) {
    set_iron();
} else {
    set_coal();
}

ну... я немного код изменил... я сам хз что я сделал, но работает хоть и пролагивает.
Код:
@Override
 public boolean onItemUse(ItemStack item, EntityPlayer entity, World world, int i, int j, int k, int l, float a, float b, float c) {
 float var4 = 1.0F;
 if (true) {
 if(world.getBlock(i, j, k) == Blocks.stone){
 if(item.getItemDamage() <= 7500){
 item.damageItem(2500,entity);
 int r = new Random().nextInt(100);
 if (r == 0) // 10/100 = 10%
 world.setBlock(i,j,k,Blocks.diamond_ore); else
 if (r > 0 && r < 30) // 20/100 = 20%
 world.setBlock(i,j,k,Blocks.iron_ore); else
 world.setBlock(i,j,k,Blocks.coal_ore); // 64/100 = 70%
 }}}
 return true;
 }
подскажи, как добавить ещё там... золото, изумруд и т д... с шансом 5% и 1% ? или кинь РУССКИЙ гайд по рандому
 
MaximPixel написал(а):
Работает это?
Код:
int r = new Random().nextInt(10);
if (r == 0) {
    set_diamond(); 
} else if (r > 0 && r < 3) {
    set_iron();
} else {
    set_coal();
}

я не знаю, то ли ты наговнокодил, то ли ты просто пример такой простенький рукописный написал... короче всё замечательно, я не искал никаких обучений по рандому и яве и исправил все недоработки твоего кода. для тех, кому надо вот исправленный код:
Код:
@Override
 public boolean onItemUse(ItemStack item, EntityPlayer entity, World world, int i, int j, int k, int l, float a, float b, float c) {
 float var4 = 1.0F;
 if (true) {
 if(world.getBlock(i, j, k) == Blocks.stone){
 if(item.getItemDamage() <= 7500){
 item.damageItem(2500,entity);
 int r = new Random().nextInt(100);
 if (!entity.worldObj.isRemote && r == 0) {
 world.setBlock(i,j,k,Blocks.diamond_ore); 
 } else if (!entity.worldObj.isRemote && r >= 1 && r <= 30) {
 world.setBlock(i,j,k,Blocks.iron_ore);
 } else if (!entity.worldObj.isRemote && r >= 31 && r <= 35) {
 world.setBlock(i,j,k,Blocks.gold_ore);
 } else if (!entity.worldObj.isRemote && r >= 36){
 world.setBlock(i,j,k,Blocks.coal_ore);
 }
 }}}
 return true;
 }

если честно, я хз что значят некоторые вещи вроде [font=Monaco, Consolas, Courier, monospace]!entity.worldObj.isRemote но я знаю, что без них будет говнокод :D тему можно закрывать.[/font]


MaximPixel написал(а):
"if (true)" зачем? И не "nextInt(100)", а "nextInt(10)"

ну... мне нужно не по 10, 20% а по 5, 1, 10 и т д


MaximPixel написал(а):

я хз))) из MCreator'a стыбзил код т. к. я не знал раньше как клик по блоку сделать...
 
MaximPixel написал(а):
world.isRemote - это мир с серверной стороны или с клиента. Допустим если при world.isRemote ставить блок, то на сервер эти данные не отправится.

то есть если я этим предметом на сервере кликну на камень то руду увижу только я? или я что-то не так понял?
 
1,560
86
204
asdqwertypro написал(а):
MaximPixel написал(а):
world.isRemote - это мир с серверной стороны или с клиента. Допустим если при world.isRemote ставить блок, то на сервер эти данные не отправится.

то есть если я этим предметом на сервере кликну на камень то руду увижу только я? или я что-то не так понял?
Если ты только в клиенте кликнешь, то да.
 
2,505
81
397
asdqwertypro написал(а):
но я знаю, что без них будет говнокод
У тебя сложилось неправильное понимание слова "говнокод". Не хочу, тебя расстраивать, но как раз его ты и написал.
 
49
0
Попробуй написать массивом вместо условия. Провисает походу потому что клик по блоку поступает асинхронно с твоим шансовым условием. Сначала ты кликаешь, а потом только начинается просчёт рандома и вывод.
 
7,099
324
1,510
В учебнике есть тема по части вероятности


http://forum.mcmodding.ru/%D0%A2%D0%B5%D0%BC%D0%B0-%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D0%B9-%D1%83%D0%B1%D1%8B%D0%B2%D0%B0%D1%8E%D1%89%D0%B8%D0%B9-%D1%80%D0%B0%D0%BD%D0%B4%D0%BE%D0%BC
 
Dahaka написал(а):
asdqwertypro написал(а):
но я знаю, что без них будет говнокод
У тебя сложилось неправильное понимание слова "говнокод". Не хочу, тебя расстраивать, но как раз его ты и написал.

ну извини. я думал говнокод это типо код не рабочий или глюченный... что тогда такое говнокод?


hohserg написал(а):
В учебнике есть тема по части вероятности


http://forum.mcmodding.ru/%D0%A2%D0%B5%D0%BC%D0%B0-%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D0%B9-%D1%83%D0%B1%D1%8B%D0%B2%D0%B0%D1%8E%D1%89%D0%B8%D0%B9-%D1%80%D0%B0%D0%BD%D0%B4%D0%BE%D0%BC



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