Skip to content

Commit 1edb7d3

Browse files
committed
Lock room upgrades behind a feature flag
1 parent e6be566 commit 1edb7d3

File tree

26 files changed

+372
-102
lines changed

26 files changed

+372
-102
lines changed

core-api/src/main/java/dev/compactmods/machines/api/CompactMachines.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import dev.compactmods.machines.api.room.template.RoomTemplate;
99
import dev.compactmods.machines.api.room.data.IRoomDataAttachmentAccessor;
1010
import dev.compactmods.machines.api.room.history.IPlayerHistoryApi;
11-
import dev.compactmods.machines.api.room.upgrade.RoomUpgradeDefinition;
11+
import dev.compactmods.machines.api.room.upgrade.RoomUpgradeType;
1212
import dev.compactmods.machines.api.util.BlockSpaceUtil;
1313
import net.minecraft.core.Direction;
1414
import net.minecraft.resources.ResourceLocation;
@@ -34,8 +34,8 @@ public static ResourceLocation modRL(String path) {
3434
return ResourceLocation.fromNamespaceAndPath(MOD_ID, path);
3535
}
3636

37-
public static DeferredRegister<RoomUpgradeDefinition<?>> roomUpgradeDR(String namespace) {
38-
return DeferredRegister.create(RoomUpgradeDefinition.REG_KEY, namespace);
37+
public static DeferredRegister<RoomUpgradeType<?>> roomUpgradeDR(String namespace) {
38+
return DeferredRegister.create(RoomUpgradeType.REGISTRY_KEY, namespace);
3939
}
4040

4141
public static IRoomApi roomApi() {
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
package dev.compactmods.machines.api.room.upgrade;
22

33
import dev.compactmods.machines.api.room.upgrade.events.RoomUpgradeEvent;
4+
import net.minecraft.world.flag.FeatureElement;
5+
import net.minecraft.world.item.ItemStack;
46
import net.minecraft.world.item.component.TooltipProvider;
57

68
import java.util.stream.Stream;
79

810
public interface RoomUpgrade extends TooltipProvider {
911

10-
RoomUpgradeDefinition<?> getType();
12+
RoomUpgradeType<?> getType();
1113

12-
default Stream<RoomUpgradeEvent> gatherEvents() {
13-
return Stream.empty();
14-
}
14+
default Stream<RoomUpgradeEvent> gatherEvents() {
15+
return Stream.empty();
16+
}
1517
}

core-api/src/main/java/dev/compactmods/machines/api/room/upgrade/RoomUpgradeCodecs.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010

1111
public interface RoomUpgradeCodecs {
1212
Codec<RoomUpgrade> DISPATCH_CODEC = Codec.lazyInitialized(() -> {
13-
@SuppressWarnings("unchecked") final var reg = (Registry<RoomUpgradeDefinition<?>>) BuiltInRegistries.REGISTRY.get(CompactMachines.modRL("room_upgrades"));
13+
@SuppressWarnings("unchecked") final var reg = (Registry<RoomUpgradeType<?>>) BuiltInRegistries.REGISTRY.get(CompactMachines.modRL("room_upgrades"));
1414

1515
if (reg != null) {
1616
var upgradeRegistry = reg.byNameCodec();
17-
return upgradeRegistry.dispatchStable(RoomUpgrade::getType, RoomUpgradeDefinition::codec);
17+
return upgradeRegistry.dispatchStable(RoomUpgrade::getType, RoomUpgradeType::codec);
1818
}
1919

2020
throw new RuntimeException("Room upgrade registry not registered yet; calling too early?");

core-api/src/main/java/dev/compactmods/machines/api/room/upgrade/RoomUpgradeDefinition.java

Lines changed: 0 additions & 12 deletions
This file was deleted.
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package dev.compactmods.machines.api.room.upgrade;
2+
3+
import com.mojang.serialization.MapCodec;
4+
import dev.compactmods.machines.api.CompactMachines;
5+
import net.minecraft.core.Registry;
6+
import net.minecraft.resources.ResourceKey;
7+
import net.minecraft.world.flag.FeatureElement;
8+
import net.minecraft.world.flag.FeatureFlagSet;
9+
import net.minecraft.world.flag.FeatureFlags;
10+
import net.minecraft.world.item.ItemStack;
11+
12+
import java.util.function.Predicate;
13+
import java.util.function.Supplier;
14+
15+
// TODO: Room Upgrade context (level, itemstack, etc)
16+
public record RoomUpgradeType<T extends RoomUpgrade>(Supplier<T> constructor,
17+
MapCodec<T> codec,
18+
FeatureFlagSet requiredFeatures,
19+
Predicate<ItemStack> itemstackFilter
20+
) implements FeatureElement {
21+
22+
public static final ResourceKey<Registry<RoomUpgradeType<?>>> REGISTRY_KEY = ResourceKey.createRegistryKey(CompactMachines.modRL("room_upgrades"));
23+
24+
public static <T extends RoomUpgrade> Builder<T> builder(Supplier<T> constructor, MapCodec<T> codec) {
25+
return new Builder<>(constructor, codec);
26+
}
27+
28+
public boolean canApplyTo(ItemStack item) {
29+
return itemstackFilter == null || itemstackFilter.test(item);
30+
}
31+
32+
public static class Builder<T extends RoomUpgrade> {
33+
private final Supplier<T> constructor;
34+
private final MapCodec<T> codec;
35+
private FeatureFlagSet requiredFeatures;
36+
private Predicate<ItemStack> itemPredicate;
37+
38+
public Builder(Supplier<T> constructor, MapCodec<T> codec) {
39+
this.constructor = constructor;
40+
this.codec = codec;
41+
this.requiredFeatures = FeatureFlags.DEFAULT_FLAGS;
42+
}
43+
44+
public Builder<T> requiredFeatures(FeatureFlagSet featureFlagSet) {
45+
this.requiredFeatures = featureFlagSet;
46+
return this;
47+
}
48+
49+
public Builder<T> itemPredicate(Predicate<ItemStack> predicate) {
50+
this.itemPredicate = predicate;
51+
return this;
52+
}
53+
54+
public RoomUpgradeType<T> build() {
55+
return new RoomUpgradeType<>(constructor, codec, requiredFeatures, itemPredicate);
56+
}
57+
58+
}
59+
}

core-api/src/main/java/dev/compactmods/machines/api/util/AABBHelper.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,15 @@ public static boolean fitsInside(AABB outer, AABB inner) {
2828
return fitsInside(outer, sizeOf(inner));
2929
}
3030

31+
public static Stream<BlockPos> floorCorners(AABB bounds) {
32+
Stream.Builder<BlockPos> stream = Stream.builder();
33+
stream.add(BlockPos.containing(bounds.maxX - 1, bounds.minY, bounds.maxZ - 1));
34+
stream.add(BlockPos.containing(bounds.minX, bounds.minY, bounds.maxZ - 1));
35+
stream.add(BlockPos.containing(bounds.maxX - 1, bounds.minY, bounds.minZ));
36+
stream.add(BlockPos.containing(bounds.minX, bounds.minY, bounds.minZ));
37+
return stream.build();
38+
}
39+
3140
public static Vec3 minCorner(AABB aabb) {
3241
return new Vec3(aabb.minX, aabb.minY, aabb.minZ);
3342
}

neoforge-datagen/src/main/java/dev.compactmods.machines.datagen/DataGeneration.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@
88
import dev.compactmods.machines.datagen.tags.BlockTagGenerator;
99
import dev.compactmods.machines.datagen.tags.ItemTagGenerator;
1010
import dev.compactmods.machines.datagen.tags.PointOfInterestTagGenerator;
11+
import dev.compactmods.machines.feature.CMFeatureFlags;
12+
import net.minecraft.data.DataGenerator;
1113
import net.minecraft.data.loot.LootTableProvider;
14+
import net.minecraft.data.metadata.PackMetadataGenerator;
15+
import net.minecraft.network.chat.Component;
16+
import net.minecraft.world.flag.FeatureFlagSet;
1217
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets;
1318
import net.neoforged.bus.api.SubscribeEvent;
1419
import net.neoforged.fml.common.EventBusSubscriber;
@@ -28,6 +33,8 @@ public static void gatherData(GatherDataEvent event) {
2833
final var packOut = generator.getPackOutput();
2934
final var holderLookup = event.getLookupProvider();
3035

36+
addExperimentalPacks(event);
37+
3138
// Server
3239
boolean server = event.includeServer();
3340

@@ -57,4 +64,15 @@ public static void gatherData(GatherDataEvent event) {
5764

5865
generator.addProvider(client, new EnglishLangGenerator(generator));
5966
}
67+
68+
private static void addExperimentalPacks(GatherDataEvent event) {
69+
final var generator = event.getGenerator();
70+
71+
DataGenerator.PackGenerator roomUpgrades = generator.getBuiltinDatapack(true, CompactMachines.MOD_ID, "room_upgrades");
72+
roomUpgrades.addProvider(output -> PackMetadataGenerator.forFeaturePack(
73+
output,
74+
Component.literal("Enables the room upgrade experimental features."),
75+
FeatureFlagSet.of(CMFeatureFlags.ROOM_UPDATES_FLAG)
76+
));
77+
}
6078
}

neoforge-datagen/src/main/java/dev.compactmods.machines.datagen/lang/EnglishLangGenerator.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import dev.compactmods.machines.api.room.RoomTranslations;
99
import dev.compactmods.machines.client.keybinds.room.RoomExitKeyMapping;
1010
import dev.compactmods.machines.client.creative.CreativeTabs;
11+
import dev.compactmods.machines.client.keybinds.room.RoomUpgradeUIMapping;
1112
import dev.compactmods.machines.datagen.lang.BaseLangGenerator;
1213
import dev.compactmods.machines.room.Rooms;
1314
import dev.compactmods.machines.shrinking.Shrinking;
@@ -67,6 +68,7 @@ protected void addTranslations() {
6768

6869
add(RoomExitKeyMapping.I18n.CATEGORY, "Compact Machines");
6970
add(RoomExitKeyMapping.I18n.NAME, "Quick-Exit Compact Machine");
71+
add(RoomUpgradeUIMapping.NAME, "Open Room Upgrade Screen");
7072

7173
addJade();
7274
}

neoforge-main/src/main/java/dev/compactmods/machines/CMRegistries.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import dev.compactmods.machines.api.room.template.RoomTemplate;
44
import dev.compactmods.machines.api.CompactMachines;
5-
import dev.compactmods.machines.api.room.upgrade.RoomUpgradeDefinition;
65
import dev.compactmods.machines.shrinking.Shrinking;
76
import net.minecraft.commands.synchronization.ArgumentTypeInfo;
87
import net.minecraft.core.registries.BuiltInRegistries;

neoforge-main/src/main/java/dev/compactmods/machines/CompactMachinesCommon.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import dev.compactmods.machines.api.CompactMachines;
44
import dev.compactmods.machines.command.Commands;
55
import dev.compactmods.machines.compat.InterModCompat;
6+
import dev.compactmods.machines.feature.CMFeaturePacks;
67
import dev.compactmods.machines.server.ServerConfig;
78
import dev.compactmods.machines.dimension.Dimension;
89
import dev.compactmods.machines.dimension.WorldBorderFixer;
@@ -54,6 +55,7 @@ private static void registerEvents(IEventBus modBus) {
5455
RoomUpgrades.registerEvents(modBus);
5556
WorldBorderFixer.registerEvents();
5657

58+
modBus.addListener(CMFeaturePacks::addFeaturePacks);
5759
modBus.addListener(CMNetworks::onPacketRegistration);
5860
modBus.addListener(InterModCompat::enqueueCompatMessages);
5961

0 commit comments

Comments
 (0)