1
0
mirror of https://github.com/turbodiesel4598/NuclearCraft synced 2025-12-26 15:14:41 +01:00

Compare commits

...

4 Commits

Author SHA1 Message Date
Tom Dodd
7a52b97a70
Version 2.18y 2020-10-07 20:16:16 +01:00
Tom Dodd
9bc670903a
Version 2.18y 2020-10-07 20:10:56 +01:00
Tom Dodd
be010842f1
Version 2.18y 2020-10-07 20:09:28 +01:00
Tom Dodd
161a2ee6de
Version 2.18y 2020-10-07 20:09:23 +01:00
4 changed files with 59 additions and 165 deletions

View File

@ -1,3 +1,8 @@
v2.18y
+ Added config to disable world radiation block checking
- Removed block mutation config - recipes are now only added via CraftTweaker
v2.18x
+ Added config to disable IC2 EU support
@ -5,7 +10,6 @@ v2.18x
v2.18w
+ Added config to give players total radiation immunity
* Fixed radiation immunity not being applied when radiation death persistence is disabled
v2.18v
@ -16,7 +20,7 @@ v2.18v
v2.18u
* Removed fluid auto-pushing from machine interfaces as connected machines would not update properly
- Removed fluid auto-pushing from machine interfaces as connected machines would not update properly
v2.18t
@ -388,7 +392,7 @@ v2.15
* Fixed strange flickering of fluids in GUIs when looking between two machines of the same type
* Removed machine parts from NC dungeon loot
- Removed machine parts from NC dungeon loot
* Replaced 3DO Hyperspace theme with (much better) remix of original PC version
* Fixed various misuses of String logic causing bugs in stricter JVMs [thanks to domi1819!]

View File

