NaturesAura/src/main/java/de/ellpeck/naturesaura/events/TerrainGenEvents.java

68 lines
3 KiB
Java
Raw Normal View History

2018-10-16 11:49:30 +02:00
package de.ellpeck.naturesaura.events;
import de.ellpeck.naturesaura.Helper;
2018-11-07 13:33:49 +01:00
import de.ellpeck.naturesaura.blocks.multi.Multiblocks;
2018-10-16 11:49:30 +02:00
import de.ellpeck.naturesaura.blocks.tiles.TileEntityWoodStand;
import de.ellpeck.naturesaura.recipes.TreeRitualRecipe;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
2018-10-16 11:49:30 +02:00
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.event.terraingen.SaplingGrowTreeEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import org.apache.commons.lang3.mutable.MutableObject;
2018-10-16 11:49:30 +02:00
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
2018-10-16 11:49:30 +02:00
public class TerrainGenEvents {
@SubscribeEvent
public void onTreeGrow(SaplingGrowTreeEvent event) {
World world = event.getWorld();
BlockPos pos = event.getPos();
if (!world.isRemote) {
2018-11-07 13:33:49 +01:00
if (Multiblocks.TREE_RITUAL.isComplete(world, pos)) {
2018-10-16 11:49:30 +02:00
IBlockState sapling = world.getBlockState(pos);
ItemStack saplingStack = sapling.getBlock().getItem(world, pos, sapling);
if (!saplingStack.isEmpty()) {
2018-10-22 00:14:52 +02:00
for (TreeRitualRecipe recipe : TreeRitualRecipe.RECIPES.values()) {
if (Helper.areItemsEqual(saplingStack, recipe.saplingType, true)) {
List<ItemStack> required = new ArrayList<>(Arrays.asList(recipe.items));
MutableObject<TileEntityWoodStand> toPick = new MutableObject<>();
2018-10-16 11:49:30 +02:00
2018-11-07 13:33:49 +01:00
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()) {
int index = Helper.getItemIndex(required, stack, true);
if (index >= 0) {
required.remove(index);
2018-10-16 11:49:30 +02:00
if (toPick.getValue() == null) {
toPick.setValue(stand);
}
} else {
2018-11-07 13:33:49 +01:00
return false;
}
2018-10-16 11:49:30 +02:00
}
}
2018-11-07 13:33:49 +01:00
return true;
});
2018-10-16 11:49:30 +02:00
2018-11-07 13:33:49 +01:00
if (fine && required.isEmpty()) {
toPick.getValue().setRitual(pos, recipe);
2018-10-16 17:48:36 +02:00
break;
}
2018-10-16 11:49:30 +02:00
}
}
}
}
}
}
}