/** * Copyright 2014 SMEdit https://github.com/StarMade/SMEdit SMTools * https://github.com/StarMade/SMTools * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. * */ package jo.sm.ui; import java.awt.Color; import java.awt.Graphics; import java.awt.Paint; import java.awt.Rectangle; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import jo.sm.data.BlockTypes; import jo.sm.logic.StarMadeLogic; import jo.sm.logic.utils.IntegerUtils; import jo.sm.logic.utils.ShortUtils; import jo.sm.logic.utils.StringUtils; import jo.sm.logic.utils.XMLUtils; import org.w3c.dom.Document; import org.w3c.dom.Node; public class BlockTypeColors { public static final Paint HULL_RED = Color.red; public static final Map<Short, Color> BLOCK_FILL = new HashMap<>(); static { BLOCK_FILL.put(BlockTypes.SPECIAL_SELECT_XP, new Color(1.0f, 0.0f, 0.0f, 0.5f)); BLOCK_FILL.put(BlockTypes.SPECIAL_SELECT_XM, new Color(0.5f, 0.0f, 0.0f, 0.5f)); BLOCK_FILL.put(BlockTypes.SPECIAL_SELECT_YP, new Color(0.0f, 1.0f, 0.0f, 0.5f)); BLOCK_FILL.put(BlockTypes.SPECIAL_SELECT_YM, new Color(0.0f, 0.5f, 0.0f, 0.5f)); BLOCK_FILL.put(BlockTypes.SPECIAL_SELECT_ZP, new Color(0.0f, 0.0f, 1.0f, 0.5f)); BLOCK_FILL.put(BlockTypes.SPECIAL_SELECT_ZM, new Color(0.0f, 0.0f, 0.5f, 0.5f)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_GREY_ID, new Color(79, 73, 54)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_WEDGE_GREY_ID, new Color(79, 73, 54)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_CORNER_GREY_ID, new Color(79, 73, 54)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_PENTA_GREY_ID, new Color(79, 73, 54)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_TETRA_GREY_ID, new Color(79, 73, 54)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_WHITE_ID, new Color(52, 72, 55)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_WEDGE_WHITE_ID, new Color(52, 72, 55)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_CORNER_WHITE_ID, new Color(52, 72, 55)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_PENTA_WHITE_ID, new Color(52, 72, 55)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_TETRA_WHITE_ID, new Color(52, 72, 55)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_BROWN_ID, new Color(83, 79, 65)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_WEDGE_BROWN_ID, new Color(83, 79, 65)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_CORNER_BROWN_ID, new Color(83, 79, 65)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_PENTA_BROWN_ID, new Color(83, 79, 65)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_TETRA_BROWN_ID, new Color(83, 79, 65)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_RED_ID, new Color(66, 68, 54)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_WEDGE_RED_ID, new Color(66, 68, 54)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_CORNER_RED_ID, new Color(66, 68, 54)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_PENTA_RED_ID, new Color(66, 68, 54)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_TETRA_RED_ID, new Color(66, 68, 54)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_PURPLE_ID, new Color(80, 92, 97)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_WEDGE_PURPLE_ID, new Color(80, 92, 97)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_CORNER_PURPLE_ID, new Color(80, 92, 97)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_PENTA_PURPLE_ID, new Color(80, 92, 97)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_TETRA_PURPLE_ID, new Color(80, 92, 97)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_GREEN_ID, new Color(66, 66, 66)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_WEDGE_GREEN_ID, new Color(66, 66, 66)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_CORNER_GREEN_ID, new Color(66, 66, 66)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_PENTA_GREEN_ID, new Color(66, 66, 66)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_TETRA_GREEN_ID, new Color(66, 66, 66)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_BLACK_ID, new Color(95, 78, 61)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_WEDGE_BLACK_ID, new Color(95, 78, 61)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_CORNER_BLACK_ID, new Color(95, 78, 61)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_PENTA_BLACK_ID, new Color(95, 78, 61)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_TETRA_BLACK_ID, new Color(95, 78, 61)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_YELLOW_ID, new Color(57, 59, 81)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_WEDGE_YELLOW_ID, new Color(57, 59, 81)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_CORNER_YELLOW_ID, new Color(57, 59, 81)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_PENTA_YELLOW_ID, new Color(57, 59, 81)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_TETRA_YELLOW_ID, new Color(57, 59, 81)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_BLUE_ID, new Color(59, 86, 66)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_WEDGE_BLUE_ID, new Color(59, 86, 66)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_CORNER_BLUE_ID, new Color(59, 86, 66)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_PENTA_BLUE_ID, new Color(59, 86, 66)); BLOCK_FILL.put(BlockTypes.HULL_COLOR_TETRA_BLUE_ID, new Color(59, 86, 66)); BLOCK_FILL.put(BlockTypes.GLASS_ID, new Color(162, 169, 170)); BLOCK_FILL.put(BlockTypes.GLASS_WEDGE_ID, new Color(162, 169, 170)); BLOCK_FILL.put(BlockTypes.GLASS_CORNER_ID, new Color(162, 169, 170)); BLOCK_FILL.put(BlockTypes.GLASS_PENTA_ID, new Color(162, 169, 170)); BLOCK_FILL.put(BlockTypes.GLASS_TETRA_ID, new Color(162, 169, 170)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_GREY, new Color(79, 73, 54)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_WEDGE_GREY, new Color(79, 73, 54)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_CORNER_GREY, new Color(79, 73, 54)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_PENTA_GREY, new Color(79, 73, 54)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_TETRA_GREY, new Color(79, 73, 54)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_RED, new Color(66, 68, 54)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_WEDGE_RED, new Color(66, 68, 54)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_CORNER_RED, new Color(66, 68, 54)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_PENTA_RED, new Color(66, 68, 54)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_TETRA_RED, new Color(66, 68, 54)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_PURPLE, new Color(80, 92, 97)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_WEDGE_PURPLE, new Color(80, 92, 97)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_CORNER_PURPLE, new Color(80, 92, 97)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_PENTA_PURPLE, new Color(80, 92, 97)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_TETRA_PURPLE, new Color(80, 92, 97)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_GREEN, new Color(66, 66, 66)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_WEDGE_GREEN, new Color(66, 66, 66)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_CORNER_GREEN, new Color(66, 66, 66)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_PENTA_GREEN, new Color(66, 66, 66)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_TETRA_GREEN, new Color(66, 66, 66)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_BLACK, new Color(95, 78, 61)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_WEDGE_BLACK, new Color(95, 78, 61)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_CORNER_BLACK, new Color(95, 78, 61)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_PENTA_BLACK, new Color(95, 78, 61)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_TETRA_BLACK, new Color(95, 78, 61)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_GOLD, new Color(57, 59, 81)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_WEDGE_GOLD, new Color(57, 59, 81)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_CORNER_GOLD, new Color(57, 59, 81)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_PENTA_GOLD, new Color(57, 59, 81)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_TETRA_GOLD, new Color(57, 59, 81)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_BLUE, new Color(59, 86, 66)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_WEDGE_BLUE, new Color(59, 86, 66)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_CORNER_BLUE, new Color(59, 86, 66)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_PENTA_BLUE, new Color(59, 86, 66)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_TETRA_BLUE, new Color(59, 86, 66)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_WHITE, new Color(60, 69, 73)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_WEDGE_WHITE, new Color(60, 69, 73)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_CORNER_WHITE, new Color(60, 69, 73)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_PENTA_WHITE, new Color(60, 69, 73)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_TETRA_WHITE, new Color(60, 69, 73)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_BROWN, new Color(83, 67, 58)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_WEDGE_BROWN, new Color(83, 67, 58)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_CORNER_BROWN, new Color(83, 67, 58)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_PENTA_BROWN, new Color(83, 67, 58)); BLOCK_FILL.put(BlockTypes.POWERHULL_COLOR_TETRA_BROWN, new Color(83, 67, 58)); BLOCK_FILL.put(BlockTypes.FIXED_DOCK_ID, new Color(204, 204, 192)); BLOCK_FILL.put(BlockTypes.FIXED_DOCK_ID_ENHANCER, new Color(58, 65, 59)); BLOCK_FILL.put(BlockTypes.DOCK_ID, new Color(201, 205, 220)); BLOCK_FILL.put(BlockTypes.DOCKING_ENHANCER_ID, new Color(53, 52, 51)); BLOCK_FILL.put(BlockTypes.LIGHT_BEACON_ID, new Color(161, 172, 163)); BLOCK_FILL.put(BlockTypes.LIGHT_GREEN, new Color(53, 64, 84)); BLOCK_FILL.put(BlockTypes.LIGHT_YELLOW, new Color(61, 62, 75)); BLOCK_FILL.put(BlockTypes.GRAVITY_ID, new Color(56, 56, 56)); BLOCK_FILL.put(BlockTypes.BUILD_BLOCK_ID, new Color(255, 255, 255)); BLOCK_FILL.put(BlockTypes.STASH_ELEMENT, new Color(35, 35, 69)); BLOCK_FILL.put(BlockTypes.DOOR_ELEMENT, new Color(136, 141, 137)); BLOCK_FILL.put(BlockTypes.POWER_ID, new Color(49, 50, 66)); BLOCK_FILL.put(BlockTypes.FACTION_BLOCK, new Color(32, 31, 62)); BLOCK_FILL.put(BlockTypes.FACTION_HUB_BLOCK, new Color(53, 51, 50)); BLOCK_FILL.put(BlockTypes.POWER_HOLDER_ID, new Color(62, 61, 95)); BLOCK_FILL.put(BlockTypes.DECORATIVE_PANEL_1, new Color(53, 51, 50)); BLOCK_FILL.put(BlockTypes.DECORATIVE_PANEL_2, new Color(255, 255, 255)); BLOCK_FILL.put(BlockTypes.DECORATIVE_PANEL_3, new Color(147, 141, 187)); BLOCK_FILL.put(BlockTypes.DECORATIVE_PANEL_4, new Color(139, 161, 133)); BLOCK_FILL.put(BlockTypes.LIGHT_BULB_YELLOW, new Color(144, 5, 70)); BLOCK_FILL.put(BlockTypes.CORE_ID, new Color(255, 255, 255)); BLOCK_FILL.put(BlockTypes.WEAPON_CONTROLLER_ID, new Color(53, 51, 54)); BLOCK_FILL.put(BlockTypes.WEAPON_ID, new Color(192, 177, 139)); BLOCK_FILL.put(BlockTypes.SALVAGE_CONTROLLER_ID, new Color(49, 55, 54)); BLOCK_FILL.put(BlockTypes.SALVAGE_ID, new Color(4, 126, 238)); BLOCK_FILL.put(BlockTypes.REPAIR_CONTROLLER_ID, new Color(67, 66, 66)); BLOCK_FILL.put(BlockTypes.REPAIR_ID, new Color(102, 102, 102)); BLOCK_FILL.put(BlockTypes.MISSILE_DUMB_CONTROLLER_ID, new Color(58, 53, 50)); BLOCK_FILL.put(BlockTypes.MISSILE_DUMB_ID, new Color(53, 53, 55)); BLOCK_FILL.put(BlockTypes.MISSILE_HEAT_CONTROLLER_ID, new Color(60, 51, 58)); BLOCK_FILL.put(BlockTypes.MISSILE_HEAT_ID, new Color(59, 58, 52)); BLOCK_FILL.put(BlockTypes.MISSILE_FAFO_CONTROLLER_ID, new Color(65, 54, 68)); BLOCK_FILL.put(BlockTypes.MISSILE_FAFO_ID, new Color(51, 59, 59)); BLOCK_FILL.put(BlockTypes.EXPLOSIVE_ID, new Color(179, 181, 180)); BLOCK_FILL.put(BlockTypes.CLOAKING_ID, new Color(204, 207, 205)); BLOCK_FILL.put(BlockTypes.RADAR_JAMMING_ID, new Color(59, 59, 67)); BLOCK_FILL.put(BlockTypes.THRUSTER_ID, new Color(57, 70, 104)); BLOCK_FILL.put(BlockTypes.SHIELD_ID, new Color(50, 55, 57)); BLOCK_FILL.put(BlockTypes.COCKPIT_ID, new Color(55, 54, 53)); BLOCK_FILL.put(BlockTypes.AI_ELEMENT, new Color(168, 176, 203)); BLOCK_FILL.put(BlockTypes.POWER_SUPPLY_BEAM_COMPUTER, new Color(169, 214, 192)); BLOCK_FILL.put(BlockTypes.POWER_DRAIN_BEAM_COMPUTER, new Color(38, 38, 38)); BLOCK_FILL.put(BlockTypes.POWER_DRAIN_BEAM_MODULE, new Color(56, 55, 53)); BLOCK_FILL.put(BlockTypes.FACTORY_INPUT_ID, new Color(61, 61, 61)); BLOCK_FILL.put(BlockTypes.FACTORY_INPUT_ENH_ID, new Color(203, 194, 140)); BLOCK_FILL.put(BlockTypes.FACTORY_PARTICLE_PRESS, new Color(57, 70, 104)); BLOCK_FILL.put(BlockTypes.FACTORY_SD1000, new Color(61, 61, 61)); BLOCK_FILL.put(BlockTypes.FACTORY_SD2000, new Color(40, 119, 117)); BLOCK_FILL.put(BlockTypes.FACTORY_SD20000, new Color(203, 194, 140)); BLOCK_FILL.put(BlockTypes.FACTORY_SD30000, new Color(57, 70, 104)); BLOCK_FILL.put(BlockTypes.FACTORY_MINERAL, new Color(61, 61, 61)); BLOCK_FILL.put(BlockTypes.MAN_SD1000_CAP, new Color(44, 64, 40)); BLOCK_FILL.put(BlockTypes.MAN_SD2000_CAP, new Color(33, 62, 51)); BLOCK_FILL.put(BlockTypes.MAN_SD3000_CAP, new Color(66, 66, 66)); BLOCK_FILL.put(BlockTypes.MAN_SD1000_FLUX, new Color(41, 124, 123)); BLOCK_FILL.put(BlockTypes.MAN_SD2000_FLUX, new Color(57, 111, 36)); BLOCK_FILL.put(BlockTypes.MAN_GREEN, new Color(201, 201, 201)); BLOCK_FILL.put(BlockTypes.MAN_YELLOW, new Color(54, 64, 96)); BLOCK_FILL.put(BlockTypes.MAN_RED, new Color(77, 75, 73)); BLOCK_FILL.put(BlockTypes.MAN_BROWN, new Color(150, 7, 74)); BLOCK_FILL.put(BlockTypes.MAN_PURP, new Color(206, 182, 162)); BLOCK_FILL.put(BlockTypes.LANDING_ELEMENT, new Color(85, 64, 70)); BLOCK_FILL.put(BlockTypes.LIFT_ELEMENT, new Color(217, 203, 217)); BLOCK_FILL.put(BlockTypes.RECYCLER_ELEMENT, new Color(38, 38, 38)); BLOCK_FILL.put(BlockTypes.TERRAIN_EXOGEN_ID, new Color(34, 31, 30)); BLOCK_FILL.put(BlockTypes.TERRAIN_M1L2_ID, new Color(32, 31, 62)); BLOCK_FILL.put(BlockTypes.TERRAIN_M1L3_ID, new Color(52, 65, 89)); BLOCK_FILL.put(BlockTypes.TERRAIN_M1L4_ID, new Color(81, 45, 65)); BLOCK_FILL.put(BlockTypes.TERRAIN_M1L5_ID, new Color(86, 63, 41)); BLOCK_FILL.put(BlockTypes.TERRAIN_OCTOGEN_ID, new Color(217, 218, 217)); BLOCK_FILL.put(BlockTypes.TERRAIN_M2L2_ID, new Color(136, 141, 137)); BLOCK_FILL.put(BlockTypes.TERRAIN_M2L3_ID, new Color(176, 143, 120)); BLOCK_FILL.put(BlockTypes.TERRAIN_M2L4_ID, new Color(176, 143, 120)); BLOCK_FILL.put(BlockTypes.TERRAIN_M2L5_ID, new Color(88, 95, 98)); BLOCK_FILL.put(BlockTypes.TERRAIN_QUANTAGEN_ID, new Color(33, 62, 51)); BLOCK_FILL.put(BlockTypes.TERRAIN_M3L2_ID, new Color(68, 88, 69)); BLOCK_FILL.put(BlockTypes.TERRAIN_M3L3_ID, new Color(68, 87, 70)); BLOCK_FILL.put(BlockTypes.TERRAIN_M3L4_ID, new Color(96, 79, 62)); BLOCK_FILL.put(BlockTypes.TERRAIN_M3L5_ID, new Color(72, 71, 68)); BLOCK_FILL.put(BlockTypes.TERRAIN_QUANTANIUM_ID, new Color(57, 70, 104)); BLOCK_FILL.put(BlockTypes.TERRAIN_M4L2_ID, new Color(20, 20, 20)); BLOCK_FILL.put(BlockTypes.TERRAIN_M4L3_ID, new Color(38, 44, 116)); BLOCK_FILL.put(BlockTypes.TERRAIN_M4L4_ID, new Color(167, 69, 22)); BLOCK_FILL.put(BlockTypes.TERRAIN_M4L5_ID, new Color(59, 119, 39)); BLOCK_FILL.put(BlockTypes.TERRAIN_PLEXTANIUM_ID, new Color(61, 61, 61)); BLOCK_FILL.put(BlockTypes.TERRAIN_M5L2_ID, new Color(18, 18, 18)); BLOCK_FILL.put(BlockTypes.TERRAIN_M5L3_ID, new Color(34, 40, 110)); BLOCK_FILL.put(BlockTypes.TERRAIN_M5L4_ID, new Color(144, 5, 70)); BLOCK_FILL.put(BlockTypes.TERRAIN_M5L5_ID, new Color(161, 64, 19)); BLOCK_FILL.put(BlockTypes.TERRAIN_ORANGUTANIUM_ID, new Color(72, 71, 68)); BLOCK_FILL.put(BlockTypes.TERRAIN_M6L2_ID, new Color(92, 105, 89)); BLOCK_FILL.put(BlockTypes.TERRAIN_M6L3_ID, new Color(78, 79, 89)); BLOCK_FILL.put(BlockTypes.TERRAIN_M6L4_ID, new Color(83, 78, 73)); BLOCK_FILL.put(BlockTypes.TERRAIN_M6L5_ID, new Color(247, 247, 247)); BLOCK_FILL.put(BlockTypes.TERRAIN_LAVA_ID, new Color(51, 50, 62)); BLOCK_FILL.put(BlockTypes.TERRAIN_MARS_TOP, new Color(38, 44, 116)); BLOCK_FILL.put(BlockTypes.TERRAIN_CACTUS_ID, new Color(92, 59, 40)); BLOCK_FILL.put(BlockTypes.TERRAIN_PURPLE_ALIEN_TOP, new Color(186, 193, 197)); BLOCK_FILL.put(BlockTypes.TERRAIN_PURPLE_ALIEN_ROCK, new Color(186, 193, 197)); BLOCK_FILL.put(BlockTypes.TERRAIN_GRASS_SPRITE, new Color(56, 51, 52)); BLOCK_FILL.put(BlockTypes.TERRAIN_BROWNWEED_SPRITE, new Color(56, 48, 50)); BLOCK_FILL.put(BlockTypes.TERRAIN_MARSTENTACLES_SPRITE, new Color(58, 48, 50)); BLOCK_FILL.put(BlockTypes.TERRAIN_ALIENVINE_SPRITE, new Color(59, 47, 51)); BLOCK_FILL.put(BlockTypes.TERRAIN_GRASSFLOWERS_SPRITE, new Color(77, 75, 73)); BLOCK_FILL.put(BlockTypes.TERRAIN_LONGWEED_SPRITE, new Color(77, 75, 73)); BLOCK_FILL.put(BlockTypes.TERRAIN_TALLSHROOM_SPRITE, new Color(77, 75, 73)); BLOCK_FILL.put(BlockTypes.TERRAIN_PURSPIRE_SPRITE, new Color(77, 75, 73)); BLOCK_FILL.put(BlockTypes.TERRAIN_TALLGRASSFLOWERS_SPRITE, new Color(160, 172, 174)); BLOCK_FILL.put(BlockTypes.TERRAIN_MINICACTUS_SPRITE, new Color(179, 184, 183)); BLOCK_FILL.put(BlockTypes.TERRAIN_REDSHROOM_SPRITE, new Color(188, 186, 184)); BLOCK_FILL.put(BlockTypes.TERRAIN_PURPTACLES_SPRITE, new Color(165, 166, 178)); BLOCK_FILL.put(BlockTypes.TERRAIN_TALLFLOWERS_SPRITE, new Color(218, 212, 201)); BLOCK_FILL.put(BlockTypes.TERRAIN_ROCK_SPRITE, new Color(167, 160, 141)); BLOCK_FILL.put(BlockTypes.TERRAIN_ALIENFLOWERS_SPRITE, new Color(131, 155, 159)); BLOCK_FILL.put(BlockTypes.TERRAIN_YHOLE_SPRITE, new Color(126, 134, 151)); BLOCK_FILL.put(BlockTypes.TERRAIN_MARS_DIRT, new Color(38, 44, 116)); BLOCK_FILL.put(BlockTypes.TERRAIN_TREE_LEAF_ID, new Color(62, 62, 60)); BLOCK_FILL.put(BlockTypes.TERRAIN_WATER, new Color(158, 141, 139)); BLOCK_FILL.put(BlockTypes.TERRAIN_ICEPLANET_LEAVES, new Color(62, 62, 60)); BLOCK_FILL.put(BlockTypes.TERRAIN_ICEPLANET_SPIKE_SPRITE, new Color(54, 52, 52)); BLOCK_FILL.put(BlockTypes.TERRAIN_ICEPLANET_ICECRAG_SPRITE, new Color(77, 75, 73)); BLOCK_FILL.put(BlockTypes.TERRAIN_ICEPLANET_ICECORAL_SPRITE, new Color(145, 170, 179)); BLOCK_FILL.put(BlockTypes.TERRAIN_ICEPLANET_ICEGRASS_SPRITE, new Color(157, 138, 151)); BLOCK_FILL.put(BlockTypes.TERRAIN_ICEPLANET_CRYSTAL, new Color(131, 168, 149)); BLOCK_FILL.put(BlockTypes.TERRAIN_REDWOOD_LEAVES, new Color(62, 62, 60)); BLOCK_FILL.put(BlockTypes.DEATHSTAR_CORE_ID, new Color(204, 204, 192)); } public static final Map<Short, Color> BLOCK_OUTLINE = new HashMap<>(); static { BLOCK_OUTLINE.put(BlockTypes.WEAPON_CONTROLLER_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.WEAPON_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.CORE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.DEATHSTAR_CORE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.GLASS_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.THRUSTER_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.DOCK_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWER_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.SHIELD_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.EXPLOSIVE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.RADAR_JAMMING_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.CLOAKING_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.SALVAGE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.MISSILE_DUMB_CONTROLLER_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.MISSILE_DUMB_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.MISSILE_HEAT_CONTROLLER_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.MISSILE_HEAT_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.MISSILE_FAFO_CONTROLLER_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.MISSILE_FAFO_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.SALVAGE_CONTROLLER_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.GRAVITY_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.REPAIR_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.REPAIR_CONTROLLER_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.COCKPIT_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.LIGHT_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.LIGHT_BEACON_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_ICE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_GREY_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_PURPLE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_BROWN_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_BLACK_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_RED_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_BLUE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_GREEN_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_YELLOW_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_WHITE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.LANDING_ELEMENT, Color.white); BLOCK_OUTLINE.put(BlockTypes.LIFT_ELEMENT, Color.white); BLOCK_OUTLINE.put(BlockTypes.RECYCLER_ELEMENT, Color.white); BLOCK_OUTLINE.put(BlockTypes.STASH_ELEMENT, Color.white); BLOCK_OUTLINE.put(BlockTypes.AI_ELEMENT, Color.white); BLOCK_OUTLINE.put(BlockTypes.DOOR_ELEMENT, Color.white); BLOCK_OUTLINE.put(BlockTypes.BUILD_BLOCK_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_LAVA_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_EXOGEN_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_OCTOGEN_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_QUANTAGEN_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_QUANTANIUM_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_PLEXTANIUM_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_ORANGUTANIUM_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_SUCCUMITE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_CENOMITE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_AWESOMITE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_VAPPECIDE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_MARS_TOP, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_MARS_ROCK, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_MARS_DIRT, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_MARS_TOP_ROCK, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_EXTRANIUM_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_ROCK_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_SAND_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_EARTH_TOP_DIRT, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_EARTH_TOP_ROCK, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_TREE_TRUNK_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_TREE_LEAF_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_WATER, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_DIRT_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.DOCKING_ENHANCER_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_CACTUS_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_PURPLE_ALIEN_TOP, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_PURPLE_ALIEN_ROCK, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_PURPLE_ALIEN_VINE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_GRASS_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.PLAYER_SPAWN_MODULE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_BROWNWEED_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_MARSTENTACLES_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_ALIENVINE_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_GRASSFLOWERS_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_LONGWEED_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_TALLSHROOM_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_PURSPIRE_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_TALLGRASSFLOWERS_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_MINICACTUS_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_REDSHROOM_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_PURPTACLES_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_TALLFLOWERS_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_ROCK_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_ALIENFLOWERS_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_YHOLE_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M1L2_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M1L3_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M1L4_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M1L5_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M2L2_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M2L3_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M2L4_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M2L5_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M3L2_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M3L3_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M3L4_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M3L5_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M4L2_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M4L3_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M4L4_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M4L5_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M5L2_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M5L3_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M5L4_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M5L5_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M6L2_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M6L3_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M6L4_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M6L5_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M7L2_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M7L3_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M7L4_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M7L5_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M8L2_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M8L3_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M8L4_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M8L5_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M9L2_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M9L3_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M9L4_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M9L5_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M10L2_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M10L3_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M10L4_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M10L5_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M11L2_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M11L3_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M11L4_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M11L5_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M12L2_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M12L3_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M12L4_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M12L5_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M13L2_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M13L3_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M13L4_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M13L5_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M14L2_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M14L3_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M14L4_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M14L5_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M15L2_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M15L3_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M15L4_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M15L5_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M16L2_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M16L3_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M16L4_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_M16L5_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_NEGACIDE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_QUANTACIDE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_NEGAGATE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_METATE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_INSANIUM_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.FACTORY_INPUT_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.FACTORY_INPUT_ENH_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.FACTORY_POWER_CELL_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.FACTORY_POWER_CELL_ENH_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.FACTORY_POWER_COIL_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.FACTORY_POWER_COIL_ENH_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.FACTORY_POWER_BLOCK_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.FACTORY_POWER_BLOCK_ENH_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWER_CELL_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWER_COIL_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.UNUSED_TEST, Color.white); BLOCK_OUTLINE.put(BlockTypes.FACTORY_PARTICLE_PRESS, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_SD1000_CAP, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_SD2000_CAP, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_SD3000_CAP, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_SD1000_FLUX, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_SD2000_FLUX, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_SD3000_FLUX, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_SD1000_MICRO, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_SD2000_MICRO, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_SD3000_MICRO, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_SD1000_DELTA, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_SD2000_DELTA, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_SD3000_DELTA, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_SD1000_MEM, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_SD2000_MEM, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_SD3000_MEM, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_SDPROTON, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_RED, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_PURP, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_BROWN, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_GREEN, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_YELLOW, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_BLACK, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_WHITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_BLUE, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_P1000B, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_P2000B, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_P3000B, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_P10000A, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_P20000A, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_P30000A, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_P40000A, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_YHOLE_NUC, Color.white); BLOCK_OUTLINE.put(BlockTypes.FACTORY_SD10000, Color.white); BLOCK_OUTLINE.put(BlockTypes.FACTORY_SD20000, Color.white); BLOCK_OUTLINE.put(BlockTypes.FACTORY_SD30000, Color.white); BLOCK_OUTLINE.put(BlockTypes.FACTORY_SDADV, Color.white); BLOCK_OUTLINE.put(BlockTypes.FACTORY_SD1000, Color.white); BLOCK_OUTLINE.put(BlockTypes.FACTORY_SD2000, Color.white); BLOCK_OUTLINE.put(BlockTypes.FACTORY_SD3000, Color.white); BLOCK_OUTLINE.put(BlockTypes.FACTORY_MINERAL, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_GREY, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_BLACK, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_RED, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_PURPLE, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_BLUE, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_GREEN, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_BROWN, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_GOLD, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_WHITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_GLASS_BOTTLE, Color.white); BLOCK_OUTLINE.put(BlockTypes.MAN_SCIENCE_BOTTLE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_ICEPLANET_SURFACE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_ICEPLANET_ROCK, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_ICEPLANET_WOOD, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_ICEPLANET_LEAVES, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_ICEPLANET_SPIKE_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_ICEPLANET_ICECRAG_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_ICEPLANET_ICECORAL_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_ICEPLANET_ICEGRASS_SPRITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.LIGHT_RED, Color.white); BLOCK_OUTLINE.put(BlockTypes.LIGHT_BLUE, Color.white); BLOCK_OUTLINE.put(BlockTypes.LIGHT_GREEN, Color.white); BLOCK_OUTLINE.put(BlockTypes.LIGHT_YELLOW, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_ICEPLANET_CRYSTAL, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_REDWOOD, Color.white); BLOCK_OUTLINE.put(BlockTypes.TERRAIN_REDWOOD_LEAVES, Color.white); BLOCK_OUTLINE.put(BlockTypes.FIXED_DOCK_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.FIXED_DOCK_ID_ENHANCER, Color.white); BLOCK_OUTLINE.put(BlockTypes.FACTION_BLOCK, Color.white); BLOCK_OUTLINE.put(BlockTypes.FACTION_HUB_BLOCK, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_WEDGE_GREY_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_WEDGE_PURPLE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_WEDGE_BROWN_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_WEDGE_BLACK_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_WEDGE_RED_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_WEDGE_BLUE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_WEDGE_GREEN_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_WEDGE_YELLOW_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_WEDGE_WHITE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_PENTA_GREY_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_PENTA_PURPLE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_PENTA_BROWN_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_PENTA_BLACK_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_PENTA_RED_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_PENTA_BLUE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_PENTA_GREEN_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_PENTA_YELLOW_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_PENTA_WHITE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_TETRA_GREY_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_TETRA_PURPLE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_TETRA_BROWN_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_TETRA_BLACK_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_TETRA_RED_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_TETRA_BLUE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_TETRA_GREEN_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_TETRA_YELLOW_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_TETRA_WHITE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_CORNER_GREY_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_CORNER_PURPLE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_CORNER_BROWN_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_CORNER_BLACK_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_CORNER_RED_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_CORNER_BLUE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_CORNER_GREEN_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_CORNER_YELLOW_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.HULL_COLOR_CORNER_WHITE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_WEDGE_GREY, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_WEDGE_BLACK, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_WEDGE_RED, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_WEDGE_PURPLE, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_WEDGE_BLUE, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_WEDGE_GREEN, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_WEDGE_BROWN, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_WEDGE_GOLD, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_WEDGE_WHITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_CORNER_GREY, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_CORNER_BLACK, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_CORNER_RED, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_CORNER_PURPLE, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_CORNER_BLUE, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_CORNER_GREEN, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_CORNER_BROWN, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_CORNER_GOLD, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_CORNER_WHITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_PENTA_GREY, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_PENTA_PURPLE, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_PENTA_BROWN, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_PENTA_BLACK, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_PENTA_RED, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_PENTA_BLUE, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_PENTA_GREEN, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_PENTA_GOLD, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_PENTA_WHITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_TETRA_GREY, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_TETRA_PURPLE, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_TETRA_BROWN, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_TETRA_BLACK, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_TETRA_RED, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_TETRA_BLUE, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_TETRA_GREEN, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_TETRA_GOLD, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWERHULL_COLOR_TETRA_WHITE, Color.white); BLOCK_OUTLINE.put(BlockTypes.GLASS_WEDGE_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.GLASS_CORNER_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWER_HOLDER_ID, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWER_DRAIN_BEAM_COMPUTER, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWER_DRAIN_BEAM_MODULE, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWER_SUPPLY_BEAM_COMPUTER, Color.white); BLOCK_OUTLINE.put(BlockTypes.POWER_SUPPLY_BEAM_MODULE, Color.white); BLOCK_OUTLINE.put(BlockTypes.DECORATIVE_PANEL_1, Color.white); BLOCK_OUTLINE.put(BlockTypes.DECORATIVE_PANEL_2, Color.white); BLOCK_OUTLINE.put(BlockTypes.DECORATIVE_PANEL_3, Color.white); BLOCK_OUTLINE.put(BlockTypes.DECORATIVE_PANEL_4, Color.white); BLOCK_OUTLINE.put(BlockTypes.LIGHT_BULB_YELLOW, Color.white); } public static Color getOutlineColor(short blockType) { if (BLOCK_OUTLINE.containsKey(blockType)) { return BLOCK_OUTLINE.get(blockType); } return Color.white; } public static Color getFillColor(short blockType) { if (BLOCK_FILL.containsKey(blockType)) { return BLOCK_FILL.get(blockType); } return Color.gray; } public static final Map<Short, Short> BLOCK_HITPOINTS = new HashMap<>(); public static final Map<Short, Integer> BLOCK_TEXTURE_IDS = new HashMap<>(); private static boolean mBlockIconsLoaded = false; private static final Map<Short, ImageIcon> mBlockIcons = new HashMap<>(); private static final List<BufferedImage> mTextureMaps = new ArrayList<>(); public static int mAllTexturesImagesPerSide; public static int mAllTexturesPixelsPerImage; public static BufferedImage mAllTextures; public static Properties mBlockTypes; private static Properties mProps; public static void loadProps() { File home = new File(System.getProperty("user.home")); File props = new File(home, ".josm"); if (props.exists()) { mProps = new Properties(); try { try (FileInputStream fis = new FileInputStream(props)) { mProps.load(fis); } } catch (IOException e) { } } else { mProps = new Properties(); } } public static ImageIcon getBlockImage(short blockID) { if (blockID >= BlockTypes.SPECIAL) { return getSpecialBlockImage(blockID); } loadBlockIcons(); if (!mBlockIcons.containsKey(blockID)) { if (!BLOCK_TEXTURE_IDS.containsKey(blockID)) { return null; } int textureID = BLOCK_TEXTURE_IDS.get(blockID); BufferedImage localBufferedImage = getTextureImage(textureID); mBlockIcons.put(blockID, new ImageIcon(localBufferedImage)); } return mBlockIcons.get(blockID); } public static BufferedImage getTextureImage(int textureID) { int j = textureID % 256 % 16; int k = textureID % 256 / 16; BufferedImage map = mTextureMaps.get(textureID / 256); int hScale = map.getWidth() / 16; int vScale = map.getHeight() / 16; BufferedImage localBufferedImage = map.getSubimage(j * hScale, k * vScale, hScale, vScale); return localBufferedImage; } public static void loadBlockIcons() { if (mBlockIconsLoaded) { return; } try { loadTextureMaps(); mBlockTypes = new Properties(); File propsFile = new File(StarMadeLogic.getInstance().getBaseDir(), "data/config/BlockTypes.properties"); try (InputStream is = new FileInputStream(propsFile)) { mBlockTypes.load(is); } File xmlFile = new File(StarMadeLogic.getInstance().getBaseDir(), "data/config/BlockConfig.xml"); Document doc = XMLUtils.readFile(xmlFile); for (Node n : XMLUtils.findAllNodesRecursive(doc, "Block")) { String name = XMLUtils.getAttribute(n, "name"); String type = XMLUtils.getAttribute(n, "type"); if (!mBlockTypes.containsKey(type)) { System.err.println("No ID found for '" + type + "', - " + name); continue; } short id = ShortUtils.parseShort(mBlockTypes.get(type)); //int icon = IntegerUtils.parseInt(XMLUtils.getAttribute(n, "icon")); int textureID = IntegerUtils.parseInt(XMLUtils.getAttribute(n, "textureId")); short hitPoints = ShortUtils.parseShort(XMLUtils.getTextTag(n, "Hitpoints")); BlockTypes.BLOCK_NAMES.put(id, name); BLOCK_HITPOINTS.put(id, hitPoints); BLOCK_TEXTURE_IDS.put(id, textureID); try { Field f = BlockTypes.class.getField(type); if (f != null) { f.setShort(null, id); } } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { } } } catch (IOException e) { e.printStackTrace(); } mBlockIconsLoaded = true; } private static void loadTextureMaps() throws IOException { loadProps(); for (int i = 0; i < 256; i++) { File f = new File( /* Change the commented out lines to change the game version to loaf textures */ /* 0.094 and below */ //StarMadeLogic.getInstance().getBaseDir(), "data/textures/block/t" + StringUtils.zeroPrefix(i, 3) + ".png"); /* 0.14 */ StarMadeLogic.getInstance().getBaseDir(), "data/textures/block/" + mProps.getProperty("texture", "") + "/64/t" + StringUtils.zeroPrefix(i, 3) + ".png"); if (!f.exists()) { break; } BufferedImage img = ImageIO.read(f); mTextureMaps.add(img); } int numTextures = 16 * 16 * mTextureMaps.size(); mAllTexturesImagesPerSide = (int) Math.ceil(Math.sqrt(numTextures)); mAllTexturesPixelsPerImage = 1024 / mAllTexturesImagesPerSide; mAllTextures = new BufferedImage(1024, 1024, BufferedImage.TYPE_INT_ARGB); Graphics g = mAllTextures.getGraphics(); for (int i = 0; i < numTextures; i++) { BufferedImage texture = getTextureImage(i); Rectangle r = getAllTextureLocation(i); g.drawImage(texture, r.x, r.y, r.x + r.width, r.y + r.height, 0, 0, texture.getWidth(), texture.getHeight(), null); } } private static Rectangle getAllTextureLocation(int textureID) { int j = textureID % mAllTexturesImagesPerSide; int k = textureID / mAllTexturesImagesPerSide; return new Rectangle(j * mAllTexturesPixelsPerImage, 1024 - k * mAllTexturesPixelsPerImage - mAllTexturesPixelsPerImage, mAllTexturesPixelsPerImage, mAllTexturesPixelsPerImage); } public static Rectangle2D.Float getAllTextureLocation(short blockID) { int textureID = BLOCK_TEXTURE_IDS.get(blockID); int j = textureID % mAllTexturesImagesPerSide; int k = textureID / mAllTexturesImagesPerSide; float effectiveWidth = mAllTexturesImagesPerSide * mAllTexturesPixelsPerImage / 1024f; float chunk = effectiveWidth / mAllTexturesImagesPerSide; Rectangle2D.Float abs = new Rectangle2D.Float(j * chunk, k * chunk, chunk, chunk); return abs; } private static final Map<Short, ImageIcon> SPECIAL_ICONS = new HashMap<>(); private static ImageIcon getSpecialBlockImage(short blockID) { if (SPECIAL_ICONS.containsKey(blockID)) { return SPECIAL_ICONS.get(blockID); } int color = 0; switch (blockID) { case BlockTypes.SPECIAL_SELECT_XP: color = 0x80FF0000; break; case BlockTypes.SPECIAL_SELECT_XM: color = 0x80800000; break; case BlockTypes.SPECIAL_SELECT_YP: color = 0x8000FF00; break; case BlockTypes.SPECIAL_SELECT_YM: color = 0x80008000; break; case BlockTypes.SPECIAL_SELECT_ZP: color = 0x800000FF; break; case BlockTypes.SPECIAL_SELECT_ZM: color = 0x80000080; break; } BufferedImage img = new BufferedImage(64, 64, BufferedImage.TYPE_INT_ARGB); for (int x = 0; x < 64; x++) { for (int y = 0; y < 64; y++) { img.setRGB(x, y, color); } } ImageIcon icon = new ImageIcon(img); SPECIAL_ICONS.put(blockID, icon); return icon; } }