Use TriState instead of OptionalBool

This commit is contained in:
SD 2021-04-12 15:23:28 +05:30
parent 0436f81e6d
commit f1f9d40a39
3 changed files with 20 additions and 89 deletions

View file

@ -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";
}
}

View file

@ -16,7 +16,6 @@ import org.dimdev.dimdoors.block.entity.EntranceRiftBlockEntity;
import org.dimdev.dimdoors.item.DimensionalDoorItem;
import org.dimdev.dimdoors.item.ItemExtensions;
import org.dimdev.dimdoors.item.ModItems;
import org.dimdev.dimdoors.api.util.OptionalBool;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
@ -26,6 +25,7 @@ import net.minecraft.util.Util;
import net.minecraft.util.registry.Registry;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.fabric.api.util.TriState;
public final class DoorData implements AutoCloseable {
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.maxDamage.ifPresent(itemSettings::maxDamageIfAbsent);
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)));
this.blockSettings.luminance.ifPresent(blockSettings::luminance);
@ -124,18 +128,18 @@ public final class DoorData implements AutoCloseable {
private final OptionalInt maxCount;
private final OptionalInt maxDamage;
private final Optional<Rarity> rarity;
private final OptionalBool fireproof;
private final TriState fireproof;
public static UnbakedItemSettings fromJson(JsonObject json) {
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 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);
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);
}
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.maxCount = maxCount;
this.maxDamage = maxDamage;
@ -148,7 +152,10 @@ public final class DoorData implements AutoCloseable {
maxCount.ifPresent(s -> json.addProperty("maxCount", s));
maxDamage.ifPresent(s -> json.addProperty("maxDamage", s));
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;
}
}

View file

@ -17,7 +17,6 @@ import com.google.gson.JsonObject;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
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.InverseCondition;
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.Util;
import net.fabricmc.fabric.api.util.TriState;
public class DoorDataReader {
private static final Gson GSON = new GsonBuilder().setPrettyPrinting().setLenient().create();
private static final Logger LOGGER = LogManager.getLogger();
@ -43,7 +44,7 @@ public class DoorDataReader {
OptionalInt.of(1),
OptionalInt.empty(),
Optional.of(Rarity.UNCOMMON),
OptionalBool.FALSE
TriState.FALSE
),
new DoorData.UnbakedBlockSettings(
"minecraft:iron_door",
@ -57,7 +58,7 @@ public class DoorDataReader {
OptionalInt.of(1),
OptionalInt.empty(),
Optional.of(Rarity.UNCOMMON),
OptionalBool.FALSE
TriState.FALSE
),
new DoorData.UnbakedBlockSettings(
"dimdoors:gold_door",
@ -71,7 +72,7 @@ public class DoorDataReader {
OptionalInt.of(1),
OptionalInt.empty(),
Optional.of(Rarity.UNCOMMON),
OptionalBool.FALSE
TriState.FALSE
),
new DoorData.UnbakedBlockSettings(
"minecraft:oak_door",
@ -85,7 +86,7 @@ public class DoorDataReader {
OptionalInt.of(1),
OptionalInt.empty(),
Optional.of(Rarity.UNCOMMON),
OptionalBool.FALSE
TriState.FALSE
),
new DoorData.UnbakedBlockSettings(
"dimdoors:quartz_door",
@ -103,7 +104,7 @@ public class DoorDataReader {
OptionalInt.of(1),
OptionalInt.empty(),
Optional.of(Rarity.UNCOMMON),
OptionalBool.FALSE
TriState.FALSE
),
new DoorData.UnbakedBlockSettings(
"minecraft:iron_door",