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

70 lines
3.1 KiB
Java
Raw Normal View History

2018-10-16 11:49:30 +02:00
package de.ellpeck.naturesaura.events;
import de.ellpeck.naturesaura.Helper;
import de.ellpeck.naturesaura.blocks.ModBlocks;
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.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.event.terraingen.SaplingGrowTreeEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import java.util.*;
public class TerrainGenEvents {
@SubscribeEvent
public void onTreeGrow(SaplingGrowTreeEvent event) {
World world = event.getWorld();
BlockPos pos = event.getPos();
if (!world.isRemote) {
if (Helper.checkMultiblock(world, pos, TileEntityWoodStand.GOLD_POWDER_POSITIONS, ModBlocks.GOLD_POWDER.getDefaultState(), true)) {
List<TileEntityWoodStand> stands = new ArrayList<>();
List<ItemStack> usableItems = new ArrayList<>();
Helper.getTileEntitiesInArea(world, pos, 5, tile -> {
2018-10-16 11:49:30 +02:00
if (tile instanceof TileEntityWoodStand) {
TileEntityWoodStand stand = (TileEntityWoodStand) tile;
2018-10-18 13:34:37 +02:00
ItemStack stack = stand.items.getStackInSlot(0);
if (!stack.isEmpty()) {
usableItems.add(stack);
2018-10-16 11:49:30 +02:00
stands.add(stand);
}
}
});
2018-10-16 11:49:30 +02:00
IBlockState sapling = world.getBlockState(pos);
ItemStack saplingStack = sapling.getBlock().getItem(world, pos, sapling);
if (!saplingStack.isEmpty()) {
for (TreeRitualRecipe recipe : TreeRitualRecipe.RECIPES) {
if (recipe.matchesItems(saplingStack, usableItems)) {
2018-10-16 18:07:03 +02:00
Map<BlockPos, ItemStack> actuallyInvolved = new HashMap<>();
2018-10-16 11:49:30 +02:00
List<ItemStack> stillRequired = new ArrayList<>(Arrays.asList(recipe.items));
TileEntityWoodStand toPick = null;
for (TileEntityWoodStand stand : stands) {
2018-10-18 13:34:37 +02:00
ItemStack stack = stand.items.getStackInSlot(0);
int index = Helper.getItemIndex(stillRequired, stack);
2018-10-16 11:49:30 +02:00
if (index >= 0) {
2018-10-18 13:34:37 +02:00
actuallyInvolved.put(stand.getPos(), stack);
2018-10-16 11:49:30 +02:00
stillRequired.remove(index);
if (toPick == null) {
toPick = stand;
}
}
}
2018-10-16 17:48:36 +02:00
if (stillRequired.isEmpty()) {
2018-10-16 18:07:03 +02:00
toPick.setRitual(pos, recipe.result, recipe.time, actuallyInvolved);
2018-10-16 17:48:36 +02:00
break;
}
2018-10-16 11:49:30 +02:00
}
}
}
}
}
}
}