@ -63,6 +63,7 @@ public class NCConfig {
public static double[] energy_upgrade_power_laws;
public static double[] energy_upgrade_multipliers;
public static int rf_per_eu;
public static boolean enable_ic2_eu;
public static boolean enable_gtce_eu;
public static boolean enable_mek_gas;
public static int machine_update_rate;
@ -233,6 +234,8 @@ public class NCConfig {
private static boolean radiation_enabled;
public static boolean radiation_enabled_public;
public static String[] radiation_immune_players;
public static int radiation_world_chunks_per_tick;
public static int radiation_player_tick_rate;
@ -262,7 +265,7 @@ public class NCConfig {
public static double radiation_lowest_rate;
public static double radiation_chunk_limit;
public static String[] radiation_block_effects;
public static boolean radiation_check_blocks;
public static double radiation_block_effect_limit;
public static int radiation_block_effect_max_rate;
public static double radiation_rain_mult;
@ -417,6 +420,8 @@ public class NCConfig {
propertyEnergyUpgradeMultipliers.setLanguageKey("gui.config.processors.energy_upgrade_multipliers_fp");
Property propertyRFPerEU = config.get(CATEGORY_PROCESSORS, "rf_per_eu", 16, Lang.localise("gui.config.processors.rf_per_eu.comment"), 1, 2000);
propertyRFPerEU.setLanguageKey("gui.config.processors.rf_per_eu");
Property propertyEnableIC2EU = config.get(CATEGORY_PROCESSORS, "enable_ic2_eu", true, Lang.localise("gui.nc.config.enable_ic2_eu.comment"));
propertyEnableIC2EU.setLanguageKey("gui.nc.config.enable_ic2_eu");
Property propertyEnableGTCEEU = config.get(CATEGORY_PROCESSORS, "enable_gtce_eu", true, Lang.localise("gui.config.processors.enable_gtce_eu.comment"));
propertyEnableGTCEEU.setLanguageKey("gui.config.processors.enable_gtce_eu");
Property propertyEnableMekGas = config.get(CATEGORY_PROCESSORS, "enable_mek_gas", true, Lang.localise("gui.config.processors.enable_mek_gas.comment"));
@ -731,6 +736,9 @@ public class NCConfig {
Property propertyRadiationEnabled = config.get(CATEGORY_RADIATION, "radiation_enabled", true, Lang.localise("gui.config.radiation.radiation_enabled.comment"));
propertyRadiationEnabled.setLanguageKey("gui.config.radiation.radiation_enabled");
Property propertyRadiationImmunePlayers = config.get(CATEGORY_RADIATION, "radiation_immune_players", new String[] {}, Lang.localise("gui.nc.config.radiation_immune_players.comment"));
propertyRadiationImmunePlayers.setLanguageKey("gui.nc.config.radiation_immune_players");
Property propertyRadiationWorldChunksPerTick = config.get(CATEGORY_RADIATION, "radiation_world_chunks_per_tick", 5, Lang.localise("gui.config.radiation.radiation_world_chunks_per_tick.comment"), 1, 400);
propertyRadiationWorldChunksPerTick.setLanguageKey("gui.config.radiation.radiation_world_chunks_per_tick");
Property propertyRadiationPlayerTickRate = config.get(CATEGORY_RADIATION, "radiation_player_tick_rate", 5, Lang.localise("gui.config.radiation.radiation_player_tick_rate.comment"), 1, 400);
@ -785,8 +793,8 @@ public class NCConfig {
Property propertyRadiationChunkLimit = config.get(CATEGORY_RADIATION, "radiation_chunk_limit", -1D, Lang.localise("gui.config.radiation.radiation_chunk_limit.comment"), -1D, Double.MAX_VALUE);
propertyRadiationChunkLimit.setLanguageKey("gui.config.radiation.radiation_chunk_limit");
Property propertyRadiationBlockEffects = config.get(CATEGORY_RADIATION, "radiation_block_effects", new String[] {"nuclearcraft:dry_earth:0_20_materialMapColor@8368696", "nuclearcraft:dry_earth:0_20_materialMapColor@9923917", "minecraft:air:0_10_materialMapColor@31744"}, Lang.localise("gui.config.radiation.radiation_block_effects.comment"));
propertyRadiationBlockEffects.setLanguageKey("gui.config.radiation.radiation_block_effects");
Property propertyRadiationCheckBlocks = config.get(CATEGORY_RADIATION, "radiation_check_blocks", true, Lang.localise("gui.config.radiation.radiation_check_blocks.comment"));
propertyRadiationCheckBlocks.setLanguageKey("gui.config.radiation.radiation_check_blocks");
Property propertyRadiationBlockEffectLimit = config.get(CATEGORY_RADIATION, "radiation_block_effect_limit", 10D, Lang.localise("gui.config.radiation.radiation_block_effect_limit.comment"), 0.000000000000000001D, Double.MAX_VALUE);
propertyRadiationBlockEffectLimit.setLanguageKey("gui.config.radiation.radiation_block_effect_limit");
Property propertyRadiationBlockEffectMaxRate = config.get(CATEGORY_RADIATION, "radiation_block_effect_max_rate", 0, Lang.localise("gui.config.radiation.radiation_block_effect_max_rate.comment"), 0, 15);
@ -963,6 +971,7 @@ public class NCConfig {
propertyOrderProcessors.add(propertyEnergyUpgradePowerLaws.getName());
propertyOrderProcessors.add(propertyEnergyUpgradeMultipliers.getName());
propertyOrderProcessors.add(propertyRFPerEU.getName());
propertyOrderProcessors.add(propertyEnableIC2EU.getName());
propertyOrderProcessors.add(propertyEnableGTCEEU.getName());
propertyOrderProcessors.add(propertyEnableMekGas.getName());
propertyOrderProcessors.add(propertyMachineUpdateRate.getName());
@ -1155,6 +1164,7 @@ public class NCConfig {
List<String> propertyOrderRadiation = new ArrayList<String>();
propertyOrderRadiation.add(propertyRadiationEnabled.getName());
propertyOrderRadiation.add(propertyRadiationImmunePlayers.getName());
propertyOrderRadiation.add(propertyRadiationWorldChunksPerTick.getName());
propertyOrderRadiation.add(propertyRadiationPlayerTickRate.getName());
propertyOrderRadiation.add(propertyRadiationWorlds.getName());
@ -1180,7 +1190,7 @@ public class NCConfig {
propertyOrderRadiation.add(propertyRadiationDecayRate.getName());
propertyOrderRadiation.add(propertyRadiationLowestRate.getName());
propertyOrderRadiation.add(propertyRadiationChunkLimit.getName());
propertyOrderRadiation.add(propertyRadiationBlockEffects.getName());
propertyOrderRadiation.add(propertyRadiationCheckBlocks.getName());
propertyOrderRadiation.add(propertyRadiationBlockEffectLimit.getName());
propertyOrderRadiation.add(propertyRadiationBlockEffectMaxRate.getName());
propertyOrderRadiation.add(propertyRadiationRainMult.getName());
@ -1273,6 +1283,7 @@ public class NCConfig {
energy_upgrade_power_laws = readDoubleArrayFromConfig(propertyEnergyUpgradePowerLaws);
energy_upgrade_multipliers = readDoubleArrayFromConfig(propertyEnergyUpgradeMultipliers);
rf_per_eu = propertyRFPerEU.getInt();
enable_ic2_eu = propertyEnableIC2EU.getBoolean();
enable_gtce_eu = propertyEnableGTCEEU.getBoolean();
enable_mek_gas = propertyEnableMekGas.getBoolean();
machine_update_rate = propertyMachineUpdateRate.getInt();
@ -1443,6 +1454,8 @@ public class NCConfig {
radiation_enabled = propertyRadiationEnabled.getBoolean();
radiation_immune_players = propertyRadiationImmunePlayers.getStringList();
radiation_world_chunks_per_tick = propertyRadiationWorldChunksPerTick.getInt();
radiation_player_tick_rate = propertyRadiationPlayerTickRate.getInt();
@ -1472,7 +1485,7 @@ public class NCConfig {
radiation_lowest_rate = propertyRadiationLowestRate.getDouble();
radiation_chunk_limit = propertyRadiationChunkLimit.getDouble();
radiation_block_effects = propertyRadiationBlockEffects.getStringList();
radiation_check_blocks = propertyRadiationCheckBlocks.getBoolean();
radiation_block_effect_limit = propertyRadiationBlockEffectLimit.getDouble();
radiation_block_effect_max_rate = propertyRadiationBlockEffectMaxRate.getInt();
radiation_rain_mult = propertyRadiationRainMult.getDouble();
@ -1569,6 +1582,7 @@ public class NCConfig {
propertyEnergyUpgradePowerLaws.set(energy_upgrade_power_laws);
propertyEnergyUpgradeMultipliers.set(energy_upgrade_multipliers);
propertyRFPerEU.set(rf_per_eu);
propertyEnableIC2EU.set(enable_ic2_eu);
propertyEnableGTCEEU.set(enable_gtce_eu);
propertyEnableMekGas.set(enable_mek_gas);
propertyMachineUpdateRate.set(machine_update_rate);
@ -1738,6 +1752,8 @@ public class NCConfig {
propertyRadiationEnabled.set(radiation_enabled);
propertyRadiationImmunePlayers.set(radiation_immune_players);
propertyRadiationWorldChunksPerTick.set(radiation_world_chunks_per_tick);
propertyRadiationPlayerTickRate.set(radiation_player_tick_rate);
@ -1767,7 +1783,7 @@ public class NCConfig {
propertyRadiationLowestRate.set(radiation_lowest_rate);
propertyRadiationChunkLimit.set(radiation_chunk_limit);
propertyRadiationBlockEffects.set(radiation_block_effects);
propertyRadiationCheckBlocks.set(radiation_check_blocks);
propertyRadiationBlockEffectLimit.set(radiation_block_effect_limit);
propertyRadiationBlockEffectMaxRate.set(radiation_block_effect_max_rate);
propertyRadiationRainMult.set(radiation_rain_mult);

View File

@ -1,129 +1,21 @@
package nc.radiation;
import java.util.ArrayList;
import java.util.List;
import com.google.common.collect.Lists;
import nc.config.NCConfig;
import nc.recipe.NCRecipes;
import nc.init.NCBlocks;
import nc.recipe.ProcessorRecipeHandler;
import nc.util.RegistryHelper;
import nc.util.StringHelper;
import net.minecraft.block.material.EnumPushReaction;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Blocks;
public class RadBlockEffects extends ProcessorRecipeHandler {
public static final List<MaterialQuery> MATERIAL_QUERIES = new ArrayList<>();
public static boolean hasRecipes = false;
public RadBlockEffects() {
super("rad_block_mutations", 1, 0, 1, 0);
}
@Override
public void addRecipes() {}
public static void init() {
for (String effectInfo : NCConfig.radiation_block_effects) {
int puncPos = effectInfo.lastIndexOf('_');
if (puncPos == -1) continue;
String s = effectInfo.substring(0, puncPos);
int puncPos2 = s.lastIndexOf('_');
if (puncPos2 == -1) continue;
IBlockState result = RegistryHelper.blockStateFromRegistry(s.substring(0, puncPos2));
if (result == null) continue;
effectInfo = effectInfo.substring(puncPos + 1);
MaterialQuery query = new MaterialQuery(result, Double.parseDouble(s.substring(puncPos2 + 1)));
boolean end = false;
while (!end) {
for (int i = 0; i < ARGS.length; i++) {
if (StringHelper.beginsWith(effectInfo, ARGS[i])) {
effectInfo = effectInfo.substring(ARGS[i].length() + 1);
puncPos = effectInfo.indexOf(',');
if (puncPos == -1) {
puncPos = effectInfo.length();
end = true;
}
String value = effectInfo.substring(0, puncPos);
if (i == 0) {
query.isLiquid = new Boolean(Boolean.parseBoolean(value));
}
else if (i == 1) {
query.isSolid = new Boolean(Boolean.parseBoolean(value));
}
else if (i == 2) {
query.blocksLight = new Boolean(Boolean.parseBoolean(value));
}
else if (i == 3) {
query.blocksMovement = new Boolean(Boolean.parseBoolean(value));
}
else if (i == 4) {
query.getCanBurn = new Boolean(Boolean.parseBoolean(value));
}
else if (i == 5) {
query.isReplaceable = new Boolean(Boolean.parseBoolean(value));
}
else if (i == 6) {
query.isOpaque = new Boolean(Boolean.parseBoolean(value));
}
else if (i == 7) {
query.isToolNotRequired = new Boolean(Boolean.parseBoolean(value));
}
else if (i == 8) {
if (value.equalsIgnoreCase("normal")) {
query.getPushReaction = EnumPushReaction.NORMAL;
}
else if (value.equalsIgnoreCase("destroy")) {
query.getPushReaction = EnumPushReaction.DESTROY;
}
else if (value.equalsIgnoreCase("block")) {
query.getPushReaction = EnumPushReaction.BLOCK;
}
else if (value.equalsIgnoreCase("ignore")) {
query.getPushReaction = EnumPushReaction.IGNORE;
}
else if (value.equalsIgnoreCase("pushOnly")) {
query.getPushReaction = EnumPushReaction.PUSH_ONLY;
}
}
else if (i == 9) {
query.materialMapColor = new Integer(Integer.parseInt(value));
}
if (!end) {
effectInfo = effectInfo.substring(puncPos + 1);
}
break;
}
}
}
MATERIAL_QUERIES.add(query);
}
hasRecipes = !NCRecipes.radiation_block_mutations.getRecipeList().isEmpty();
}
private static final String[] ARGS = new String[] {"isLiquid", "isSolid", "blocksLight", "blocksMovement", "getCanBurn", "isReplaceable", "isOpaque", "isToolNotRequired", "getPushReaction", "materialMapColor"};
public static class MaterialQuery {
public final IBlockState result;
public final double threshold;
public Boolean isLiquid = null, isSolid = null, blocksLight = null, blocksMovement = null, getCanBurn = null, isReplaceable = null, isOpaque = null, isToolNotRequired = null;
public EnumPushReaction getPushReaction = null;
public Integer materialMapColor = null;
public MaterialQuery(IBlockState result, double threshold) {
this.result = result;
this.threshold = threshold;
}
public boolean matches(Material target, double radiation) {
return radiation >= threshold && !(isLiquid != null && isLiquid.booleanValue() != target.isLiquid()) && !(isSolid != null && isSolid.booleanValue() != target.isSolid()) && !(blocksLight != null && blocksLight.booleanValue() != target.blocksLight()) && !(blocksMovement != null && blocksMovement.booleanValue() != target.blocksMovement()) && !(getCanBurn != null && getCanBurn.booleanValue() != target.getCanBurn()) && !(isReplaceable != null && isReplaceable.booleanValue() != target.isReplaceable()) && !(isOpaque != null && isOpaque.booleanValue() != target.isOpaque()) && !(isToolNotRequired != null && isToolNotRequired.booleanValue() != target.isToolNotRequired()) && !(getPushReaction != null && getPushReaction != target.getPushReaction()) && !(materialMapColor != null && materialMapColor.intValue() != target.getMaterialMapColor().colorValue);
}
public void addRecipes() {
addRecipe(Lists.newArrayList("dirt", "grass"), NCBlocks.dry_earth, 10D);
addRecipe(Lists.newArrayList("treeLeaves", "vine"), Blocks.AIR, 1D);
addRecipe(Lists.newArrayList("treeSapling", "cropWheat", "cropPotato", "cropCarrot"), Blocks.AIR, 4D);
}
}

View File

@ -19,7 +19,6 @@ import nc.entity.EntityFeralGhoul;
import nc.init.NCSounds;
import nc.network.PacketHandler;
import nc.network.radiation.PlayerRadsUpdatePacket;
import nc.radiation.RadBlockEffects.MaterialQuery;
import nc.recipe.NCRecipes;
import nc.recipe.ProcessorRecipe;
import nc.recipe.RecipeHelper;
@ -30,9 +29,7 @@ import nc.util.DamageSources;
import nc.util.ItemStackHelper;
import nc.util.Lang;
import nc.util.StructureHelper;
import nc.worldgen.biome.NCBiomes;
import net.darkhax.gamestages.GameStageHelper;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.util.RecipeItemHelper;
import net.minecraft.entity.Entity;
@ -89,7 +86,15 @@ public class RadiationHandler {
playerRads.setRadiationImmunityStage(default_rad_immunity ^ GameStageHelper.hasAnyOf(player, rad_immunity_stages));
}
if (!player.isCreative() && playerRads.isFatal()) {
String idString = event.player.getUniqueID().toString();
for (String uuid : NCConfig.radiation_immune_players) {
if (idString.equals(uuid)) {
playerRads.setRadiationImmunityStage(true);
break;
}
}
if (!player.isCreative() && !player.isSpectator() && !playerRads.isImmune() && playerRads.isFatal()) {
player.attackEntityFrom(DamageSources.FATAL_RADS, Float.MAX_VALUE);
}
@ -122,7 +127,7 @@ public class RadiationHandler {
playerRads.setRadiationLevel(radiationLevel);
if (!player.isCreative()) {
if (!player.isCreative() && !player.isSpectator() && !playerRads.isImmune()) {
if (playerRads.isFatal()) {
player.attackEntityFrom(DamageSources.FATAL_RADS, Float.MAX_VALUE);
}
@ -181,7 +186,7 @@ public class RadiationHandler {
PacketHandler.instance.sendTo(new PlayerRadsUpdatePacket(playerRads), player);
if (!player.isCreative() && !playerRads.isImmune()) {
if (!player.isCreative() && !player.isSpectator() && !playerRads.isImmune()) {
RadiationHelper.applyPotionEffects(player, playerRads, RadPotionEffects.PLAYER_RAD_LEVEL_LIST, RadPotionEffects.PLAYER_DEBUFF_LIST);
}
}
@ -218,7 +223,7 @@ public class RadiationHandler {
BiomeProvider biomeProvider = world.getBiomeProvider();
int dimension = world.provider.getDimension();
BlockPos randomOffsetPos = newRandomOffsetPos();
String randomStructure = RadStructures.STRUCTURE_LIST.isEmpty() ? null : RadStructures.STRUCTURE_LIST.get(RAND.nextInt(RadStructures.STRUCTURE_LIST.size()));
String randomStructure = ModCheck.cubicChunksLoaded() || RadStructures.STRUCTURE_LIST.isEmpty() ? null : RadStructures.STRUCTURE_LIST.get(RAND.nextInt(RadStructures.STRUCTURE_LIST.size()));
if (chunkArrSize > 0) for (int i = chunkStart; i < chunkStart + chunksPerTick; i++) {
Chunk chunk = chunkArray[i % chunkArrSize];
@ -304,7 +309,7 @@ public class RadiationHandler {
if (structureRadiation != null) RadiationHelper.addToSourceBuffer(chunkSource, structureRadiation);
}
if (i == chunkStart) {
if (NCConfig.radiation_check_blocks && i == chunkStart) {
int packed = RecipeItemHelper.pack(ItemStackHelper.blockStateToStack(world.getBlockState(randomChunkPos)));
if (RadSources.STACK_MAP.containsKey(packed)) {
RadiationHelper.addToSourceBuffer(chunkSource, RadSources.STACK_MAP.get(packed));
@ -384,12 +389,10 @@ public class RadiationHandler {
if (NCConfig.radiation_block_effect_max_rate > 0 && radiation > NCConfig.radiation_block_effect_limit) {
long count = Math.min(NCConfig.radiation_block_effect_max_rate, 1L + Math.round(Math.log(radiation/NCConfig.radiation_block_effect_limit))), j = count;
while (j > 0) {
j--;
BlockPos randomChunkPos = newRandomPosInChunk(chunk);
IBlockState state = world.getBlockState(randomChunkPos);
Material mat = state.getMaterial();
boolean fromRecipe = false;
if (RadBlockEffects.hasRecipes) {
ItemStack stack = ItemStackHelper.blockStateToStack(state);
if (stack != null && !stack.isEmpty()) {
RecipeInfo<ProcessorRecipe> mutationInfo = NCRecipes.radiation_block_mutations.getRecipeInfoFromInputs(Lists.newArrayList(ItemStackHelper.blockStateToStack(state)), new ArrayList<Tank>());
@ -399,32 +402,11 @@ public class RadiationHandler {
IBlockState result = ItemStackHelper.getBlockStateFromStack(output);
if (result != null) {
world.setBlockState(randomChunkPos, result);
j--;
fromRecipe = true;
}
}
}
}
}
if (!fromRecipe) {
for (MaterialQuery query : RadBlockEffects.MATERIAL_QUERIES) {
if (query.matches(mat, radiation)) {
world.setBlockState(randomChunkPos, query.result);
if (chunk.canSeeSky(randomChunkPos)) {
chunk.getBiomeArray()[(randomChunkPos.getZ() & 15) << 4 | randomChunkPos.getX() & 15] = (byte)Biome.getIdForBiome(NCBiomes.NUCLEAR_WASTELAND);
j--;
}
j--;
break;
}
}
}
if (RAND.nextInt(NCConfig.radiation_block_effect_max_rate) >= count) {
j--;
}
}
}
}