forked from TAIGA/TAIGA
* Developement tests for nbt data in traits * Lot of trait changes and better balancing * Traits reworked a bit, new traits added. * First correction of NBT Data in Trait (Soulbound). Is shown twice. Still needs corrections. * Few fixes in traits and new trait "catcher" * Small fix, needs workaround * fixed some catch issues * Fixed Catcher and Reviving Traits, new Trait: Souleater. Updated build.gradle for new TiC Version. * Splitted SoulEater to get the bad touch to an extra trait "Cursed". Added method for using nbt more easily. Changed declaration names of fluids * Some minor changes in Traits, Registry and Utils. * Iron_nugget is replaced with oreDict Item when not loaded via TAIGA. * Beginning of new material integration. Lot of names changed, lot more work to do here. Many null pointer exceptions and no changes of values up to now. * Some Small changes in names, registry and recipes * Some weird stuff I don't remember :D * fixed some things I missed while merging * Rollback to something * More Stuff * fixed some merging stuff * Fixed some misspelled names. Actually working with lots of restrictions. * Rearranged alloys, tried to add blocks / ingots for non-tinker-materials, but they won't work. * Again tried to fix the melting issue, but non-tinker materials still are not able to be casted as a block, ingot or nugget... * Fixed integration of materials without tools. * changed IMC to direct lib calls * removed more IMC, removed redundant code * some reformatting * Alloy integration reworked, needs to be balanced. * updated deps, renamed some func's, added duplicate material check * some more renaming * some reformatting, fixed wrong import, fixed string cmp's * Added images for blocks, ingots, nuggets and dust. Json changes do not work yet. * some reformatting * Removed old json files. Placeholder needed. * Fixed block json, items not working yet. * Fixed my own derp (missing json files) * Reduced materials to ensure unique traits for most of them. Still 30 though, but reduced by 20 more :'( RIP * Changed some generator stuff, not working properly right now! * rewrote offset generation, added some debug command, fixed some stuff * fixed on-surface-generation, made dependencies more flexible * reverted gen-weight back to its normal value * Meteor generator implemented. * fixed generating on ground * optimized a thing * Replaced Uru with Osram, replaced Meteorite with Uru, added Meteorite again for Hull-Material and late game alloy. * Some changes in generation of ores, not ready yet. * Added Cobble Meteorite. Added debug command. Implemented rest of ore generation. Some minor fixes left for generation including balancing. * Some changes for ore generation. Added 2 separate Generic Blocks for meteorite and their cobble variant. * some cleanup in Generator class, added meteor world save handler * Added Textures. Added blockstates and item models. Fixed fluid rendering. * renamed world save data file to be little more specific, removed a unused method * some preps for the upcoming release * First attempt of well balancing material stats. Renamed TiberiumX to Triberium. * Final changes... ready for beta testing * Added missing alloys. * Corrected balancing of ore generation. Still WIP * removed some last debug out * one last reformat
85 lines
3.4 KiB
Java
85 lines
3.4 KiB
Java
package com.sosnitzka.taiga.traits;
|
|
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.state.IBlockState;
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.util.math.BlockPos;
|
|
import net.minecraft.util.text.TextFormatting;
|
|
import net.minecraft.world.World;
|
|
import slimeknights.tconstruct.library.traits.AbstractTrait;
|
|
import slimeknights.tconstruct.library.utils.ToolHelper;
|
|
|
|
public class TraitFragile extends AbstractTrait {
|
|
|
|
public TraitFragile() {
|
|
super("fragile", TextFormatting.DARK_GRAY);
|
|
}
|
|
|
|
@Override
|
|
public void afterBlockBreak(ItemStack tool, World world, IBlockState state, BlockPos pos, EntityLivingBase player, boolean wasEffective) {
|
|
if (random.nextBoolean()) {
|
|
float f = random.nextFloat();
|
|
float b = 0.99F * calcBonus(tool);
|
|
if (!world.isRemote && tool.canHarvestBlock(state) && f <= b) {
|
|
if (random.nextBoolean()) ToolHelper.damageTool(tool, random.nextInt(3), player);
|
|
else ToolHelper.healTool(tool, random.nextInt(3), player);
|
|
}
|
|
} else {
|
|
float f = random.nextFloat();
|
|
float b = 0.99F * calcBonus(tool);
|
|
if (!world.isRemote && state.getBlock() == Blocks.STONE && f <= b) {
|
|
double x, y, z, sx, sy, sz;
|
|
sx = x = pos.getX();
|
|
sy = y = pos.getY();
|
|
sz = z = pos.getZ();
|
|
for (int i = random.nextInt(10) + 9; i > 0; i--) {
|
|
int r = random.nextInt(3);
|
|
int d = random.nextBoolean() ? 1 : -1;
|
|
if (r == 0) x += d;
|
|
if (r == 1) y += d;
|
|
if (r == 2) z += d;
|
|
BlockPos nextBlock = new BlockPos(x, y, z);
|
|
if (world.getBlockState(nextBlock) == world.getBlockState(pos)) {
|
|
Block block = null;
|
|
int ib = random.nextInt(2);
|
|
switch (ib) {
|
|
case 0:
|
|
block = Blocks.COBBLESTONE;
|
|
break;
|
|
case 1:
|
|
if (random.nextFloat() <= 0.9) block = Blocks.GRAVEL;
|
|
else block = Blocks.MOSSY_COBBLESTONE;
|
|
}
|
|
f = random.nextFloat();
|
|
assert block != null;
|
|
if (f < 0.85) {
|
|
world.setBlockState(nextBlock, block.getDefaultState());
|
|
} else if (f > 95) {
|
|
world.destroyBlock(nextBlock, true);
|
|
}
|
|
sx = x = nextBlock.getX();
|
|
sy = y = nextBlock.getY();
|
|
sz = z = nextBlock.getZ();
|
|
if (random.nextBoolean()) ToolHelper.damageTool(tool, 1, player);
|
|
} else {
|
|
x = sx;
|
|
y = sy;
|
|
z = sz;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
private float calcBonus(ItemStack tool) {
|
|
int durability = ToolHelper.getCurrentDurability(tool);
|
|
int maxDurability = ToolHelper.getMaxDurability(tool);
|
|
return (0.4f) / (maxDurability - 50) * (durability) + 0.55f;
|
|
}
|
|
}
|