Use TriState instead of OptionalBool
This commit is contained in:
parent
0436f81e6d
commit
f1f9d40a39
3 changed files with 20 additions and 89 deletions
|
@ -1,77 +0,0 @@
|
||||||
package org.dimdev.dimdoors.api.util;
|
|
||||||
|
|
||||||
import java.util.NoSuchElementException;
|
|
||||||
|
|
||||||
import it.unimi.dsi.fastutil.booleans.BooleanConsumer;
|
|
||||||
|
|
||||||
public final class OptionalBool {
|
|
||||||
private static final OptionalBool EMPTY = new OptionalBool();
|
|
||||||
public static final OptionalBool TRUE = new OptionalBool(true);
|
|
||||||
public static final OptionalBool FALSE = new OptionalBool(false);
|
|
||||||
private final boolean present;
|
|
||||||
private final boolean value;
|
|
||||||
|
|
||||||
private OptionalBool() {
|
|
||||||
this.present = false;
|
|
||||||
this.value = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static OptionalBool empty() {
|
|
||||||
return EMPTY;
|
|
||||||
}
|
|
||||||
|
|
||||||
private OptionalBool(boolean value) {
|
|
||||||
this.present = true;
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static OptionalBool of(boolean value) {
|
|
||||||
return value ? TRUE : FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getAsBool() {
|
|
||||||
if (!present) {
|
|
||||||
throw new NoSuchElementException("No value present");
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isPresent() {
|
|
||||||
return present;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ifPresent(BooleanConsumer action) {
|
|
||||||
if (present) {
|
|
||||||
action.accept(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ifPresentAndTrue(Runnable action) {
|
|
||||||
if (present && value) action.run();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object obj) {
|
|
||||||
if (this == obj) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(obj instanceof OptionalBool)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
OptionalBool other = (OptionalBool) obj;
|
|
||||||
return (present && other.present) ? value == other.value : present == other.present;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return present ? Boolean.hashCode(value) : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return present ? String.format("OptionalBool[%s]", value) : "OptionalBool.empty";
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -16,7 +16,6 @@ import org.dimdev.dimdoors.block.entity.EntranceRiftBlockEntity;
|
||||||
import org.dimdev.dimdoors.item.DimensionalDoorItem;
|
import org.dimdev.dimdoors.item.DimensionalDoorItem;
|
||||||
import org.dimdev.dimdoors.item.ItemExtensions;
|
import org.dimdev.dimdoors.item.ItemExtensions;
|
||||||
import org.dimdev.dimdoors.item.ModItems;
|
import org.dimdev.dimdoors.item.ModItems;
|
||||||
import org.dimdev.dimdoors.api.util.OptionalBool;
|
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
|
@ -26,6 +25,7 @@ import net.minecraft.util.Util;
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
|
|
||||||
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
||||||
|
import net.fabricmc.fabric.api.util.TriState;
|
||||||
|
|
||||||
public final class DoorData implements AutoCloseable {
|
public final class DoorData implements AutoCloseable {
|
||||||
public static final List<Block> DOORS = new ArrayList<>();
|
public static final List<Block> DOORS = new ArrayList<>();
|
||||||
|
@ -99,7 +99,11 @@ public final class DoorData implements AutoCloseable {
|
||||||
this.itemSettings.maxCount.ifPresent(itemSettings::maxCount);
|
this.itemSettings.maxCount.ifPresent(itemSettings::maxCount);
|
||||||
this.itemSettings.maxDamage.ifPresent(itemSettings::maxDamageIfAbsent);
|
this.itemSettings.maxDamage.ifPresent(itemSettings::maxDamageIfAbsent);
|
||||||
this.itemSettings.rarity.ifPresent(itemSettings::rarity);
|
this.itemSettings.rarity.ifPresent(itemSettings::rarity);
|
||||||
this.itemSettings.fireproof.ifPresentAndTrue(itemSettings::fireproof);
|
this.itemSettings.fireproof.map(b -> {
|
||||||
|
if (!b) return false;
|
||||||
|
itemSettings.fireproof();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
FabricBlockSettings blockSettings = FabricBlockSettings.copyOf(Registry.BLOCK.get(new Identifier(this.blockSettings.parent)));
|
FabricBlockSettings blockSettings = FabricBlockSettings.copyOf(Registry.BLOCK.get(new Identifier(this.blockSettings.parent)));
|
||||||
this.blockSettings.luminance.ifPresent(blockSettings::luminance);
|
this.blockSettings.luminance.ifPresent(blockSettings::luminance);
|
||||||
|
@ -124,18 +128,18 @@ public final class DoorData implements AutoCloseable {
|
||||||
private final OptionalInt maxCount;
|
private final OptionalInt maxCount;
|
||||||
private final OptionalInt maxDamage;
|
private final OptionalInt maxDamage;
|
||||||
private final Optional<Rarity> rarity;
|
private final Optional<Rarity> rarity;
|
||||||
private final OptionalBool fireproof;
|
private final TriState fireproof;
|
||||||
|
|
||||||
public static UnbakedItemSettings fromJson(JsonObject json) {
|
public static UnbakedItemSettings fromJson(JsonObject json) {
|
||||||
Optional<String> parent = Optional.ofNullable(json.get("parent")).map(JsonElement::getAsString);
|
Optional<String> parent = Optional.ofNullable(json.get("parent")).map(JsonElement::getAsString);
|
||||||
OptionalInt maxCount = Optional.ofNullable(json.get("maxCount")).map(JsonElement::getAsInt).map(OptionalInt::of).orElse(OptionalInt.empty());
|
OptionalInt maxCount = Optional.ofNullable(json.get("maxCount")).map(JsonElement::getAsInt).map(OptionalInt::of).orElse(OptionalInt.empty());
|
||||||
OptionalInt maxDamage = Optional.ofNullable(json.get("maxDamage")).map(JsonElement::getAsInt).map(OptionalInt::of).orElse(OptionalInt.empty());
|
OptionalInt maxDamage = Optional.ofNullable(json.get("maxDamage")).map(JsonElement::getAsInt).map(OptionalInt::of).orElse(OptionalInt.empty());
|
||||||
Optional<Rarity> rarity = Optional.ofNullable(json.get("rarity")).map(JsonElement::getAsString).map(String::toLowerCase).map(RARITIES::get).map(Objects::requireNonNull);
|
Optional<Rarity> rarity = Optional.ofNullable(json.get("rarity")).map(JsonElement::getAsString).map(String::toLowerCase).map(RARITIES::get).map(Objects::requireNonNull);
|
||||||
OptionalBool fireproof = Optional.ofNullable(json.get("fireproof")).map(JsonElement::getAsBoolean).map(OptionalBool::of).orElse(OptionalBool.empty());
|
TriState fireproof = Optional.ofNullable(json.get("fireproof")).map(JsonElement::getAsBoolean).map(TriState::of).orElse(TriState.DEFAULT);
|
||||||
return new UnbakedItemSettings(parent, maxCount, maxDamage, rarity, fireproof);
|
return new UnbakedItemSettings(parent, maxCount, maxDamage, rarity, fireproof);
|
||||||
}
|
}
|
||||||
|
|
||||||
public UnbakedItemSettings(Optional<String> parent, OptionalInt maxCount, OptionalInt maxDamage, Optional<Rarity> rarity, OptionalBool fireproof) {
|
public UnbakedItemSettings(Optional<String> parent, OptionalInt maxCount, OptionalInt maxDamage, Optional<Rarity> rarity, TriState fireproof) {
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
this.maxCount = maxCount;
|
this.maxCount = maxCount;
|
||||||
this.maxDamage = maxDamage;
|
this.maxDamage = maxDamage;
|
||||||
|
@ -148,7 +152,10 @@ public final class DoorData implements AutoCloseable {
|
||||||
maxCount.ifPresent(s -> json.addProperty("maxCount", s));
|
maxCount.ifPresent(s -> json.addProperty("maxCount", s));
|
||||||
maxDamage.ifPresent(s -> json.addProperty("maxDamage", s));
|
maxDamage.ifPresent(s -> json.addProperty("maxDamage", s));
|
||||||
rarity.ifPresent(s -> json.addProperty("rarity", s.name().toLowerCase()));
|
rarity.ifPresent(s -> json.addProperty("rarity", s.name().toLowerCase()));
|
||||||
fireproof.ifPresent(s -> json.addProperty("fireproof", s));
|
fireproof.map(b -> {
|
||||||
|
json.addProperty("fireproof", b);
|
||||||
|
return b;
|
||||||
|
});
|
||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,6 @@ import com.google.gson.JsonObject;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.dimdev.dimdoors.DimensionalDoorsInitializer;
|
import org.dimdev.dimdoors.DimensionalDoorsInitializer;
|
||||||
import org.dimdev.dimdoors.api.util.OptionalBool;
|
|
||||||
import org.dimdev.dimdoors.block.door.data.condition.AlwaysTrueCondition;
|
import org.dimdev.dimdoors.block.door.data.condition.AlwaysTrueCondition;
|
||||||
import org.dimdev.dimdoors.block.door.data.condition.InverseCondition;
|
import org.dimdev.dimdoors.block.door.data.condition.InverseCondition;
|
||||||
import org.dimdev.dimdoors.block.door.data.condition.WorldMatchCondition;
|
import org.dimdev.dimdoors.block.door.data.condition.WorldMatchCondition;
|
||||||
|
@ -33,6 +32,8 @@ import net.minecraft.util.Pair;
|
||||||
import net.minecraft.util.Rarity;
|
import net.minecraft.util.Rarity;
|
||||||
import net.minecraft.util.Util;
|
import net.minecraft.util.Util;
|
||||||
|
|
||||||
|
import net.fabricmc.fabric.api.util.TriState;
|
||||||
|
|
||||||
public class DoorDataReader {
|
public class DoorDataReader {
|
||||||
private static final Gson GSON = new GsonBuilder().setPrettyPrinting().setLenient().create();
|
private static final Gson GSON = new GsonBuilder().setPrettyPrinting().setLenient().create();
|
||||||
private static final Logger LOGGER = LogManager.getLogger();
|
private static final Logger LOGGER = LogManager.getLogger();
|
||||||
|
@ -43,7 +44,7 @@ public class DoorDataReader {
|
||||||
OptionalInt.of(1),
|
OptionalInt.of(1),
|
||||||
OptionalInt.empty(),
|
OptionalInt.empty(),
|
||||||
Optional.of(Rarity.UNCOMMON),
|
Optional.of(Rarity.UNCOMMON),
|
||||||
OptionalBool.FALSE
|
TriState.FALSE
|
||||||
),
|
),
|
||||||
new DoorData.UnbakedBlockSettings(
|
new DoorData.UnbakedBlockSettings(
|
||||||
"minecraft:iron_door",
|
"minecraft:iron_door",
|
||||||
|
@ -57,7 +58,7 @@ public class DoorDataReader {
|
||||||
OptionalInt.of(1),
|
OptionalInt.of(1),
|
||||||
OptionalInt.empty(),
|
OptionalInt.empty(),
|
||||||
Optional.of(Rarity.UNCOMMON),
|
Optional.of(Rarity.UNCOMMON),
|
||||||
OptionalBool.FALSE
|
TriState.FALSE
|
||||||
),
|
),
|
||||||
new DoorData.UnbakedBlockSettings(
|
new DoorData.UnbakedBlockSettings(
|
||||||
"dimdoors:gold_door",
|
"dimdoors:gold_door",
|
||||||
|
@ -71,7 +72,7 @@ public class DoorDataReader {
|
||||||
OptionalInt.of(1),
|
OptionalInt.of(1),
|
||||||
OptionalInt.empty(),
|
OptionalInt.empty(),
|
||||||
Optional.of(Rarity.UNCOMMON),
|
Optional.of(Rarity.UNCOMMON),
|
||||||
OptionalBool.FALSE
|
TriState.FALSE
|
||||||
),
|
),
|
||||||
new DoorData.UnbakedBlockSettings(
|
new DoorData.UnbakedBlockSettings(
|
||||||
"minecraft:oak_door",
|
"minecraft:oak_door",
|
||||||
|
@ -85,7 +86,7 @@ public class DoorDataReader {
|
||||||
OptionalInt.of(1),
|
OptionalInt.of(1),
|
||||||
OptionalInt.empty(),
|
OptionalInt.empty(),
|
||||||
Optional.of(Rarity.UNCOMMON),
|
Optional.of(Rarity.UNCOMMON),
|
||||||
OptionalBool.FALSE
|
TriState.FALSE
|
||||||
),
|
),
|
||||||
new DoorData.UnbakedBlockSettings(
|
new DoorData.UnbakedBlockSettings(
|
||||||
"dimdoors:quartz_door",
|
"dimdoors:quartz_door",
|
||||||
|
@ -103,7 +104,7 @@ public class DoorDataReader {
|
||||||
OptionalInt.of(1),
|
OptionalInt.of(1),
|
||||||
OptionalInt.empty(),
|
OptionalInt.empty(),
|
||||||
Optional.of(Rarity.UNCOMMON),
|
Optional.of(Rarity.UNCOMMON),
|
||||||
OptionalBool.FALSE
|
TriState.FALSE
|
||||||
),
|
),
|
||||||
new DoorData.UnbakedBlockSettings(
|
new DoorData.UnbakedBlockSettings(
|
||||||
"minecraft:iron_door",
|
"minecraft:iron_door",
|
||||||
|
|
Loading…
Reference in a new issue