mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
commit
27c0c94897
@ -17,6 +17,8 @@ import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.MovingObjectPosition;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
@ -116,6 +118,22 @@ public class BlockDoorGeneric extends BlockDummyable implements IBomb {
|
||||
return aabb;
|
||||
}
|
||||
|
||||
// Enables clicking through the open door
|
||||
@Override
|
||||
public MovingObjectPosition collisionRayTrace(World world, int x, int y, int z, Vec3 startVec, Vec3 endVec) {
|
||||
AxisAlignedBB box = getBoundingBox(world, x, y ,z);
|
||||
box = AxisAlignedBB.getBoundingBox(
|
||||
Math.min(box.minX, box.maxX), Math.min(box.minY, box.maxY), Math.min(box.minZ, box.maxZ),
|
||||
Math.max(box.minX, box.maxX), Math.max(box.minY, box.maxY), Math.max(box.minZ, box.maxZ)
|
||||
);
|
||||
|
||||
MovingObjectPosition intercept = box.calculateIntercept(startVec, endVec);
|
||||
if(intercept != null) {
|
||||
return new MovingObjectPosition(x, y, z, intercept.sideHit, intercept.hitVec);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override //should fix AI pathfinding
|
||||
public boolean getBlocksMovement(IBlockAccess world, int x, int y, int z) { //btw the method name is the exact opposite of that it's doing, check net.minecraft.pathfinding.PathNavigate#512
|
||||
return hasExtra(world.getBlockMetadata(x, y, z)); //if it's open
|
||||
|
||||
@ -14,6 +14,7 @@ import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockSlab;
|
||||
import net.minecraft.block.material.MapColor;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Blocks;
|
||||
@ -44,7 +45,7 @@ public class Spotlight extends Block implements ISpotlight, INBTTransformable {
|
||||
this.type = type;
|
||||
this.isOn = isOn;
|
||||
|
||||
this.setHardness(1F);
|
||||
this.setHardness(0.5F);
|
||||
|
||||
if(isOn) setLightLevel(1.0F);
|
||||
}
|
||||
@ -81,6 +82,17 @@ public class Spotlight extends Block implements ISpotlight, INBTTransformable {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
// Ah yes, I love methods named the literal opposite of what they do
|
||||
public boolean getBlocksMovement(IBlockAccess world, int x, int y, int z) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MapColor getMapColor(int meta) {
|
||||
return MapColor.airColor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB getCollisionBoundingBoxFromPool(World p_149668_1_, int p_149668_2_, int p_149668_3_, int p_149668_4_) {
|
||||
return null;
|
||||
|
||||
@ -14,7 +14,10 @@ import com.hbm.items.tool.ItemToolAbility;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.util.MovingObjectPosition;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
@ -219,6 +222,104 @@ public interface IToolAreaAbility extends IBaseAbility {
|
||||
}
|
||||
};
|
||||
|
||||
public static final IToolAreaAbility HAMMER_FLAT = new IToolAreaAbility() {
|
||||
@Override
|
||||
public String getName() {
|
||||
return "tool.ability.hammer_flat";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllowed() {
|
||||
return ToolConfig.abilityHammer;
|
||||
}
|
||||
|
||||
public final int[] rangeAtLevel = { 1, 2, 3, 4 };
|
||||
|
||||
@Override
|
||||
public int levels() {
|
||||
return rangeAtLevel.length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getExtension(int level) {
|
||||
return " (" + rangeAtLevel[level] + ")";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int sortOrder() {
|
||||
return SORT_ORDER_BASE + 3;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) {
|
||||
int range = rangeAtLevel[level];
|
||||
|
||||
MovingObjectPosition hit = raytraceFromEntity(world, player, false, 4.5d);
|
||||
if(hit == null) return true;
|
||||
int sideHit = hit.sideHit;
|
||||
|
||||
// we successfully destroyed a block. time to do AOE!
|
||||
int xRange = range;
|
||||
int yRange = range;
|
||||
int zRange = 0;
|
||||
switch (sideHit) {
|
||||
case 0:
|
||||
case 1:
|
||||
yRange = 0;
|
||||
zRange = range;
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
xRange = range;
|
||||
zRange = 0;
|
||||
break;
|
||||
case 4:
|
||||
case 5:
|
||||
xRange = 0;
|
||||
zRange = range;
|
||||
break;
|
||||
}
|
||||
|
||||
for(int a = x - xRange; a <= x + xRange; a++) {
|
||||
for(int b = y - yRange; b <= y + yRange; b++) {
|
||||
for(int c = z - zRange; c <= z + zRange; c++) {
|
||||
if(a == x && b == y && c == z)
|
||||
continue;
|
||||
|
||||
tool.breakExtraBlock(world, a, b, c, player, x, y, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Taken from TConstruct, licensed under CC0 (public domain)
|
||||
// https://github.com/SlimeKnights/TinkersConstruct/blob/9ea7a0e60fe180aff591701b12c89da21da99289/src/main/java/tconstruct/library/tools/AbilityHelper.java#L707-L731
|
||||
private MovingObjectPosition raytraceFromEntity(World world, EntityPlayer player, boolean par3, double range) {
|
||||
float f = 1.0F;
|
||||
float f1 = player.prevRotationPitch + (player.rotationPitch - player.prevRotationPitch) * f;
|
||||
float f2 = player.prevRotationYaw + (player.rotationYaw - player.prevRotationYaw) * f;
|
||||
double d0 = player.prevPosX + (player.posX - player.prevPosX) * (double) f;
|
||||
double d1 = player.prevPosY + (player.posY - player.prevPosY) * (double) f + 1.62D;
|
||||
double d2 = player.prevPosZ + (player.posZ - player.prevPosZ) * (double) f;
|
||||
Vec3 vec3 = Vec3.createVectorHelper(d0, d1, d2);
|
||||
float f3 = MathHelper.cos(-f2 * 0.017453292F - (float) Math.PI);
|
||||
float f4 = MathHelper.sin(-f2 * 0.017453292F - (float) Math.PI);
|
||||
float f5 = -MathHelper.cos(-f1 * 0.017453292F);
|
||||
float f6 = MathHelper.sin(-f1 * 0.017453292F);
|
||||
float f7 = f4 * f5;
|
||||
float f8 = f3 * f5;
|
||||
double d3 = range;
|
||||
if (player instanceof EntityPlayerMP)
|
||||
{
|
||||
d3 = ((EntityPlayerMP) player).theItemInWorldManager.getBlockReachDistance();
|
||||
}
|
||||
Vec3 vec31 = vec3.addVector((double) f7 * d3, (double) f6 * d3, (double) f8 * d3);
|
||||
return world.func_147447_a(vec3, vec31, par3, !par3, par3);
|
||||
}
|
||||
};
|
||||
|
||||
public static final IToolAreaAbility EXPLOSION = new IToolAreaAbility() {
|
||||
@Override
|
||||
public String getName() {
|
||||
@ -249,7 +350,7 @@ public interface IToolAreaAbility extends IBaseAbility {
|
||||
|
||||
@Override
|
||||
public int sortOrder() {
|
||||
return SORT_ORDER_BASE + 3;
|
||||
return SORT_ORDER_BASE + 4;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -270,7 +371,7 @@ public interface IToolAreaAbility extends IBaseAbility {
|
||||
};
|
||||
// endregion handlers
|
||||
|
||||
static final IToolAreaAbility[] abilities = { NONE, RECURSION, HAMMER, EXPLOSION };
|
||||
static final IToolAreaAbility[] abilities = { NONE, RECURSION, HAMMER, HAMMER_FLAT, EXPLOSION };
|
||||
|
||||
static IToolAreaAbility getByName(String name) {
|
||||
for(IToolAreaAbility ability : abilities) {
|
||||
|
||||
@ -175,7 +175,7 @@ public interface IToolHarvestAbility extends IBaseAbility {
|
||||
|
||||
if(doesSmelt) {
|
||||
for(ItemStack stack : drops) {
|
||||
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, stack.copy()));
|
||||
world.spawnEntityInWorld(new EntityItem(world, ItemToolAbility.dropX + 0.5, ItemToolAbility.dropY + 0.5, ItemToolAbility.dropZ + 0.5, stack.copy()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -211,7 +211,7 @@ public interface IToolHarvestAbility extends IBaseAbility {
|
||||
harvestBlock(doesShred, world, x, y, z, player);
|
||||
|
||||
if(doesShred) {
|
||||
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.copy()));
|
||||
world.spawnEntityInWorld(new EntityItem(world, ItemToolAbility.dropX + 0.5, ItemToolAbility.dropY + 0.5, ItemToolAbility.dropZ + 0.5, result.copy()));
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -248,7 +248,7 @@ public interface IToolHarvestAbility extends IBaseAbility {
|
||||
if(doesCentrifuge) {
|
||||
for(ItemStack st : result) {
|
||||
if(st != null) {
|
||||
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, st.copy()));
|
||||
world.spawnEntityInWorld(new EntityItem(world, ItemToolAbility.dropX + 0.5, ItemToolAbility.dropY + 0.5, ItemToolAbility.dropZ + 0.5, st.copy()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -285,7 +285,7 @@ public interface IToolHarvestAbility extends IBaseAbility {
|
||||
harvestBlock(doesCrystallize, world, x, y, z, player);
|
||||
|
||||
if(doesCrystallize) {
|
||||
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.output.copy()));
|
||||
world.spawnEntityInWorld(new EntityItem(world, ItemToolAbility.dropX + 0.5, ItemToolAbility.dropY + 0.5, ItemToolAbility.dropZ + 0.5, result.output.copy()));
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -324,7 +324,7 @@ public interface IToolHarvestAbility extends IBaseAbility {
|
||||
harvestBlock(doesConvert, world, x, y, z, player);
|
||||
|
||||
if(doesConvert) {
|
||||
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.ingot_mercury, mercury)));
|
||||
world.spawnEntityInWorld(new EntityItem(world, ItemToolAbility.dropX + 0.5, ItemToolAbility.dropY + 0.5, ItemToolAbility.dropZ + 0.5, new ItemStack(ModItems.ingot_mercury, mercury)));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -25,8 +25,10 @@ public class ContainerCrateBase extends ContainerBase {
|
||||
|
||||
for(int i = 0; i < 9; i++) {
|
||||
this.addSlotToContainer(
|
||||
invPlayer.currentItem == i ? new SlotPlayerCrateLocked(invPlayer, i, playerInvX + i * 18, playerHotbarY) :
|
||||
new SlotNonRetarded(invPlayer, i, playerInvX + i * 18, playerHotbarY));
|
||||
(invPlayer.currentItem == i && this.tile instanceof ItemBlockStorageCrate.InventoryCrate) ?
|
||||
new SlotPlayerCrateLocked(invPlayer, i, playerInvX + i * 18, playerHotbarY) :
|
||||
new SlotNonRetarded(invPlayer, i, playerInvX + i * 18, playerHotbarY)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -52,7 +52,8 @@ public class GUIScreenToolAbility extends GuiScreen {
|
||||
abilitiesArea.add(new AbilityInfo(IToolAreaAbility.NONE, 0, 91));
|
||||
abilitiesArea.add(new AbilityInfo(IToolAreaAbility.RECURSION, 32, 91));
|
||||
abilitiesArea.add(new AbilityInfo(IToolAreaAbility.HAMMER, 64, 91));
|
||||
abilitiesArea.add(new AbilityInfo(IToolAreaAbility.EXPLOSION, 96, 91));
|
||||
abilitiesArea.add(new AbilityInfo(IToolAreaAbility.HAMMER_FLAT, 96, 91));
|
||||
abilitiesArea.add(new AbilityInfo(IToolAreaAbility.EXPLOSION, 128, 91));
|
||||
|
||||
abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.NONE, 0, 107));
|
||||
abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.SILK, 32, 107));
|
||||
|
||||
@ -4466,6 +4466,7 @@ public class ModItems {
|
||||
schrabidium_pickaxe = new ItemToolAbility(20, 0, MainRegistry.tMatSchrab, EnumToolType.PICKAXE)
|
||||
.addAbility(IWeaponAbility.RADIATION, 0)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 1)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 6)
|
||||
.addAbility(IToolHarvestAbility.SILK, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 4)
|
||||
@ -4476,6 +4477,7 @@ public class ModItems {
|
||||
schrabidium_axe = new ItemToolAbility(25, 0, MainRegistry.tMatSchrab, EnumToolType.AXE)
|
||||
.addAbility(IWeaponAbility.RADIATION, 0)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 1)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 6)
|
||||
.addAbility(IToolHarvestAbility.SILK, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 4)
|
||||
@ -4487,6 +4489,7 @@ public class ModItems {
|
||||
schrabidium_shovel = new ItemToolAbility(15, 0, MainRegistry.tMatSchrab, EnumToolType.SHOVEL)
|
||||
.addAbility(IWeaponAbility.RADIATION, 0)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 1)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 6)
|
||||
.addAbility(IToolHarvestAbility.SILK, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 4)
|
||||
@ -4554,12 +4557,14 @@ public class ModItems {
|
||||
|
||||
elec_pickaxe = new ItemToolAbilityPower(6F, 0, MainRegistry.tMatElec, EnumToolType.PICKAXE, 500000, 1000, 100)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 1)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 2)
|
||||
.addAbility(IToolHarvestAbility.SILK, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 1).setUnlocalizedName("elec_pickaxe").setTextureName(RefStrings.MODID + ":elec_drill_anim");
|
||||
|
||||
elec_axe = new ItemToolAbilityPower(10F, 0, MainRegistry.tMatElec, EnumToolType.AXE, 500000, 1000, 100)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 1)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 2)
|
||||
.addAbility(IToolHarvestAbility.SILK, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 1)
|
||||
@ -4568,6 +4573,7 @@ public class ModItems {
|
||||
|
||||
elec_shovel = new ItemToolAbilityPower(5F, 0, MainRegistry.tMatElec, EnumToolType.SHOVEL, 500000, 1000, 100)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 1)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 2)
|
||||
.addAbility(IToolHarvestAbility.SILK, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 1).setUnlocalizedName("elec_shovel").setTextureName(RefStrings.MODID + ":elec_shovel_anim");
|
||||
@ -4577,12 +4583,14 @@ public class ModItems {
|
||||
|
||||
desh_pickaxe = new ItemToolAbility(5F, -0.05, MainRegistry.tMatDesh, EnumToolType.PICKAXE)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 0)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 0)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 0)
|
||||
.addAbility(IToolHarvestAbility.SILK, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 1).setUnlocalizedName("desh_pickaxe").setTextureName(RefStrings.MODID + ":desh_pickaxe");
|
||||
|
||||
desh_axe = new ItemToolAbility(7.5F, -0.05, MainRegistry.tMatDesh, EnumToolType.AXE)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 0)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 0)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 0)
|
||||
.addAbility(IToolHarvestAbility.SILK, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 1)
|
||||
@ -4590,6 +4598,7 @@ public class ModItems {
|
||||
|
||||
desh_shovel = new ItemToolAbility(4F, -0.05, MainRegistry.tMatDesh, EnumToolType.SHOVEL)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 0)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 0)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 0)
|
||||
.addAbility(IToolHarvestAbility.SILK, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 1).setUnlocalizedName("desh_shovel").setTextureName(RefStrings.MODID + ":desh_shovel");
|
||||
@ -4618,17 +4627,20 @@ public class ModItems {
|
||||
cobalt_decorated_pickaxe = new ItemToolAbility(6F, 0, matDecCobalt, EnumToolType.PICKAXE)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 0)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 0)
|
||||
.addAbility(IToolHarvestAbility.SILK, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 2).setUnlocalizedName("cobalt_decorated_pickaxe").setTextureName(RefStrings.MODID + ":cobalt_decorated_pickaxe");
|
||||
cobalt_decorated_axe = new ItemToolAbility(8F, 0, matDecCobalt, EnumToolType.AXE)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 0)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 0)
|
||||
.addAbility(IToolHarvestAbility.SILK, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 2)
|
||||
.addAbility(IWeaponAbility.BEHEADER, 0).setUnlocalizedName("cobalt_decorated_axe").setTextureName(RefStrings.MODID + ":cobalt_decorated_axe");
|
||||
cobalt_decorated_shovel = new ItemToolAbility(5F, 0, matDecCobalt, EnumToolType.SHOVEL)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 0)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 0)
|
||||
.addAbility(IToolHarvestAbility.SILK, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 2).setUnlocalizedName("cobalt_decorated_shovel").setTextureName(RefStrings.MODID + ":cobalt_decorated_shovel");
|
||||
cobalt_decorated_hoe = new ModHoe(matDecCobalt).setUnlocalizedName("cobalt_decorated_hoe").setTextureName(RefStrings.MODID + ":cobalt_decorated_hoe");
|
||||
@ -4641,12 +4653,14 @@ public class ModItems {
|
||||
starmetal_pickaxe = new ItemToolAbility(8F, 0, matStarmetal, EnumToolType.PICKAXE)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 3)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 1)
|
||||
.addAbility(IToolHarvestAbility.SILK, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 4)
|
||||
.addAbility(IWeaponAbility.STUN, 1).setUnlocalizedName("starmetal_pickaxe").setTextureName(RefStrings.MODID + ":starmetal_pickaxe");
|
||||
starmetal_axe = new ItemToolAbility(12F, 0, matStarmetal, EnumToolType.AXE)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 3)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 1)
|
||||
.addAbility(IToolHarvestAbility.SILK, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 4)
|
||||
.addAbility(IWeaponAbility.BEHEADER, 0)
|
||||
@ -4654,6 +4668,7 @@ public class ModItems {
|
||||
starmetal_shovel = new ItemToolAbility(7F, 0, matStarmetal, EnumToolType.SHOVEL)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 3)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 1)
|
||||
.addAbility(IToolHarvestAbility.SILK, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 4)
|
||||
.addAbility(IWeaponAbility.STUN, 1).setUnlocalizedName("starmetal_shovel").setTextureName(RefStrings.MODID + ":starmetal_shovel");
|
||||
@ -4668,6 +4683,7 @@ public class ModItems {
|
||||
.addAbility(IToolHarvestAbility.SHREDDER, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 1)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 2).setUnlocalizedName("drax").setTextureName(RefStrings.MODID + ":drax");
|
||||
drax_mk2 = new ItemToolAbilityPower(15F, -0.05, MainRegistry.tMatElec, EnumToolType.MINER, 1000000000, 250000, 7500)
|
||||
.addAbility(IToolHarvestAbility.SMELTER, 0)
|
||||
@ -4675,6 +4691,7 @@ public class ModItems {
|
||||
.addAbility(IToolHarvestAbility.CENTRIFUGE, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 2)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 2)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 2)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 4).setUnlocalizedName("drax_mk2").setTextureName(RefStrings.MODID + ":drax_mk2");
|
||||
drax_mk3 = new ItemToolAbilityPower(20F, -0.05, MainRegistry.tMatElec, EnumToolType.MINER, 2500000000L, 500000, 10000)
|
||||
.addAbility(IToolHarvestAbility.SMELTER, 0)
|
||||
@ -4684,11 +4701,13 @@ public class ModItems {
|
||||
.addAbility(IToolHarvestAbility.SILK, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 3)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 3)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 3)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 5).setUnlocalizedName("drax_mk3").setTextureName(RefStrings.MODID + ":drax_mk3");
|
||||
|
||||
ToolMaterial matBismuth = EnumHelper.addToolMaterial("HBM_BISMUTH", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.ingot_bismuth));
|
||||
bismuth_pickaxe = new ItemToolAbility(15F, 0, matBismuth, EnumToolType.MINER)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 1)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 1)
|
||||
.addAbility(IToolHarvestAbility.SHREDDER, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 1)
|
||||
@ -4699,6 +4718,7 @@ public class ModItems {
|
||||
.setDepthRockBreaker().setUnlocalizedName("bismuth_pickaxe").setTextureName(RefStrings.MODID + ":bismuth_pickaxe");
|
||||
bismuth_axe = new ItemToolAbility(25F, 0, matBismuth, EnumToolType.AXE)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 1)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 1)
|
||||
.addAbility(IToolHarvestAbility.SHREDDER, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 1)
|
||||
@ -4711,6 +4731,7 @@ public class ModItems {
|
||||
ToolMaterial matVolcano = EnumHelper.addToolMaterial("HBM_VOLCANIC", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.ingot_bismuth));
|
||||
volcanic_pickaxe = new ItemToolAbility(15F, 0, matVolcano, EnumToolType.MINER)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 1)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 1)
|
||||
.addAbility(IToolHarvestAbility.SMELTER, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 2)
|
||||
@ -4721,6 +4742,7 @@ public class ModItems {
|
||||
.setDepthRockBreaker().setUnlocalizedName("volcanic_pickaxe").setTextureName(RefStrings.MODID + ":volcanic_pickaxe");
|
||||
volcanic_axe = new ItemToolAbility(25F, 0, matVolcano, EnumToolType.AXE)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 1)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 1)
|
||||
.addAbility(IToolHarvestAbility.SMELTER, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 2)
|
||||
@ -4732,6 +4754,7 @@ public class ModItems {
|
||||
ToolMaterial matChlorophyte = EnumHelper.addToolMaterial("HBM_CHLOROPHYTE", 4, 0, 75F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.powder_chlorophyte));
|
||||
chlorophyte_pickaxe = new ItemToolAbility(20F, 0, matChlorophyte, EnumToolType.MINER)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 1)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 1)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 3)
|
||||
.addAbility(IToolHarvestAbility.CENTRIFUGE, 0)
|
||||
@ -4742,6 +4765,7 @@ public class ModItems {
|
||||
.setDepthRockBreaker().setUnlocalizedName("chlorophyte_pickaxe").setTextureName(RefStrings.MODID + ":chlorophyte_pickaxe");
|
||||
chlorophyte_axe = new ItemToolAbility(50F, 0, matChlorophyte, EnumToolType.AXE)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 1)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 1)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 1)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 3)
|
||||
.addAbility(IWeaponAbility.STUN, 4)
|
||||
@ -4751,6 +4775,7 @@ public class ModItems {
|
||||
ToolMaterial matMese = EnumHelper.addToolMaterial("HBM_MESE", 4, 0, 100F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.plate_paa));
|
||||
mese_pickaxe = new ItemToolAbility(35F, 0, matMese, EnumToolType.MINER)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 2)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 2)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 2)
|
||||
.addAbility(IToolHarvestAbility.CRYSTALLIZER, 0)
|
||||
.addAbility(IToolHarvestAbility.SILK, 0)
|
||||
@ -4762,6 +4787,7 @@ public class ModItems {
|
||||
.setDepthRockBreaker().setUnlocalizedName("mese_pickaxe").setTextureName(RefStrings.MODID + ":mese_pickaxe");
|
||||
mese_axe = new ItemToolAbility(75F, 0, matMese, EnumToolType.AXE)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 2)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 2)
|
||||
.addAbility(IToolAreaAbility.RECURSION, 2)
|
||||
.addAbility(IToolHarvestAbility.SILK, 0)
|
||||
.addAbility(IToolHarvestAbility.LUCK, 5)
|
||||
@ -4774,7 +4800,8 @@ public class ModItems {
|
||||
|
||||
ToolMaterial matDwarf = EnumHelper.addToolMaterial("HBM_DWARVEN", 2, 0, 4F, 0.0F, 10).setRepairItem(new ItemStack(ModItems.ingot_copper));
|
||||
dwarven_pickaxe = new ItemToolAbility(5F, -0.1, matDwarf, EnumToolType.MINER)
|
||||
.addAbility(IToolAreaAbility.HAMMER, 0).setUnlocalizedName("dwarven_pickaxe").setMaxDamage(250).setTextureName(RefStrings.MODID + ":dwarven_pickaxe");
|
||||
.addAbility(IToolAreaAbility.HAMMER, 0)
|
||||
.addAbility(IToolAreaAbility.HAMMER_FLAT, 0).setUnlocalizedName("dwarven_pickaxe").setMaxDamage(250).setTextureName(RefStrings.MODID + ":dwarven_pickaxe");
|
||||
|
||||
ToolMaterial matMeteorite = EnumHelper.addToolMaterial("HBM_METEORITE", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.plate_paa));
|
||||
meteorite_sword = new ItemSwordMeteorite(9F, 0, matMeteorite).setUnlocalizedName("meteorite_sword").setTextureName(RefStrings.MODID + ":meteorite_sword");
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package com.hbm.items.tool;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
@ -27,6 +29,8 @@ import com.hbm.packet.toclient.PlayerInformPacket;
|
||||
import com.hbm.tileentity.IGUIProvider;
|
||||
|
||||
import api.hbm.item.IDepthRockTool;
|
||||
import cpw.mods.fml.client.FMLClientHandler;
|
||||
import cpw.mods.fml.relauncher.ReflectionHelper;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.block.Block;
|
||||
@ -151,6 +155,10 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro
|
||||
return true;
|
||||
}
|
||||
|
||||
// Should be safe, considering the AoE ability does a similar trick already.
|
||||
// If not, wrap this in a ThreadLocal or something...
|
||||
public static int dropX, dropY, dropZ;
|
||||
|
||||
@Override
|
||||
public boolean onBlockStartBreak(ItemStack stack, int x, int y, int z, EntityPlayer player) {
|
||||
|
||||
@ -173,6 +181,10 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro
|
||||
Configuration config = getConfiguration(stack);
|
||||
ToolPreset preset = config.getActivePreset();
|
||||
|
||||
dropX = x;
|
||||
dropY = y;
|
||||
dropZ = z;
|
||||
|
||||
preset.harvestAbility.preHarvestAll(preset.harvestAbilityLevel, world, player);
|
||||
|
||||
boolean skipRef = preset.areaAbility.onDig(preset.areaAbilityLevel, world, x, y, z, player, this);
|
||||
@ -316,7 +328,7 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro
|
||||
double d = (double) (rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
|
||||
double d1 = (double) (rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
|
||||
double d2 = (double) (rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
|
||||
EntityItem entityitem = new EntityItem(player.worldObj, (double) x + d, (double) y + d1, (double) z + d2, stack);
|
||||
EntityItem entityitem = new EntityItem(player.worldObj, (double) dropX + d, (double) dropY + d1, (double) dropZ + d2, stack);
|
||||
entityitem.delayBeforeCanPickup = 10;
|
||||
player.worldObj.spawnEntityInWorld(entityitem);
|
||||
}
|
||||
@ -326,6 +338,9 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro
|
||||
}
|
||||
}
|
||||
|
||||
// Since it's added by forge, access transformers don't affect it (even wildcards), so we do it the old-fashioned way
|
||||
private static Method blockCaptureDrops = ReflectionHelper.findMethod(Block.class, null, new String[] { "captureDrops" }, new Class[] { boolean.class });
|
||||
|
||||
public static void standardDigPost(World world, int x, int y, int z, EntityPlayerMP player) {
|
||||
|
||||
Block block = world.getBlock(x, y, z);
|
||||
@ -351,7 +366,20 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro
|
||||
}
|
||||
|
||||
if(removedByPlayer && canHarvest) {
|
||||
block.harvestBlock(world, player, x, y, z, l);
|
||||
try {
|
||||
blockCaptureDrops.invoke(block, true);
|
||||
block.harvestBlock(world, player, x, y, z, l);
|
||||
List<ItemStack> drops = (List)blockCaptureDrops.invoke(block, false);
|
||||
for (ItemStack stack : drops) {
|
||||
block.dropBlockAsItem(world, dropX, dropY, dropZ, stack);
|
||||
}
|
||||
} catch (IllegalAccessException e) {
|
||||
// Shouldn't be possible with ReflectionHelper
|
||||
MainRegistry.logger.error("Failed to capture drops for block " + block, e);
|
||||
} catch (InvocationTargetException e) {
|
||||
// Might be possible? Not in practice, though
|
||||
MainRegistry.logger.error("Failed to capture drops for block " + block, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -50,4 +50,8 @@ public net.minecraft.client.resources.AbstractResourcePack field_110597_b # re
|
||||
public net.minecraft.inventory.Container * # fucking everything i hate this class
|
||||
|
||||
# GuiIngame
|
||||
public net.minecraft.client.gui.GuiIngame field_92016_l # highlightingItemStack
|
||||
public net.minecraft.client.gui.GuiIngame field_92016_l # highlightingItemStack
|
||||
|
||||
# Block
|
||||
public net.minecraft.block.Block func_149642_a(Lnet/minecraft/world/World;IIILnet/minecraft/item/ItemStack;)V # dropBlockAsItem
|
||||
|
||||
|
||||
@ -4981,6 +4981,7 @@ tool.ability.cnetrifuge=Auto-Zentrifuge
|
||||
tool.ability.crystallizer=Auto-Kristallisierer
|
||||
tool.ability.explosion=Explosion
|
||||
tool.ability.hammer=AoE
|
||||
tool.ability.hammer_flat=Flacher AoE
|
||||
tool.ability.luck=Glück
|
||||
tool.ability.mercury=Quecksilber-Berührung
|
||||
tool.ability.midas=Midas' Hand
|
||||
|
||||
@ -6147,6 +6147,7 @@ tool.ability.centrifuge=Auto-Centrifuge
|
||||
tool.ability.crystallizer=Auto-Crystallizer
|
||||
tool.ability.explosion=Explosion
|
||||
tool.ability.hammer=AoE
|
||||
tool.ability.hammer_flat=Flat AoE
|
||||
tool.ability.luck=Fortune
|
||||
tool.ability.mercury=Mercury Touch
|
||||
tool.ability.midas=Midas Touch
|
||||
|
||||
@ -6164,6 +6164,7 @@ tool.ability.centrifuge=Auto-Centrifuge
|
||||
tool.ability.crystallizer=Auto-Crystallizer
|
||||
tool.ability.explosion=Explosion
|
||||
tool.ability.hammer=AoE
|
||||
tool.ability.hammer_flat=AoE piatta
|
||||
tool.ability.luck=Fortune
|
||||
tool.ability.mercury=Mercury Touch
|
||||
tool.ability.midas=Midas Touch
|
||||
|
||||
@ -5399,6 +5399,7 @@ tool.ability.centrifuge=Auto-Centrifuge
|
||||
tool.ability.crystallizer=Auto-Crystallizer
|
||||
tool.ability.explosion=Explosion
|
||||
tool.ability.hammer=AoE
|
||||
tool.ability.hammer_flat=Flat AoE
|
||||
tool.ability.luck=Fortune
|
||||
tool.ability.mercury=Mercury Touch
|
||||
tool.ability.midas=Midas Touch
|
||||
|
||||
@ -6378,6 +6378,7 @@ tool.ability.centrifuge=Авто-центрифуга
|
||||
tool.ability.crystallizer=Авто-кристаллизатор
|
||||
tool.ability.explosion=Взрыв
|
||||
tool.ability.hammer=Зона действия
|
||||
tool.ability.hammer_flat=Плоская зона действия
|
||||
tool.ability.luck=Удача
|
||||
tool.ability.mercury=Ртутное касание
|
||||
tool.ability.midas=Прикосновение Мидаса
|
||||
|
||||
@ -6147,6 +6147,7 @@ tool.ability.centrifuge=Автоцентрифуга
|
||||
tool.ability.crystallizer=Автокристалізатор
|
||||
tool.ability.explosion=Вибух
|
||||
tool.ability.hammer=Зона дії
|
||||
tool.ability.hammer_flat=Плоска зона дії
|
||||
tool.ability.luck=Вдача
|
||||
tool.ability.mercury=Ртутний дотик
|
||||
tool.ability.midas=Дотик Мідаса
|
||||
|
||||
@ -5811,6 +5811,7 @@ tool.ability.centrifuge=自动离心
|
||||
tool.ability.crystallizer=自动结晶
|
||||
tool.ability.explosion=爆破
|
||||
tool.ability.hammer=范围挖掘
|
||||
tool.ability.flat_hammer=平坦區域採礦
|
||||
tool.ability.luck=时运
|
||||
tool.ability.mercury=水银提取
|
||||
tool.ability.midas=点石成金
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.4 KiB |
Loading…
x
Reference in New Issue
Block a user