NaturesAura/src/main/java/de/ellpeck/naturesaura/items/ItemMultiblockMaker.java

79 lines
2.7 KiB
Java
Raw Normal View History

2018-11-07 13:33:49 +01:00
package de.ellpeck.naturesaura.items;
import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.api.multiblock.IMultiblock;
2019-10-20 22:30:49 +02:00
import net.minecraft.entity.player.PlayerEntity;
2018-11-07 13:33:49 +01:00
import net.minecraft.item.ItemStack;
2019-10-20 22:30:49 +02:00
import net.minecraft.nbt.CompoundNBT;
2018-11-07 13:33:49 +01:00
import net.minecraft.util.ActionResult;
2019-10-20 22:30:49 +02:00
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Direction;
import net.minecraft.util.Hand;
2018-11-07 13:33:49 +01:00
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import java.util.ArrayList;
import java.util.List;
public class ItemMultiblockMaker extends ItemImpl {
private static List<IMultiblock> multiblocks;
2018-11-07 13:33:49 +01:00
public ItemMultiblockMaker() {
super("multiblock_maker");
}
@Override
2019-10-20 22:30:49 +02:00
public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) {
2018-11-07 13:33:49 +01:00
ItemStack stack = playerIn.getHeldItem(handIn);
if (!worldIn.isRemote && playerIn.capabilities.isCreativeMode) {
int curr = getMultiblock(stack);
int next = (curr + 1) % multiblocks().size();
if (!stack.hasTagCompound())
2019-10-20 22:30:49 +02:00
stack.setTagCompound(new CompoundNBT());
2018-11-07 13:33:49 +01:00
stack.getTagCompound().setInteger("multiblock", next);
}
2019-10-20 22:30:49 +02:00
return new ActionResult<>(ActionResultType.SUCCESS, stack);
2018-11-07 13:33:49 +01:00
}
@Override
2019-10-20 22:30:49 +02:00
public ActionResultType onItemUse(PlayerEntity player, World worldIn, BlockPos pos, Hand hand, Direction facing, float hitX, float hitY, float hitZ) {
2018-11-07 13:33:49 +01:00
if (player.capabilities.isCreativeMode) {
IMultiblock multi = multiblocks().get(getMultiblock(player.getHeldItem(hand)));
2018-11-07 13:33:49 +01:00
if (multi == null)
2019-10-20 22:30:49 +02:00
return ActionResultType.PASS;
2018-11-07 13:33:49 +01:00
if (!worldIn.isRemote)
multi.forEach(pos.up(), (char) 0, (blockPos, matcher) -> {
worldIn.setBlockState(blockPos, matcher.getDefaultState());
return true;
});
2018-11-07 13:33:49 +01:00
2019-10-20 22:30:49 +02:00
return ActionResultType.SUCCESS;
2018-11-07 13:33:49 +01:00
}
2019-10-20 22:30:49 +02:00
return ActionResultType.PASS;
2018-11-07 13:33:49 +01:00
}
@Override
public String getItemStackDisplayName(ItemStack stack) {
String name = super.getItemStackDisplayName(stack);
IMultiblock multi = multiblocks().get(getMultiblock(stack));
return multi == null ? name : name + " (" + multi.getName() + ")";
2018-11-07 13:33:49 +01:00
}
private static int getMultiblock(ItemStack stack) {
if (!stack.hasTagCompound())
return 0;
return stack.getTagCompound().getInteger("multiblock");
}
private static List<IMultiblock> multiblocks() {
2018-11-07 13:33:49 +01:00
if (multiblocks == null) {
multiblocks = new ArrayList<>();
multiblocks.addAll(NaturesAuraAPI.MULTIBLOCKS.values());
2018-11-07 13:33:49 +01:00
}
return multiblocks;
}
}