Added item dictionary

Fixed breathing with IC2 compressed air
This commit is contained in:
LemADEC 2015-09-03 11:29:30 +02:00
parent 5502cd5fa6
commit 91bbc80480
3 changed files with 89 additions and 57 deletions

View file

@ -4,6 +4,7 @@ import cr0s.warpdrive.config.WarpDriveConfig;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.MathHelper; import net.minecraft.util.MathHelper;
public class GravityManager { public class GravityManager {
@ -41,11 +42,15 @@ public class GravityManager {
EntityPlayer player = (EntityPlayer) entity; EntityPlayer player = (EntityPlayer) entity;
if (player.isSneaking()) { if (player.isSneaking()) {
if (player.getCurrentArmor(2) != null && WarpDriveConfig.jetpacks.contains(player.getCurrentArmor(2))) { for (int i = 0; i < 4; i++) {
return SPACE_VOID_GRAVITY_JETPACKSNEAK; ItemStack armor = player.getCurrentArmor(i);
} else { if (armor != null) {
return SPACE_VOID_GRAVITY_RAWSNEAK; if (WarpDriveConfig.ITEMS_FLYINSPACE.contains(armor.getItem())) {
return SPACE_VOID_GRAVITY_JETPACKSNEAK;
}
}
} }
return SPACE_VOID_GRAVITY_RAWSNEAK;
} else { } else {
// FIXME: compensate jetpack // FIXME: compensate jetpack
} }

View file

@ -16,6 +16,7 @@ import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.ParserConfigurationException;
import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.registry.GameData;
import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.GameRegistry;
import cr0s.warpdrive.WarpDrive; import cr0s.warpdrive.WarpDrive;
import cr0s.warpdrive.config.filler.FillerManager; import cr0s.warpdrive.config.filler.FillerManager;
@ -48,7 +49,6 @@ public class WarpDriveConfig {
public static boolean isAdvancedSolarPanelLoaded = false; public static boolean isAdvancedSolarPanelLoaded = false;
public static boolean isAppliedEnergistics2Loaded = false; public static boolean isAppliedEnergistics2Loaded = false;
public static boolean isICBMLoaded = false; public static boolean isICBMLoaded = false;
public static boolean isGraviSuiteLoaded = false;
public static boolean isIndustrialCraft2loaded = false; public static boolean isIndustrialCraft2loaded = false;
public static boolean isComputerCraftLoaded = false; public static boolean isComputerCraftLoaded = false;
public static boolean isOpenComputersLoaded = false; public static boolean isOpenComputersLoaded = false;
@ -69,8 +69,6 @@ public class WarpDriveConfig {
public static int AS_Turbine, AS_deuteriumCell; public static int AS_Turbine, AS_deuteriumCell;
public static int ICBM_Machine, ICBM_Missile, ICBM_Explosive; public static int ICBM_Machine, ICBM_Missile, ICBM_Explosive;
public static ArrayList<Item> spaceHelmets, jetpacks;
// Mod configuration (see loadWarpDriveConfig() for comments/definitions) // Mod configuration (see loadWarpDriveConfig() for comments/definitions)
// General // General
public static int G_SPACE_BIOME_ID = 95; public static int G_SPACE_BIOME_ID = 95;
@ -144,6 +142,7 @@ public class WarpDriveConfig {
// Tagged blocks and entities (loaded from configuration file at PreInit, parsed at PostInit) // Tagged blocks and entities (loaded from configuration file at PreInit, parsed at PostInit)
private static HashMap<String, String> taggedBlocks = null; private static HashMap<String, String> taggedBlocks = null;
private static HashMap<String, String> taggedEntities = null; private static HashMap<String, String> taggedEntities = null;
private static HashMap<String, String> taggedItems = null;
// Blocks dictionary // Blocks dictionary
public static HashSet<Block> BLOCKS_ORES; public static HashSet<Block> BLOCKS_ORES;
@ -162,6 +161,11 @@ public class WarpDriveConfig {
public static HashSet<String> ENTITIES_NOMASS = null; public static HashSet<String> ENTITIES_NOMASS = null;
public static HashSet<String> ENTITIES_LEFTBEHIND = null; public static HashSet<String> ENTITIES_LEFTBEHIND = null;
// Items dictionary
public static HashSet<Item> ITEMS_FLYINSPACE = null;
public static HashSet<Item> ITEMS_NOFALLDAMAGE = null;
public static HashSet<Item> ITEMS_BREATHINGIC2 = null;
// Radar // Radar
public static int RADAR_MAX_ENERGY_STORED = 100000000; // 100kk eU public static int RADAR_MAX_ENERGY_STORED = 100000000; // 100kk eU
public static int RADAR_MAX_ISOLATION_RANGE = 2; public static int RADAR_MAX_ISOLATION_RANGE = 2;
@ -556,6 +560,46 @@ public class WarpDriveConfig {
} }
} }
// Item dictionary
{
config.addCustomCategoryComment("item_tags",
"Use this section to enable special behavior on items using tags.\n"
+ "Most items are already supported automatically. Only modify this section when something doesn't work!\n"
+ "\n"
+ "Tags shall be separated by at least one space, comma or tabulation.\n"
+ "Invalid tags will be ignored silently. Tags and block names are case sensitive.\n"
+ "In case of conflicts, the latest tag overwrite the previous ones.\n"
+ "- FlyInSpace: player can move without gravity effect while wearing this item (default: jetpacks).\n"
+ "- NoFallDamage: player doesn't take fall damage while wearing this armor item (default: IC2 rubber boots).\n"
+ "- BreathingIC2: player can breath IC2 compressed air while wearing this armor item (default: IC2 nano helmet and Cie).\n");
ConfigCategory categoryItemTags = config.getCategory("item_tags");
String[] taggedItemsName = categoryItemTags.getValues().keySet().toArray(new String[0]);
if (taggedItemsName.length == 0) {
config.get("item_tags", "IC2:itemArmorHazmatHelmet" , "BreathingIC2" ).getString();
config.get("item_tags", "IC2:itemSolarHelmet" , "BreathingIC2" ).getString();
config.get("item_tags", "IC2:itemArmorNanoHelmet" , "BreathingIC2" ).getString();
config.get("item_tags", "IC2:itemArmorQuantumHelmet" , "BreathingIC2" ).getString();
config.get("item_tags", "AdvancedSolarPanel:advanced_solar_helmet" , "BreathingIC2" ).getString();
config.get("item_tags", "AdvancedSolarPanel:hybrid_solar_helmet" , "BreathingIC2" ).getString();
config.get("item_tags", "AdvancedSolarPanel:ultimate_solar_helmet" , "BreathingIC2" ).getString();
config.get("item_tags", "IC2:itemArmorJetpack" , "FlyInSpace NoFallDamage" ).getString();
config.get("item_tags", "IC2:itemArmorJetpackElectric" , "FlyInSpace NoFallDamage" ).getString();
config.get("item_tags", "GraviSuite:advJetpack" , "FlyInSpace NoFallDamage" ).getString();
config.get("item_tags", "GraviSuite:advNanoChestPlate" , "FlyInSpace NoFallDamage" ).getString();
config.get("item_tags", "GraviSuite:graviChestPlate" , "FlyInSpace NoFallDamage" ).getString();
config.get("item_tags", "IC2:itemArmorQuantumBoots" , "NoFallDamage" ).getString();
taggedItemsName = categoryItemTags.getValues().keySet().toArray(new String[0]);
}
taggedItems = new HashMap(taggedItemsName.length);
for (String name : taggedItemsName) {
String tags = config.get("item_tags", name, "").getString();
taggedItems.put(name, tags);
}
}
// Radar // Radar
RADAR_MAX_ENERGY_STORED = clamp(0, Integer.MAX_VALUE, RADAR_MAX_ENERGY_STORED = clamp(0, Integer.MAX_VALUE,
config.get("radar", "max_energy_stored", RADAR_MAX_ENERGY_STORED).getInt()); config.get("radar", "max_energy_stored", RADAR_MAX_ENERGY_STORED).getInt());
@ -753,9 +797,6 @@ public class WarpDriveConfig {
} }
public static void onFMLInitialization() { public static void onFMLInitialization() {
spaceHelmets = new ArrayList<Item>();
jetpacks = new ArrayList<Item>();
isForgeMultipartLoaded = Loader.isModLoaded("ForgeMultipart"); isForgeMultipartLoaded = Loader.isModLoaded("ForgeMultipart");
if (isForgeMultipartLoaded) { if (isForgeMultipartLoaded) {
loadForgeMultipart(); loadForgeMultipart();
@ -772,15 +813,6 @@ public class WarpDriveConfig {
} }
isAdvancedSolarPanelLoaded = Loader.isModLoaded("AdvancedSolarPanel"); isAdvancedSolarPanelLoaded = Loader.isModLoaded("AdvancedSolarPanel");
if (isAdvancedSolarPanelLoaded) {
loadASP();
}
isGraviSuiteLoaded = Loader.isModLoaded("GraviSuite");
if (isGraviSuiteLoaded) {
loadGraviSuite();
}
isThermalExpansionLoaded = Loader.isModLoaded("ThermalExpansion"); isThermalExpansionLoaded = Loader.isModLoaded("ThermalExpansion");
isAppliedEnergistics2Loaded = Loader.isModLoaded("appliedenergistics2"); isAppliedEnergistics2Loaded = Loader.isModLoaded("appliedenergistics2");
isOpenComputersLoaded = Loader.isModLoaded("OpenComputers"); isOpenComputersLoaded = Loader.isModLoaded("OpenComputers");
@ -907,6 +939,30 @@ public class WarpDriveConfig {
WarpDrive.logger.info("- " + ENTITIES_ANCHOR.size() + " anchors: " + getHashMessage(ENTITIES_ANCHOR)); WarpDrive.logger.info("- " + ENTITIES_ANCHOR.size() + " anchors: " + getHashMessage(ENTITIES_ANCHOR));
WarpDrive.logger.info("- " + ENTITIES_NOMASS.size() + " with NoMass tag: " + getHashMessage(ENTITIES_NOMASS)); WarpDrive.logger.info("- " + ENTITIES_NOMASS.size() + " with NoMass tag: " + getHashMessage(ENTITIES_NOMASS));
WarpDrive.logger.info("- " + ENTITIES_LEFTBEHIND.size() + " with LeftBehind tag: " + getHashMessage(ENTITIES_LEFTBEHIND)); WarpDrive.logger.info("- " + ENTITIES_LEFTBEHIND.size() + " with LeftBehind tag: " + getHashMessage(ENTITIES_LEFTBEHIND));
// translate tagged items
ITEMS_FLYINSPACE = new HashSet(taggedItems.size());
ITEMS_NOFALLDAMAGE = new HashSet(taggedItems.size());
ITEMS_BREATHINGIC2 = new HashSet(taggedItems.size());
for (Entry<String, String> taggedItem : taggedItems.entrySet()) {
String itemId = taggedItem.getKey();
Item item = GameData.getItemRegistry().getObject(itemId);
if (item != null) {
WarpDrive.logger.info("Ignoring missing item " + itemId);
continue;
}
for (String tag : taggedItem.getValue().replace("\t", " ").replace(",", " ").replace(" ", " ").split(" ")) {
switch (tag) {
case "FlyInSpace" : ITEMS_FLYINSPACE.add(item); break;
case "NoFallDamage" : ITEMS_NOFALLDAMAGE.add(item); break;
case "BreathingIC2" : ITEMS_BREATHINGIC2.add(item); break;
}
}
}
WarpDrive.logger.info("Active items dictionnary:");
WarpDrive.logger.info("- " + ITEMS_FLYINSPACE.size() + " allowing fly in space: " + getHashMessage(ITEMS_FLYINSPACE));
WarpDrive.logger.info("- " + ITEMS_NOFALLDAMAGE.size() + " absorbing fall damages: " + getHashMessage(ITEMS_NOFALLDAMAGE));
WarpDrive.logger.info("- " + ITEMS_BREATHINGIC2.size() + " allowing breathing compressed air: " + getHashMessage(ITEMS_BREATHINGIC2));
} }
private static String getHashMessage(HashSet hashSet) { private static String getHashMessage(HashSet hashSet) {
@ -954,14 +1010,6 @@ public class WarpDriveConfig {
private static void loadIC2() { private static void loadIC2() {
try { try {
spaceHelmets.add(getModItemStack("IC2", "itemArmorHazmatHelmet", -1).getItem());
spaceHelmets.add(getModItemStack("IC2", "itemSolarHelmet", -1).getItem());
spaceHelmets.add(getModItemStack("IC2", "itemArmorNanoHelmet", -1).getItem());
spaceHelmets.add(getModItemStack("IC2", "itemArmorQuantumHelmet", -1).getItem());
jetpacks.add(getModItemStack("IC2", "itemArmorJetpack", -1).getItem());
jetpacks.add(getModItemStack("IC2", "itemArmorJetpackElectric", -1).getItem());
IC2_empty = getModItemStack("IC2", "itemCellEmpty", -1); IC2_empty = getModItemStack("IC2", "itemCellEmpty", -1);
IC2_air = getModItemStack("IC2", "itemCellEmpty", 5); IC2_air = getModItemStack("IC2", "itemCellEmpty", 5);
@ -986,30 +1034,6 @@ public class WarpDriveConfig {
} }
} }
private static void loadASP() {
try {
spaceHelmets.add((Item) Item.itemRegistry.getObject("AdvancedSolarPanel:advanced_solar_helmet"));
spaceHelmets.add((Item) Item.itemRegistry.getObject("AdvancedSolarPanel:hybrid_solar_helmet"));
spaceHelmets.add((Item) Item.itemRegistry.getObject("AdvancedSolarPanel:ultimate_solar_helmet"));
} catch (Exception exception) {
WarpDrive.logger.error("Error loading ASP classes");
exception.printStackTrace();
isAdvancedSolarPanelLoaded = false;
}
}
private static void loadGraviSuite() {
try {
jetpacks.add((Item) Item.itemRegistry.getObject("GraviSuite:advJetpack"));
jetpacks.add((Item) Item.itemRegistry.getObject("GraviSuite:advNanoChestPlate"));
jetpacks.add((Item) Item.itemRegistry.getObject("GraviSuite:graviChestPlate"));
} catch (Exception exception) {
WarpDrive.logger.error("Error loading GS classes");
exception.printStackTrace();
isGraviSuiteLoaded = false;
}
}
public static DocumentBuilder getXmlDocumentBuilder() { public static DocumentBuilder getXmlDocumentBuilder() {
if (xmlDocumentBuilder == null) { if (xmlDocumentBuilder == null) {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

View file

@ -138,10 +138,9 @@ public class LivingHandler {
player_airTank.put(playerName, air - 1); player_airTank.put(playerName, air - 1);
} }
} }
} else if (WarpDriveConfig.spaceHelmets.contains(helmetStack)) { } else if (WarpDriveConfig.ITEMS_BREATHINGIC2.contains(helmet)) {
hasHelmet = true; hasHelmet = true;
if (air == null) {// new player in space => grace if (air == null) {// new player in space => grace period
// period
player_airTank.put(playerName, AIR_TANK_TICKS); player_airTank.put(playerName, AIR_TANK_TICKS);
} else if (air <= 1) { } else if (air <= 1) {
if (consumeO2(player.inventory.mainInventory, player)) { if (consumeO2(player.inventory.mainInventory, player)) {
@ -238,9 +237,13 @@ public class LivingHandler {
int check = MathHelper.ceiling_float_int(distance - 3.0F); int check = MathHelper.ceiling_float_int(distance - 3.0F);
if (check > 0) { if (check > 0) {
if ( (player.getCurrentArmor(0) != null && player.getCurrentArmor(0) == WarpDriveConfig.getModItemStack("IC2", "itemArmorQuantumBoots", -1)) // FIXME cache the value for (int i = 0; i < 4; i++) {
|| (player.getCurrentArmor(2) != null && WarpDriveConfig.jetpacks.contains(player.getCurrentArmor(2)))) { ItemStack armor = player.getCurrentArmor(i);
event.setCanceled(true); // Don't damage player if (armor != null) {
if (WarpDriveConfig.ITEMS_NOFALLDAMAGE.contains(armor.getItem())) {
event.setCanceled(true); // Don't damage player
}
}
} }
} }
} }