package WayofTime.bloodmagic.structures; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Random; import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.WorldServer; import net.minecraft.world.gen.structure.template.PlacementSettings; import net.minecraft.world.gen.structure.template.Template; import WayofTime.bloodmagic.api.ritual.AreaDescriptor; public class DungeonRoom { public Map<String, BlockPos> structureMap = new HashMap<String, BlockPos>(); public Map<EnumFacing, List<BlockPos>> doorMap = new HashMap<EnumFacing, List<BlockPos>>(); //Map of doors. The EnumFacing indicates what way this door faces. public List<AreaDescriptor.Rectangle> descriptorList = new ArrayList<AreaDescriptor.Rectangle>(); public DungeonRoom(Map<String, BlockPos> structureMap, Map<EnumFacing, List<BlockPos>> doorMap, List<AreaDescriptor.Rectangle> descriptorList) { this.structureMap = structureMap; this.doorMap = doorMap; this.descriptorList = descriptorList; } public List<AreaDescriptor> getAreaDescriptors(PlacementSettings settings, BlockPos offset) { List<AreaDescriptor> newList = new ArrayList<AreaDescriptor>(); for (AreaDescriptor desc : descriptorList) { newList.add(desc.rotateDescriptor(settings).offset(offset)); } return newList; } public List<BlockPos> getDoorOffsetsForFacing(PlacementSettings settings, EnumFacing facing, BlockPos offset) { List<BlockPos> offsetList = new ArrayList<BlockPos>(); EnumFacing originalFacing = DungeonUtil.reverseRotate(settings.getMirror(), settings.getRotation(), facing); if (doorMap.containsKey(originalFacing)) { List<BlockPos> doorList = doorMap.get(originalFacing); for (BlockPos doorPos : doorList) { offsetList.add(Template.transformedBlockPos(settings, doorPos).add(offset)); } } return offsetList; } public boolean placeStructureAtPosition(Random rand, PlacementSettings settings, WorldServer world, BlockPos pos) { for (Entry<String, BlockPos> entry : structureMap.entrySet()) { ResourceLocation location = new ResourceLocation(entry.getKey()); DungeonStructure structure = new DungeonStructure(location); BlockPos offsetPos = Template.transformedBlockPos(settings, entry.getValue()); structure.placeStructureAtPosition(rand, settings, world, pos.add(offsetPos)); } return true; } }