Chainsaw chops down the entire tree
This commit is contained in:
parent
3481cf4dba
commit
e5e05d0afd
2 changed files with 88 additions and 0 deletions
|
@ -24,10 +24,16 @@
|
||||||
|
|
||||||
package techreborn.events;
|
package techreborn.events;
|
||||||
|
|
||||||
|
import net.minecraft.block.state.IBlockState;
|
||||||
|
import net.minecraft.util.EnumHand;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.event.entity.player.PlayerEvent;
|
||||||
import net.minecraftforge.event.world.BlockEvent;
|
import net.minecraftforge.event.world.BlockEvent;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
import reborncore.common.registration.RebornRegistry;
|
import reborncore.common.registration.RebornRegistry;
|
||||||
import reborncore.common.registration.impl.ConfigRegistry;
|
import reborncore.common.registration.impl.ConfigRegistry;
|
||||||
|
import techreborn.init.ModItems;
|
||||||
import techreborn.items.ItemGems;
|
import techreborn.items.ItemGems;
|
||||||
import techreborn.lib.ModInfo;
|
import techreborn.lib.ModInfo;
|
||||||
import techreborn.utils.OreDictUtils;
|
import techreborn.utils.OreDictUtils;
|
||||||
|
@ -44,4 +50,22 @@ public class BlockBreakHandler {
|
||||||
event.getDrops().add(ItemGems.getGemByName("red_garnet").copy());
|
event.getDrops().add(ItemGems.getGemByName("red_garnet").copy());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public void getBreakSpeedEvent(PlayerEvent.BreakSpeed event){
|
||||||
|
if(event.getEntityPlayer().getHeldItem(EnumHand.MAIN_HAND).getItem() == ModItems.ADVANCED_CHAINSAW){
|
||||||
|
BlockPos pos = event.getPos();
|
||||||
|
World worldIn = event.getEntityPlayer().world;
|
||||||
|
float speed = 2F;
|
||||||
|
int blocks = 0;
|
||||||
|
for (int i = 1; i < 10; i++) {
|
||||||
|
BlockPos nextPos = pos.up(i);
|
||||||
|
IBlockState nextState = worldIn.getBlockState(nextPos);
|
||||||
|
if(nextState.getBlock().isWood(worldIn, nextPos)){
|
||||||
|
blocks ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
event.setNewSpeed(speed * blocks);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,17 +24,28 @@
|
||||||
|
|
||||||
package techreborn.items.tools;
|
package techreborn.items.tools;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.creativetab.CreativeTabs;
|
import net.minecraft.creativetab.CreativeTabs;
|
||||||
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
|
import net.minecraft.entity.item.EntityItem;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.init.Items;
|
import net.minecraft.init.Items;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.NonNullList;
|
import net.minecraft.util.NonNullList;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
import net.minecraftforge.event.world.BlockEvent;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
import reborncore.common.powerSystem.PoweredItem;
|
import reborncore.common.powerSystem.PoweredItem;
|
||||||
import techreborn.config.ConfigTechReborn;
|
import techreborn.config.ConfigTechReborn;
|
||||||
import techreborn.init.ModItems;
|
import techreborn.init.ModItems;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class ItemAdvancedChainsaw extends ItemChainsaw {
|
public class ItemAdvancedChainsaw extends ItemChainsaw {
|
||||||
|
|
||||||
public ItemAdvancedChainsaw() {
|
public ItemAdvancedChainsaw() {
|
||||||
|
@ -60,9 +71,62 @@ public class ItemAdvancedChainsaw extends ItemChainsaw {
|
||||||
itemList.add(charged);
|
itemList.add(charged);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onBlockDestroyed(ItemStack stack, World worldIn, IBlockState blockIn, BlockPos pos, EntityLivingBase entityLiving) {
|
||||||
|
for (int i = 1; i < 10; i++) {
|
||||||
|
BlockPos nextPos = pos.up(i);
|
||||||
|
IBlockState nextState = worldIn.getBlockState(nextPos);
|
||||||
|
if(nextState.getBlock().isWood(worldIn, nextPos)){
|
||||||
|
breakBlock(nextPos, stack, worldIn, entityLiving, pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return super.onBlockDestroyed(stack, worldIn, blockIn, pos, entityLiving);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float getStrVsBlock(ItemStack stack, IBlockState state) {
|
||||||
|
float speed = super.getStrVsBlock(stack, state);
|
||||||
|
return super.getStrVsBlock(stack, state);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canHarvestBlock(IBlockState blockIn) {
|
public boolean canHarvestBlock(IBlockState blockIn) {
|
||||||
return Items.DIAMOND_AXE.canHarvestBlock(blockIn);
|
return Items.DIAMOND_AXE.canHarvestBlock(blockIn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void breakBlock(BlockPos pos, ItemStack stack, World world, EntityLivingBase entityLiving, BlockPos oldPos) {
|
||||||
|
if (oldPos == pos) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!PoweredItem.canUseEnergy(cost, stack)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
IBlockState blockState = world.getBlockState(pos);
|
||||||
|
Block block = blockState.getBlock();
|
||||||
|
if (blockState.getBlockHardness(world, pos) == -1.0F) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<ItemStack> stuff = block.getDrops(world, pos, blockState, 0);
|
||||||
|
List<ItemStack> dropList = new ArrayList<>();
|
||||||
|
BlockEvent.HarvestDropsEvent event = new BlockEvent.HarvestDropsEvent(world, pos, blockState, 0, 1, dropList, (EntityPlayer) entityLiving, false);
|
||||||
|
MinecraftForge.EVENT_BUS.post(event);
|
||||||
|
for (ItemStack drop : dropList) {
|
||||||
|
if (!drop.isEmpty() && drop.getCount() > 0) {
|
||||||
|
stuff.add(drop);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (ItemStack drop : stuff) {
|
||||||
|
if (world.isRemote) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
final EntityItem entityitem = new EntityItem(world, oldPos.getX(), oldPos.getY(), oldPos.getZ(), drop);
|
||||||
|
entityitem.motionX = (oldPos.getX() - oldPos.getX()) / 10.0f;
|
||||||
|
entityitem.motionY = 0.15000000596046448;
|
||||||
|
entityitem.motionZ = (oldPos.getZ() - oldPos.getZ()) / 10.0f;
|
||||||
|
world.spawnEntity(entityitem);
|
||||||
|
}
|
||||||
|
PoweredItem.useEnergy(cost, stack);
|
||||||
|
world.setBlockToAir(pos);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue