2018-10-16 11:49:30 +02:00
|
|
|
package de.ellpeck.naturesaura.blocks;
|
|
|
|
|
2018-10-18 13:34:37 +02:00
|
|
|
import de.ellpeck.naturesaura.Helper;
|
2018-11-14 19:14:03 +01:00
|
|
|
import de.ellpeck.naturesaura.api.NaturesAuraAPI;
|
|
|
|
import de.ellpeck.naturesaura.api.recipes.TreeRitualRecipe;
|
|
|
|
import de.ellpeck.naturesaura.blocks.multi.Multiblocks;
|
2018-10-16 11:49:30 +02:00
|
|
|
import de.ellpeck.naturesaura.blocks.tiles.TileEntityWoodStand;
|
2018-11-21 20:36:55 +01:00
|
|
|
import de.ellpeck.naturesaura.blocks.tiles.render.RenderWoodStand;
|
|
|
|
import de.ellpeck.naturesaura.reg.ITESRProvider;
|
2019-11-04 19:08:49 +01:00
|
|
|
import de.ellpeck.naturesaura.reg.ModRegistry;
|
2018-10-16 11:49:30 +02:00
|
|
|
import net.minecraft.block.SoundType;
|
|
|
|
import net.minecraft.block.material.Material;
|
2018-11-05 20:52:29 +01:00
|
|
|
import net.minecraft.block.state.BlockFaceShape;
|
2019-10-20 22:30:49 +02:00
|
|
|
import net.minecraft.block.BlockState;
|
|
|
|
import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
|
|
|
|
import net.minecraft.entity.player.PlayerEntity;
|
2018-11-14 19:14:03 +01:00
|
|
|
import net.minecraft.item.ItemStack;
|
2018-11-20 11:44:07 +01:00
|
|
|
import net.minecraft.item.crafting.Ingredient;
|
2018-11-14 19:14:03 +01:00
|
|
|
import net.minecraft.tileentity.TileEntity;
|
2019-10-20 22:30:49 +02:00
|
|
|
import net.minecraft.util.Direction;
|
|
|
|
import net.minecraft.util.Hand;
|
2018-11-21 20:36:55 +01:00
|
|
|
import net.minecraft.util.Tuple;
|
2018-10-16 11:49:30 +02:00
|
|
|
import net.minecraft.util.math.AxisAlignedBB;
|
|
|
|
import net.minecraft.util.math.BlockPos;
|
|
|
|
import net.minecraft.world.IBlockAccess;
|
|
|
|
import net.minecraft.world.World;
|
2018-11-14 19:14:03 +01:00
|
|
|
import net.minecraftforge.common.MinecraftForge;
|
2019-11-04 19:08:49 +01:00
|
|
|
import net.minecraftforge.common.ToolType;
|
2018-11-14 19:14:03 +01:00
|
|
|
import net.minecraftforge.event.terraingen.SaplingGrowTreeEvent;
|
2019-10-20 22:30:49 +02:00
|
|
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|
|
|
import net.minecraftforge.api.distmarker.Dist;
|
|
|
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
2018-11-14 19:14:03 +01:00
|
|
|
import org.apache.commons.lang3.mutable.MutableObject;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Arrays;
|
|
|
|
import java.util.List;
|
2018-10-16 11:49:30 +02:00
|
|
|
|
2018-11-21 20:36:55 +01:00
|
|
|
public class BlockWoodStand extends BlockContainerImpl implements ITESRProvider {
|
2018-10-16 11:49:30 +02:00
|
|
|
|
|
|
|
private static final AxisAlignedBB BOUND_BOX = new AxisAlignedBB(3 / 16F, 0F, 3 / 16F, 13 / 16F, 13 / 16F, 13 / 16F);
|
|
|
|
|
|
|
|
public BlockWoodStand() {
|
2019-11-04 19:08:49 +01:00
|
|
|
super("wood_stand", TileEntityWoodStand.class, "wood_stand", ModBlocks.prop(Material.WOOD).hardnessAndResistance(1.5F).sound(SoundType.WOOD).harvestLevel(0).harvestTool(ToolType.AXE));
|
2018-11-14 19:14:03 +01:00
|
|
|
|
|
|
|
MinecraftForge.TERRAIN_GEN_BUS.register(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
@SubscribeEvent
|
|
|
|
public void onTreeGrow(SaplingGrowTreeEvent event) {
|
|
|
|
World world = event.getWorld();
|
|
|
|
BlockPos pos = event.getPos();
|
|
|
|
if (!world.isRemote) {
|
|
|
|
if (Multiblocks.TREE_RITUAL.isComplete(world, pos)) {
|
2019-10-20 22:30:49 +02:00
|
|
|
BlockState sapling = world.getBlockState(pos);
|
2018-11-14 19:14:03 +01:00
|
|
|
ItemStack saplingStack = sapling.getBlock().getItem(world, pos, sapling);
|
|
|
|
if (!saplingStack.isEmpty()) {
|
|
|
|
for (TreeRitualRecipe recipe : NaturesAuraAPI.TREE_RITUAL_RECIPES.values()) {
|
2018-11-20 11:44:07 +01:00
|
|
|
if (recipe.saplingType.apply(saplingStack)) {
|
|
|
|
List<Ingredient> required = new ArrayList<>(Arrays.asList(recipe.ingredients));
|
2018-11-14 19:14:03 +01:00
|
|
|
MutableObject<TileEntityWoodStand> toPick = new MutableObject<>();
|
|
|
|
|
|
|
|
boolean fine = Multiblocks.TREE_RITUAL.forEach(pos, 'W', (tilePos, matcher) -> {
|
|
|
|
TileEntity tile = world.getTileEntity(tilePos);
|
|
|
|
if (tile instanceof TileEntityWoodStand) {
|
|
|
|
TileEntityWoodStand stand = (TileEntityWoodStand) tile;
|
|
|
|
ItemStack stack = stand.items.getStackInSlot(0);
|
|
|
|
if (!stack.isEmpty()) {
|
2018-11-19 21:55:00 +01:00
|
|
|
for (int i = required.size() - 1; i >= 0; i--) {
|
2018-11-20 11:44:07 +01:00
|
|
|
Ingredient req = required.get(i);
|
|
|
|
if (req.apply(stack)) {
|
2018-11-19 21:55:00 +01:00
|
|
|
required.remove(i);
|
2018-11-14 19:14:03 +01:00
|
|
|
|
2018-11-19 21:55:00 +01:00
|
|
|
if (toPick.getValue() == null) {
|
|
|
|
toPick.setValue(stand);
|
|
|
|
}
|
|
|
|
return true;
|
2018-11-14 19:14:03 +01:00
|
|
|
}
|
|
|
|
}
|
2018-11-19 21:55:00 +01:00
|
|
|
return false;
|
2018-11-14 19:14:03 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
});
|
|
|
|
|
|
|
|
if (fine && required.isEmpty()) {
|
|
|
|
toPick.getValue().setRitual(pos, recipe);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-10-16 11:49:30 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2019-10-20 22:30:49 +02:00
|
|
|
public boolean onBlockActivated(World worldIn, BlockPos pos, BlockState state, PlayerEntity playerIn, Hand hand, Direction facing, float hitX, float hitY, float hitZ) {
|
2018-10-24 12:42:04 +02:00
|
|
|
return Helper.putStackOnTile(playerIn, hand, pos, 0, true);
|
2018-10-16 11:49:30 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2019-10-20 22:30:49 +02:00
|
|
|
public AxisAlignedBB getBoundingBox(BlockState state, IBlockAccess source, BlockPos pos) {
|
2018-10-16 11:49:30 +02:00
|
|
|
return BOUND_BOX;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2019-10-20 22:30:49 +02:00
|
|
|
public boolean isFullCube(BlockState state) {
|
2018-10-16 11:49:30 +02:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2019-10-20 22:30:49 +02:00
|
|
|
public boolean isOpaqueCube(BlockState state) {
|
2018-10-16 11:49:30 +02:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2019-10-20 22:30:49 +02:00
|
|
|
public boolean isNormalCube(BlockState state, IBlockAccess world, BlockPos pos) {
|
2018-10-16 11:49:30 +02:00
|
|
|
return false;
|
|
|
|
}
|
2018-11-05 20:52:29 +01:00
|
|
|
|
|
|
|
@Override
|
2019-10-20 22:30:49 +02:00
|
|
|
public boolean isSideSolid(BlockState baseState, IBlockAccess world, BlockPos pos, Direction side) {
|
2018-11-05 20:52:29 +01:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2019-10-20 22:30:49 +02:00
|
|
|
public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, BlockState state, BlockPos pos, Direction face) {
|
2018-11-05 20:52:29 +01:00
|
|
|
return BlockFaceShape.UNDEFINED;
|
|
|
|
}
|
2018-11-21 20:36:55 +01:00
|
|
|
|
|
|
|
@Override
|
2019-10-20 22:30:49 +02:00
|
|
|
@OnlyIn(Dist.CLIENT)
|
|
|
|
public Tuple<Class, TileEntityRenderer> getTESR() {
|
2018-11-21 20:36:55 +01:00
|
|
|
return new Tuple<>(TileEntityWoodStand.class, new RenderWoodStand());
|
|
|
|
}
|
2018-10-16 11:49:30 +02:00
|
|
|
}
|