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 org.jetbrains.annotations.NotNull;
import net.minecraft.util.Identifier;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.EnvironmentInterface;
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 {

View file

@ -5,6 +5,5 @@ import net.minecraft.util.math.Direction;
public interface RedstoneTarget extends Target {
boolean addRedstonePower(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
public EntranceRiftBlockEntity getRift(World world, BlockPos pos, BlockState state) {
BlockEntity bottomEntity;

View file

@ -16,6 +16,9 @@ import net.minecraft.text.MutableText;
import net.minecraft.text.TranslatableText;
import net.minecraft.util.Identifier;
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.item.DimensionalDoorItemRegistrar;
import org.dimdev.dimdoors.listener.BlockRegistryEntryAddedListener;
@ -45,10 +48,12 @@ public class DimensionalDoorBlockRegistrar {
}
public void handleEntry(Identifier identifier, Block block) {
if (!(block instanceof DimensionalDoorBlock) && block instanceof DoorBlock) {
register(identifier, block, AutoGenDimensionalDoorBlock::new);
} else if (!(block instanceof DimensionalTrapdoorBlock) && block instanceof TrapdoorBlock) {
register(identifier, block, AutoGenDimensionalTrapdoorBlock::new);
if (DimensionalDoorsInitializer.getConfig().getDoorsConfig().isAllowed(identifier) && !DoorData.PARENT_BLOCKS.contains(block)) {
if (!(block instanceof DimensionalDoorBlock) && block instanceof DoorBlock) {
register(identifier, block, AutoGenDimensionalDoorBlock::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.item.DimensionalDoorItem;
import org.dimdev.dimdoors.item.ItemExtensions;
import org.dimdev.dimdoors.item.ModItems;
import net.minecraft.block.Block;
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;
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<>();
private final String id;
private final UnbakedItemSettings itemSettings;
@ -90,12 +91,9 @@ public final class DoorData implements AutoCloseable {
throw new UnsupportedOperationException("Already Closed");
}
Item.Settings itemSettings;
if (this.itemSettings.parent.isPresent()) {
itemSettings = ItemExtensions.getSettings(Registry.ITEM.get(new Identifier(this.itemSettings.parent.get())));
} else {
itemSettings = new Item.Settings().group(ModItems.DIMENSIONAL_DOORS);
}
Item parentItem = Registry.ITEM.get(new Identifier(this.itemSettings.parent));
PARENT_ITEMS.add(parentItem);
Item.Settings itemSettings = ItemExtensions.getSettings(parentItem);
this.itemSettings.maxCount.ifPresent(itemSettings::maxCount);
this.itemSettings.maxDamage.ifPresent(itemSettings::maxDamageIfAbsent);
this.itemSettings.rarity.ifPresent(itemSettings::rarity);
@ -105,7 +103,9 @@ public final class DoorData implements AutoCloseable {
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);
Identifier id = new Identifier(this.id);
Block doorBlock = new DimensionalDoorBlock(blockSettings);
@ -124,14 +124,14 @@ public final class DoorData implements AutoCloseable {
b.put(rarity.name().toLowerCase(), rarity);
}
}).build();
private final Optional<String> parent;
private final String parent;
private final OptionalInt maxCount;
private final OptionalInt maxDamage;
private final Optional<Rarity> rarity;
private final TriState fireproof;
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 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);
@ -139,7 +139,7 @@ public final class DoorData implements AutoCloseable {
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.maxCount = maxCount;
this.maxDamage = maxDamage;
@ -148,7 +148,7 @@ public final class DoorData implements AutoCloseable {
}
public JsonObject toJson(JsonObject json) {
parent.ifPresent(s -> json.addProperty("parent", s));
json.addProperty("parent", parent);
maxCount.ifPresent(s -> json.addProperty("maxCount", s));
maxDamage.ifPresent(s -> json.addProperty("maxDamage", s));
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.Pair;
import net.minecraft.util.registry.Registry;
import org.dimdev.dimdoors.DimensionalDoorsInitializer;
import org.dimdev.dimdoors.api.util.function.QuadFunction;
import org.dimdev.dimdoors.block.door.DimensionalDoorBlock;
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.listener.ItemRegistryEntryAddedListener;
import org.dimdev.dimdoors.rift.targets.PublicPocketTarget;
@ -49,15 +52,17 @@ public class DimensionalDoorItemRegistrar {
}
public void handleEntry(Identifier identifier, Item item) {
if (item instanceof TallBlockItem) {
Block block = ((TallBlockItem) item).getBlock();
handleEntry(identifier, item, block, AutoGenDimensionalDoorItem::new);
} else if (item instanceof BlockItem) {
Block block = ((BlockItem) item).getBlock();
if (block instanceof DoorBlock) {
if (DimensionalDoorsInitializer.getConfig().getDoorsConfig().isAllowed(identifier) && !DoorData.PARENT_ITEMS.contains(item)) {
if (item instanceof TallBlockItem) {
Block block = ((TallBlockItem) item).getBlock();
handleEntry(identifier, item, block, AutoGenDimensionalDoorItem::new);
} else {
handleEntry(identifier, item, block, AutoGenDimensionalTrapdoorItem::new);
} else if (item instanceof BlockItem) {
Block block = ((BlockItem) item).getBlock();
if (block instanceof DoorBlock) {
handleEntry(identifier, item, block, AutoGenDimensionalDoorItem::new);
} else {
handleEntry(identifier, item, block, AutoGenDimensionalTrapdoorItem::new);
}
}
}
}