Merge pull request #2241 from abel1502/abel-misc-tweaks-2

QoL tweaks 2
This commit is contained in:
HbmMods 2025-06-29 10:31:48 +02:00 committed by GitHub
commit 27c0c94897
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
17 changed files with 215 additions and 15 deletions

View File

@ -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

View File

@ -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;

View File

@ -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) {

View File

@ -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)));
}
}
};

View File

@ -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)
);
}
}

View File

@ -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));

View File

@ -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");

View File

@ -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);
}
}
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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=Прикосновение Мидаса

View File

@ -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=Дотик Мідаса

View File

@ -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