Config things

This commit is contained in:
SD 2021-04-13 21:02:14 +05:30
parent f1f9d40a39
commit be4a63f70c
6 changed files with 51 additions and 25 deletions

View file

@ -25,6 +25,8 @@ import me.sargunvohra.mcmods.autoconfig1u.util.Utils;
import me.shedaniel.clothconfig2.gui.entries.SelectionListEntry; import me.shedaniel.clothconfig2.gui.entries.SelectionListEntry;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import net.minecraft.util.Identifier;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.EnvironmentInterface; import net.fabricmc.api.EnvironmentInterface;
import net.fabricmc.fabric.api.resource.ResourcePackActivationType; import net.fabricmc.fabric.api.resource.ResourcePackActivationType;
@ -126,6 +128,13 @@ public final class ModConfig implements ConfigData {
} }
} }
} }
public boolean isAllowed(Identifier id) {
String idStr = id.toString();
boolean contains = doorList.doors.contains(idStr);
return (doorList.mode == DoorList.Mode.ENABLE) == contains;
}
} }
public static class Pockets { public static class Pockets {

View file

@ -5,6 +5,5 @@ import net.minecraft.util.math.Direction;
public interface RedstoneTarget extends Target { public interface RedstoneTarget extends Target {
boolean addRedstonePower(Direction relativeFacing, int strength); boolean addRedstonePower(Direction relativeFacing, int strength);
void subtractRedstonePower(Direction relativeFacing, int strength); void subtractRedstonePower(Direction relativeFacing, int strength);
} }

View file

@ -93,6 +93,14 @@ public class DimensionalDoorBlock extends DoorBlock implements RiftProvider<Entr
} }
} }
@Override
public void onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player) {
super.onBreak(world, pos, state, player);
if (state.get(HALF) == DoubleBlockHalf.LOWER) {
}
}
@Override @Override
public EntranceRiftBlockEntity getRift(World world, BlockPos pos, BlockState state) { public EntranceRiftBlockEntity getRift(World world, BlockPos pos, BlockState state) {
BlockEntity bottomEntity; BlockEntity bottomEntity;

View file

@ -16,6 +16,9 @@ import net.minecraft.text.MutableText;
import net.minecraft.text.TranslatableText; import net.minecraft.text.TranslatableText;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.Registry;
import org.dimdev.dimdoors.DimensionalDoorsInitializer;
import org.dimdev.dimdoors.block.door.data.DoorData;
import org.dimdev.dimdoors.block.entity.ModBlockEntityTypes; import org.dimdev.dimdoors.block.entity.ModBlockEntityTypes;
import org.dimdev.dimdoors.item.DimensionalDoorItemRegistrar; import org.dimdev.dimdoors.item.DimensionalDoorItemRegistrar;
import org.dimdev.dimdoors.listener.BlockRegistryEntryAddedListener; import org.dimdev.dimdoors.listener.BlockRegistryEntryAddedListener;
@ -45,10 +48,12 @@ public class DimensionalDoorBlockRegistrar {
} }
public void handleEntry(Identifier identifier, Block block) { public void handleEntry(Identifier identifier, Block block) {
if (!(block instanceof DimensionalDoorBlock) && block instanceof DoorBlock) { if (DimensionalDoorsInitializer.getConfig().getDoorsConfig().isAllowed(identifier) && !DoorData.PARENT_BLOCKS.contains(block)) {
register(identifier, block, AutoGenDimensionalDoorBlock::new); if (!(block instanceof DimensionalDoorBlock) && block instanceof DoorBlock) {
} else if (!(block instanceof DimensionalTrapdoorBlock) && block instanceof TrapdoorBlock) { register(identifier, block, AutoGenDimensionalDoorBlock::new);
register(identifier, block, AutoGenDimensionalTrapdoorBlock::new); } else if (!(block instanceof DimensionalTrapdoorBlock) && block instanceof TrapdoorBlock) {
register(identifier, block, AutoGenDimensionalTrapdoorBlock::new);
}
} }
} }

View file

@ -15,7 +15,6 @@ import org.dimdev.dimdoors.block.door.DimensionalDoorBlock;
import org.dimdev.dimdoors.block.entity.EntranceRiftBlockEntity; 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 net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.item.Item; import net.minecraft.item.Item;
@ -28,6 +27,8 @@ import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.fabric.api.util.TriState; import net.fabricmc.fabric.api.util.TriState;
public final class DoorData implements AutoCloseable { public final class DoorData implements AutoCloseable {
public static final List<Block> PARENT_BLOCKS = new ArrayList<>();
public static final List<Item> PARENT_ITEMS = new ArrayList<>();
public static final List<Block> DOORS = new ArrayList<>(); public static final List<Block> DOORS = new ArrayList<>();
private final String id; private final String id;
private final UnbakedItemSettings itemSettings; private final UnbakedItemSettings itemSettings;
@ -90,12 +91,9 @@ public final class DoorData implements AutoCloseable {
throw new UnsupportedOperationException("Already Closed"); throw new UnsupportedOperationException("Already Closed");
} }
Item.Settings itemSettings; Item parentItem = Registry.ITEM.get(new Identifier(this.itemSettings.parent));
if (this.itemSettings.parent.isPresent()) { PARENT_ITEMS.add(parentItem);
itemSettings = ItemExtensions.getSettings(Registry.ITEM.get(new Identifier(this.itemSettings.parent.get()))); Item.Settings itemSettings = ItemExtensions.getSettings(parentItem);
} else {
itemSettings = new Item.Settings().group(ModItems.DIMENSIONAL_DOORS);
}
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);
@ -105,7 +103,9 @@ public final class DoorData implements AutoCloseable {
return false; return false;
}); });
FabricBlockSettings blockSettings = FabricBlockSettings.copyOf(Registry.BLOCK.get(new Identifier(this.blockSettings.parent))); Block parentBlock = Registry.BLOCK.get(new Identifier(this.blockSettings.parent));
PARENT_BLOCKS.add(parentBlock);
FabricBlockSettings blockSettings = FabricBlockSettings.copyOf(parentBlock);
this.blockSettings.luminance.ifPresent(blockSettings::luminance); this.blockSettings.luminance.ifPresent(blockSettings::luminance);
Identifier id = new Identifier(this.id); Identifier id = new Identifier(this.id);
Block doorBlock = new DimensionalDoorBlock(blockSettings); Block doorBlock = new DimensionalDoorBlock(blockSettings);
@ -124,14 +124,14 @@ public final class DoorData implements AutoCloseable {
b.put(rarity.name().toLowerCase(), rarity); b.put(rarity.name().toLowerCase(), rarity);
} }
}).build(); }).build();
private final Optional<String> parent; private final String parent;
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 TriState 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); String parent = Optional.ofNullable(json.get("parent")).map(JsonElement::getAsString).get();
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);
@ -139,7 +139,7 @@ public final class DoorData implements AutoCloseable {
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, TriState fireproof) { public UnbakedItemSettings(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 +148,7 @@ public final class DoorData implements AutoCloseable {
} }
public JsonObject toJson(JsonObject json) { public JsonObject toJson(JsonObject json) {
parent.ifPresent(s -> json.addProperty("parent", s)); json.addProperty("parent", parent);
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()));

View file

@ -15,9 +15,12 @@ import net.minecraft.text.TranslatableText;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.Pair; import net.minecraft.util.Pair;
import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.Registry;
import org.dimdev.dimdoors.DimensionalDoorsInitializer;
import org.dimdev.dimdoors.api.util.function.QuadFunction; import org.dimdev.dimdoors.api.util.function.QuadFunction;
import org.dimdev.dimdoors.block.door.DimensionalDoorBlock; import org.dimdev.dimdoors.block.door.DimensionalDoorBlock;
import org.dimdev.dimdoors.block.door.DimensionalTrapdoorBlock; import org.dimdev.dimdoors.block.door.DimensionalTrapdoorBlock;
import org.dimdev.dimdoors.block.door.data.DoorData;
import org.dimdev.dimdoors.block.entity.EntranceRiftBlockEntity; import org.dimdev.dimdoors.block.entity.EntranceRiftBlockEntity;
import org.dimdev.dimdoors.listener.ItemRegistryEntryAddedListener; import org.dimdev.dimdoors.listener.ItemRegistryEntryAddedListener;
import org.dimdev.dimdoors.rift.targets.PublicPocketTarget; import org.dimdev.dimdoors.rift.targets.PublicPocketTarget;
@ -49,15 +52,17 @@ public class DimensionalDoorItemRegistrar {
} }
public void handleEntry(Identifier identifier, Item item) { public void handleEntry(Identifier identifier, Item item) {
if (item instanceof TallBlockItem) { if (DimensionalDoorsInitializer.getConfig().getDoorsConfig().isAllowed(identifier) && !DoorData.PARENT_ITEMS.contains(item)) {
Block block = ((TallBlockItem) item).getBlock(); if (item instanceof TallBlockItem) {
handleEntry(identifier, item, block, AutoGenDimensionalDoorItem::new); Block block = ((TallBlockItem) item).getBlock();
} else if (item instanceof BlockItem) {
Block block = ((BlockItem) item).getBlock();
if (block instanceof DoorBlock) {
handleEntry(identifier, item, block, AutoGenDimensionalDoorItem::new); handleEntry(identifier, item, block, AutoGenDimensionalDoorItem::new);
} else { } else if (item instanceof BlockItem) {
handleEntry(identifier, item, block, AutoGenDimensionalTrapdoorItem::new); Block block = ((BlockItem) item).getBlock();
if (block instanceof DoorBlock) {
handleEntry(identifier, item, block, AutoGenDimensionalDoorItem::new);
} else {
handleEntry(identifier, item, block, AutoGenDimensionalTrapdoorItem::new);
}
} }
} }
} }