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 int dungeonWeight = 1; public Map structureMap = new HashMap(); public Map> doorMap = new HashMap>(); //Map of doors. The EnumFacing indicates what way this door faces. public List descriptorList = new ArrayList(); public DungeonRoom(Map structureMap, Map> doorMap, List descriptorList) { this.structureMap = structureMap; this.doorMap = doorMap; this.descriptorList = descriptorList; } public List getAreaDescriptors(PlacementSettings settings, BlockPos offset) { List newList = new ArrayList(); for (AreaDescriptor desc : descriptorList) { newList.add(desc.rotateDescriptor(settings).offset(offset)); } return newList; } public List getDoorOffsetsForFacing(PlacementSettings settings, EnumFacing facing, BlockPos offset) { List offsetList = new ArrayList(); EnumFacing originalFacing = DungeonUtil.reverseRotate(settings.getMirror(), settings.getRotation(), facing); if (doorMap.containsKey(originalFacing)) { List 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 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; } }