forked from TAIGA/TAIGA
176 lines
6.6 KiB
Java
176 lines
6.6 KiB
Java
package com.sosnitzka.ztic_addon.traits;
|
|
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.entity.EntityLiving;
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
import net.minecraft.entity.item.EntityTNTPrimed;
|
|
import net.minecraft.entity.monster.*;
|
|
import net.minecraft.entity.passive.*;
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.util.text.TextFormatting;
|
|
import net.minecraft.world.World;
|
|
import net.minecraftforge.common.MinecraftForge;
|
|
import net.minecraftforge.event.entity.player.PlayerEvent;
|
|
import net.minecraftforge.event.world.BlockEvent;
|
|
import slimeknights.tconstruct.library.traits.AbstractTrait;
|
|
import slimeknights.tconstruct.library.utils.ToolHelper;
|
|
import slimeknights.tconstruct.world.entity.EntityBlueSlime;
|
|
|
|
import static com.sosnitzka.ztic_addon.Blocks.*;
|
|
import static slimeknights.tconstruct.shared.TinkerCommons.oreArdite;
|
|
import static slimeknights.tconstruct.shared.TinkerCommons.oreCobalt;
|
|
|
|
/**
|
|
* Created by Robert on 03.06.2016.
|
|
*/
|
|
public class TraitRandomize extends AbstractTrait {
|
|
|
|
public TraitRandomize() {
|
|
super("randomize", TextFormatting.DARK_RED);
|
|
MinecraftForge.EVENT_BUS.register(this);
|
|
}
|
|
|
|
@Override
|
|
public void miningSpeed(ItemStack tool, PlayerEvent.BreakSpeed event) {
|
|
if (ToolHelper.isToolEffective2(tool, event.getState())) {
|
|
event.setNewSpeed((float) (event.getNewSpeed() + random.nextFloat() * 2));
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onHit(ItemStack tool, EntityLivingBase player, EntityLivingBase target, float damage, boolean isCritical) {
|
|
if (random.nextFloat() <= .15 && target instanceof EntityLiving) {
|
|
World w = player.getEntityWorld();
|
|
Entity e = new EntityCow(w);
|
|
if (!w.isRemote) {
|
|
int i = random.nextInt(22);
|
|
switch (i) {
|
|
case 0:
|
|
e = new EntityCow(w);
|
|
break;
|
|
case 1:
|
|
e = new EntityPig(w);
|
|
break;
|
|
case 2:
|
|
e = new EntityHorse(w);
|
|
break;
|
|
case 3:
|
|
e = new EntityChicken(w);
|
|
break;
|
|
case 4:
|
|
e = new EntityVillager(w);
|
|
break;
|
|
case 5:
|
|
e = new EntityEnderman(w);
|
|
break;
|
|
case 6:
|
|
e = new EntityPolarBear(w);
|
|
break;
|
|
case 7:
|
|
e = new EntityIronGolem(w);
|
|
break;
|
|
case 8:
|
|
e = new EntitySilverfish(w);
|
|
break;
|
|
case 9:
|
|
e = new EntityCaveSpider(w);
|
|
break;
|
|
case 10:
|
|
e = new EntityWolf(w);
|
|
break;
|
|
case 11:
|
|
e = new EntityWitch(w);
|
|
break;
|
|
case 12:
|
|
e = new EntityTNTPrimed(w);
|
|
break;
|
|
case 13:
|
|
e = new EntityGhast(w);
|
|
break;
|
|
case 14:
|
|
e = new EntitySpider(w);
|
|
break;
|
|
case 15:
|
|
e = new EntitySkeleton(w);
|
|
break;
|
|
case 16:
|
|
e = new EntityMagmaCube(w);
|
|
break;
|
|
case 17:
|
|
e = new EntitySlime(w);
|
|
break;
|
|
case 18:
|
|
e = new EntityBlueSlime(w);
|
|
break;
|
|
case 19:
|
|
e = new EntityBat(w);
|
|
break;
|
|
case 20:
|
|
e = new EntityPigZombie(w);
|
|
break;
|
|
case 21:
|
|
e = new EntityBlaze(w);
|
|
break;
|
|
}
|
|
e.setPosition(target.getPosition().getX(), target.getPosition().getY() + 0.1f, target.getPosition().getZ());
|
|
e.setCustomNameTag("Missingno");
|
|
((EntityLiving) e).setHealth(((EntityLiving) e).getHealth() * (random.nextInt(5) + 1));
|
|
w.spawnEntityInWorld(e);
|
|
target.setDead();
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void blockHarvestDrops(ItemStack tool, BlockEvent.HarvestDropsEvent event) {
|
|
float r = random.nextFloat();
|
|
if (r > 0.95f) event.getDrops().clear();
|
|
if (event.getDrops() != null) {
|
|
if (r < 0.4f && event.getDrops().get(0).getItem() == Item.getItemFromBlock(Blocks.IRON_ORE)) {
|
|
ItemStack change = new ItemStack(Item.getItemFromBlock(Blocks.IRON_ORE));
|
|
int i = random.nextInt(11);
|
|
switch (i) {
|
|
case 0:
|
|
change = new ItemStack(Item.getItemFromBlock(Blocks.GOLD_ORE));
|
|
break;
|
|
case 1:
|
|
change = new ItemStack(Item.getItemFromBlock(Blocks.REDSTONE_ORE));
|
|
break;
|
|
case 2:
|
|
change = new ItemStack(Item.getItemFromBlock(Blocks.LAPIS_ORE));
|
|
break;
|
|
case 3:
|
|
change = new ItemStack(Item.getItemFromBlock(Blocks.DIAMOND_ORE));
|
|
break;
|
|
case 4:
|
|
change = new ItemStack(Item.getItemFromBlock(Blocks.QUARTZ_ORE));
|
|
break;
|
|
case 5:
|
|
change = new ItemStack(oreCobalt.getItem());
|
|
break;
|
|
case 6:
|
|
change = new ItemStack(oreArdite.getItem());
|
|
break;
|
|
case 7:
|
|
change = new ItemStack(titaniteOre);
|
|
break;
|
|
case 8:
|
|
change = new ItemStack(bismuthOre);
|
|
break;
|
|
case 9:
|
|
change = new ItemStack(tiberiumOre);
|
|
break;
|
|
case 10:
|
|
change = new ItemStack(eterniteOre);
|
|
break;
|
|
}
|
|
event.getDrops().set(0, change);
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|