Added leaf blower logic :D

This commit is contained in:
Michael Hillcox 2020-11-28 22:00:52 +00:00
parent c1bad8ba33
commit 8b525252a5
No known key found for this signature in database
GPG key ID: 971C5B254742488F
3 changed files with 93 additions and 3 deletions

View file

@ -3,6 +3,7 @@ package de.ellpeck.actuallyadditions.common.items;
import com.google.common.collect.ImmutableSet;
import de.ellpeck.actuallyadditions.common.ActuallyAdditions;
import de.ellpeck.actuallyadditions.common.items.useables.AllInOneTool;
import de.ellpeck.actuallyadditions.common.items.useables.LeafBlowerItem;
import de.ellpeck.actuallyadditions.common.items.useables.ManualItem;
import de.ellpeck.actuallyadditions.common.items.useables.TeleportStaffItem;
import de.ellpeck.actuallyadditions.common.materials.ArmorMaterials;
@ -171,8 +172,8 @@ public final class ActuallyItems {
public static final RegistryObject<Item> CRUSHED_COAL = ITEMS.register("crushed_coal", basicItem());
public static final RegistryObject<Item> CRUSHED_BLACK_QUARTZ = ITEMS.register("crushed_black_quartz", basicItem());
public static final RegistryObject<Item> SOLIDIFIED_EXPERIENCE = ITEMS.register("solidified_experience", basicItem());
public static final RegistryObject<Item> LEAF_BLOWER = ITEMS.register("leaf_blower", basicItem());
public static final RegistryObject<Item> ADVANCED_LEAF_BLOWER = ITEMS.register("advanced_leaf_blower", basicItem());
public static final RegistryObject<Item> LEAF_BLOWER = ITEMS.register("leaf_blower", () -> new LeafBlowerItem(false));
public static final RegistryObject<Item> ADVANCED_LEAF_BLOWER = ITEMS.register("advanced_leaf_blower", () -> new LeafBlowerItem(true));
public static final RegistryObject<Item> RING_OF_GROWTH = ITEMS.register("ring_of_growth", basicItem());
public static final RegistryObject<Item> RING_OF_MAGNETIZING = ITEMS.register("ring_of_magnetizing", basicItem());
public static final RegistryObject<Item> RING_OF_SPEED = ITEMS.register("ring_of_speed", basicItem());

View file

@ -0,0 +1,89 @@
package de.ellpeck.actuallyadditions.common.items.useables;
import de.ellpeck.actuallyadditions.common.items.ActuallyItem;
import de.ellpeck.actuallyadditions.common.items.IUseItem;
import net.minecraft.block.Block;
import net.minecraft.block.BushBlock;
import net.minecraft.block.LeavesBlock;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.common.IForgeShearable;
import java.util.ArrayList;
import java.util.Collections;
public class LeafBlowerItem extends ActuallyItem implements IUseItem {
private final boolean isAdvanced;
public LeafBlowerItem(boolean isAdvanced) {
super(baseProps().maxStackSize(0));
this.isAdvanced = isAdvanced;
}
@Override
public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) {
playerIn.setActiveHand(handIn);
return ActionResult.resultSuccess(playerIn.getHeldItem(handIn));
}
@Override
public void onUsingTick(ItemStack stack, LivingEntity player, int count) {
World world = player.world;
BlockPos pos = player.getPosition();
if (!world.isRemote) {
if (count <= this.getUseDuration(stack) && (this.isAdvanced || count % 3 == 0)) {
// Breaks the Blocks
this.findAndDestroy(world, pos);
// Plays a Minecart sounds (It really sounds like a Leaf Blower!)
player.playSound(SoundEvents.ENTITY_MINECART_RIDING, 0.3F, 0.001F);
}
}
}
private void findAndDestroy(World world, BlockPos pos) {
ArrayList<BlockPos> breakPositions = new ArrayList<>();
int rangeSides = 5;
int rangeUp = 1;
for (int reachX = -rangeSides; reachX < rangeSides + 1; reachX++) {
for (int reachZ = -rangeSides; reachZ < rangeSides + 1; reachZ++) {
for (int reachY = this.isAdvanced ? -rangeSides : -rangeUp; reachY < (this.isAdvanced ? rangeSides : rangeUp) + 1; reachY++) {
//The current Block to break
BlockPos currentPos = new BlockPos(pos.getX() + reachX, pos.getY() + reachY, pos.getZ() + reachZ);
Block block = world.getBlockState(currentPos).getBlock();
if ((block instanceof BushBlock || block instanceof IForgeShearable) && (this.isAdvanced || !(world.getBlockState(currentPos).getBlock() instanceof LeavesBlock))) {
breakPositions.add(currentPos);
}
}
}
}
if (breakPositions.isEmpty()) {
return;
}
Collections.shuffle(breakPositions);
BlockPos theCoord = breakPositions.get(0);
world.destroyBlock(theCoord, true);
}
@Override
public int getUseDuration(ItemStack stack) {
return Integer.MAX_VALUE;
}
@Override
public boolean canUse(ItemStack stack) {
return true; // todo: add energy logic
}
}

View file

@ -74,6 +74,6 @@ public class TeleportStaffItem extends ActuallyItem implements IUseItem {
@Override
public boolean canUse(ItemStack stack) {
return true;
return true; // todo: add energy logic
}
}