mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-10-31 09:33:43 +01:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			fix/add-mi
			...
			fix/v6/sch
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 918c5a2470 | ||
|   | e922db9f32 | 
| @@ -81,6 +81,9 @@ public class HybridPlotWorld extends ClassicPlotWorld { | |||||||
|     public short PATH_WIDTH_UPPER; |     public short PATH_WIDTH_UPPER; | ||||||
|     public HashMap<Integer, BaseBlock[]> G_SCH; |     public HashMap<Integer, BaseBlock[]> G_SCH; | ||||||
|     public HashMap<Integer, BiomeType> G_SCH_B; |     public HashMap<Integer, BiomeType> G_SCH_B; | ||||||
|  |     /** | ||||||
|  |      * The Y level at which schematic generation will start, lowest of either road or plot schematic generation. | ||||||
|  |      */ | ||||||
|     public int SCHEM_Y; |     public int SCHEM_Y; | ||||||
|     private Location SIGN_LOCATION; |     private Location SIGN_LOCATION; | ||||||
|     private File root = null; |     private File root = null; | ||||||
| @@ -273,33 +276,57 @@ public class HybridPlotWorld extends ClassicPlotWorld { | |||||||
|         int oddshift = (this.ROAD_WIDTH & 1); |         int oddshift = (this.ROAD_WIDTH & 1); | ||||||
|  |  | ||||||
|         SCHEM_Y = schematicStartHeight(); |         SCHEM_Y = schematicStartHeight(); | ||||||
|  |  | ||||||
|  |         // plotY and roadY are important to allow plot and/or road schematic "overflow" into each other without causing AIOOB | ||||||
|  |         //  exceptions when attempting either to set blocks to, or get block from G_SCH | ||||||
|  |         // Default plot schematic start height, normalized to the minimum height schematics are pasted from. | ||||||
|         int plotY = PLOT_HEIGHT - SCHEM_Y; |         int plotY = PLOT_HEIGHT - SCHEM_Y; | ||||||
|         int minRoadWall = Settings.Schematics.USE_WALL_IN_ROAD_SCHEM_HEIGHT ? Math.min(ROAD_HEIGHT, WALL_HEIGHT) : ROAD_HEIGHT; |         int minRoadWall = Settings.Schematics.USE_WALL_IN_ROAD_SCHEM_HEIGHT ? Math.min(ROAD_HEIGHT, WALL_HEIGHT) : ROAD_HEIGHT; | ||||||
|  |         // Default road schematic start height, normalized to the minimum height schematics are pasted from. | ||||||
|         int roadY = minRoadWall - SCHEM_Y; |         int roadY = minRoadWall - SCHEM_Y; | ||||||
|  |  | ||||||
|         int worldHeight = getMaxGenHeight() - getMinGenHeight() + 1; |         int worldGenHeight = getMaxGenHeight() - getMinGenHeight() + 1; | ||||||
|  |  | ||||||
|  |         int maxSchematicHeight = 0; | ||||||
|  |  | ||||||
|         // SCHEM_Y should be normalised to the plot "start" height |         // SCHEM_Y should be normalised to the plot "start" height | ||||||
|         if (schematic3 != null) { |         if (schematic3 != null) { | ||||||
|             if (schematic3.getClipboard().getDimensions().getY() == worldHeight) { |             if ((maxSchematicHeight = schematic3.getClipboard().getDimensions().getY()) == worldGenHeight) { | ||||||
|                 SCHEM_Y = plotY = 0; |                 SCHEM_Y = getMinGenHeight(); | ||||||
|  |                 plotY = 0; | ||||||
|             } else if (!Settings.Schematics.PASTE_ON_TOP) { |             } else if (!Settings.Schematics.PASTE_ON_TOP) { | ||||||
|                 SCHEM_Y = plotY = getMinBuildHeight() - getMinGenHeight(); |                 SCHEM_Y = getMinBuildHeight(); | ||||||
|  |                 plotY = 0; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (schematic1 != null) { |         if (schematic1 != null) { | ||||||
|             if (schematic1.getClipboard().getDimensions().getY() == worldHeight) { |             if ((maxSchematicHeight = Math.max( | ||||||
|                 SCHEM_Y = roadY = getMinGenHeight(); |                     schematic1.getClipboard().getDimensions().getY(), | ||||||
|                 if (schematic3 != null && schematic3.getClipboard().getDimensions().getY() != worldHeight |                     maxSchematicHeight | ||||||
|                         && !Settings.Schematics.PASTE_ON_TOP) { |             )) == worldGenHeight) { | ||||||
|                     plotY = PLOT_HEIGHT; |                 SCHEM_Y = getMinGenHeight(); | ||||||
|  |                 roadY = 0; // Road is the lowest schematic | ||||||
|  |                 if (schematic3 != null && schematic3.getClipboard().getDimensions().getY() != worldGenHeight) { | ||||||
|  |                     // Road is the lowest schematic. Normalize plotY to it. | ||||||
|  |                     if (Settings.Schematics.PASTE_ON_TOP) { | ||||||
|  |                         plotY = PLOT_HEIGHT - getMinGenHeight(); | ||||||
|  |                     } else { | ||||||
|  |                         plotY = getMinBuildHeight() - getMinGenHeight(); | ||||||
|  |                     } | ||||||
|                 } |                 } | ||||||
|             } else if (!Settings.Schematics.PASTE_ROAD_ON_TOP) { |             } else if (!Settings.Schematics.PASTE_ROAD_ON_TOP) { | ||||||
|                 SCHEM_Y = roadY = getMinBuildHeight(); |                 if (SCHEM_Y == getMinGenHeight()) { // Only possible if plot schematic is enabled | ||||||
|                 if (schematic3 != null && schematic3.getClipboard().getDimensions().getY() != worldHeight |                     // Plot is still the lowest schematic, normalize roadY to it | ||||||
|                         && !Settings.Schematics.PASTE_ON_TOP) { |                     roadY = getMinBuildHeight() - getMinGenHeight(); | ||||||
|                     plotY = PLOT_HEIGHT; |                 } else if (schematic3 != null) { | ||||||
|  |                     SCHEM_Y = getMinBuildHeight(); | ||||||
|  |                     roadY = 0;// Road is the lowest schematic | ||||||
|  |                     if (Settings.Schematics.PASTE_ON_TOP) { | ||||||
|  |                         // Road is the lowest schematic. Normalize plotY to it. | ||||||
|  |                         plotY = PLOT_HEIGHT - getMinBuildHeight(); | ||||||
|  |                     } | ||||||
|  |                     // If plot schematic is not paste-on-top, it will be from min build height thus plotY = 0 as well already. | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -337,17 +364,15 @@ public class HybridPlotWorld extends ClassicPlotWorld { | |||||||
|                                 y + min.getBlockY(), |                                 y + min.getBlockY(), | ||||||
|                                 z + min.getBlockZ() |                                 z + min.getBlockZ() | ||||||
|                         )); |                         )); | ||||||
|                         if (!id.getBlockType().getMaterial().isAir()) { |                         schem3PopulationNeeded |= id.hasNbtData(); | ||||||
|                             schem3PopulationNeeded |= id.hasNbtData(); |                         addOverlayBlock( | ||||||
|                             addOverlayBlock( |                                 (short) (x + shift + oddshift + centerShiftX), | ||||||
|                                     (short) (x + shift + oddshift + centerShiftX), |                                 (short) (y + plotY), | ||||||
|                                     (short) (y + plotY), |                                 (short) (z + shift + oddshift + centerShiftZ), | ||||||
|                                     (short) (z + shift + oddshift + centerShiftZ), |                                 id, | ||||||
|                                     id, |                                 false, | ||||||
|                                     false, |                                 maxSchematicHeight | ||||||
|                                     h3 |                         ); | ||||||
|                             ); |  | ||||||
|                         } |  | ||||||
|                     } |                     } | ||||||
|                     if (blockArrayClipboard3.hasBiomes()) { |                     if (blockArrayClipboard3.hasBiomes()) { | ||||||
|                         BiomeType biome = blockArrayClipboard3.getBiome(BlockVector2.at( |                         BiomeType biome = blockArrayClipboard3.getBiome(BlockVector2.at( | ||||||
| @@ -397,18 +422,23 @@ public class HybridPlotWorld extends ClassicPlotWorld { | |||||||
|                             y + min.getBlockY(), |                             y + min.getBlockY(), | ||||||
|                             z + min.getBlockZ() |                             z + min.getBlockZ() | ||||||
|                     )); |                     )); | ||||||
|                     if (!id.getBlockType().getMaterial().isAir()) { |                     schem1PopulationNeeded |= id.hasNbtData(); | ||||||
|                         schem1PopulationNeeded |= id.hasNbtData(); |                     addOverlayBlock( | ||||||
|                         addOverlayBlock((short) (x - shift), (short) (y + roadY), (short) (z + shift + oddshift), id, false, h1); |                             (short) (x - shift), | ||||||
|                         addOverlayBlock( |                             (short) (y + roadY), | ||||||
|                                 (short) (z + shift + oddshift), |                             (short) (z + shift + oddshift), | ||||||
|                                 (short) (y + roadY), |                             id, | ||||||
|                                 (short) (shift - x + (oddshift - 1)), |                             false, | ||||||
|                                 id, |                             maxSchematicHeight | ||||||
|                                 true, |                     ); | ||||||
|                                 h1 |                     addOverlayBlock( | ||||||
|                         ); |                             (short) (z + shift + oddshift), | ||||||
|                     } |                             (short) (y + roadY), | ||||||
|  |                             (short) (shift - x + (oddshift - 1)), | ||||||
|  |                             id, | ||||||
|  |                             true, | ||||||
|  |                             maxSchematicHeight | ||||||
|  |                     ); | ||||||
|                 } |                 } | ||||||
|                 if (blockArrayClipboard1.hasBiomes()) { |                 if (blockArrayClipboard1.hasBiomes()) { | ||||||
|                     BiomeType biome = blockArrayClipboard1.getBiome(BlockVector2.at(x + min.getBlockX(), z + min.getBlockZ())); |                     BiomeType biome = blockArrayClipboard1.getBiome(BlockVector2.at(x + min.getBlockX(), z + min.getBlockZ())); | ||||||
| @@ -436,10 +466,15 @@ public class HybridPlotWorld extends ClassicPlotWorld { | |||||||
|                             y + min.getBlockY(), |                             y + min.getBlockY(), | ||||||
|                             z + min.getBlockZ() |                             z + min.getBlockZ() | ||||||
|                     )); |                     )); | ||||||
|                     if (!id.getBlockType().getMaterial().isAir()) { |                     schem2PopulationNeeded |= id.hasNbtData(); | ||||||
|                         schem2PopulationNeeded |= id.hasNbtData(); |                     addOverlayBlock( | ||||||
|                         addOverlayBlock((short) (x - shift), (short) (y + roadY), (short) (z - shift), id, false, h2); |                             (short) (x - shift), | ||||||
|                     } |                             (short) (y + roadY), | ||||||
|  |                             (short) (z - shift), | ||||||
|  |                             id, | ||||||
|  |                             false, | ||||||
|  |                             maxSchematicHeight | ||||||
|  |                     ); | ||||||
|                 } |                 } | ||||||
|                 if (blockArrayClipboard2.hasBiomes()) { |                 if (blockArrayClipboard2.hasBiomes()) { | ||||||
|                     BiomeType biome = blockArrayClipboard2.getBiome(BlockVector2.at(x + min.getBlockX(), z + min.getBlockZ())); |                     BiomeType biome = blockArrayClipboard2.getBiome(BlockVector2.at(x + min.getBlockX(), z + min.getBlockZ())); | ||||||
| @@ -449,6 +484,10 @@ public class HybridPlotWorld extends ClassicPlotWorld { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @deprecated This method should not be available for public API usage and will be made private. | ||||||
|  |      */ | ||||||
|  |     @Deprecated(forRemoval = true, since = "TODO") | ||||||
|     public void addOverlayBlock(short x, short y, short z, BaseBlock id, boolean rotate, int height) { |     public void addOverlayBlock(short x, short y, short z, BaseBlock id, boolean rotate, int height) { | ||||||
|         if (z < 0) { |         if (z < 0) { | ||||||
|             z += this.SIZE; |             z += this.SIZE; | ||||||
| @@ -475,6 +514,10 @@ public class HybridPlotWorld extends ClassicPlotWorld { | |||||||
|         existing[y] = id; |         existing[y] = id; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @deprecated This method should not be available for public API usage and will be made private. | ||||||
|  |      */ | ||||||
|  |     @Deprecated(forRemoval = true, since = "TODO") | ||||||
|     public void addOverlayBiome(short x, short z, BiomeType id) { |     public void addOverlayBiome(short x, short z, BiomeType id) { | ||||||
|         if (z < 0) { |         if (z < 0) { | ||||||
|             z += this.SIZE; |             z += this.SIZE; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user