Skip to content

Commit 198efe6

Browse files
committed
Add in more support for Curios again
Closes #603
1 parent 451c707 commit 198efe6

File tree

10 files changed

+148
-83
lines changed

10 files changed

+148
-83
lines changed

gradle/libs.versions.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,7 @@ parchment = "2024.07.28"
66
[libraries.jnanoid]
77
module = "com.aventrix.jnanoid:jnanoid"
88
version.ref = "jnanoid"
9+
10+
[libraries.curios]
11+
module = "top.theillusivec4.curios:curios-neoforge"
12+
version = "9.2.2+1.21.1"

neoforge-datagen/build.gradle.kts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,20 @@ repositories {
5555
password = project.findProperty("gpr.token") as String? ?: System.getenv("GITHUB_TOKEN")
5656
}
5757
}
58+
59+
maven("https://maven.theillusivec4.top/") {
60+
name = "Illusive Soulworks maven (Curios API)"
61+
content {
62+
includeGroup("top.theillusivec4.curios")
63+
}
64+
}
5865
}
5966

6067
dependencies {
6168
compileOnly(coreApi)
6269
compileOnly(mainProject)
70+
71+
implementation(libs.curios)
6372
}
6473

6574
tasks.compileJava {

neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/base/BaseDatapack.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package dev.compactmods.machines.datagen.base;
22

3-
import dev.compactmods.machines.datagen.base.curios.CurioEntityGenerator;
4-
import dev.compactmods.machines.datagen.base.curios.CurioSlotGenerator;
3+
import dev.compactmods.machines.datagen.base.compat.PSDCuriosProvider;
54
import dev.compactmods.machines.datagen.base.lang.EnglishLangGenerator;
65
import dev.compactmods.machines.datagen.base.loot.BlockLootGenerator;
76
import dev.compactmods.machines.datagen.base.tags.BlockTagGenerator;
@@ -46,8 +45,7 @@ public static BaseDatapackGenerationResults generatePack(GatherDataEvent event)
4645
generator.addProvider(server, new ItemTagGenerator(basePackOutput, blocks, holderLookup));
4746

4847
// CURIOS Integration
49-
generator.addProvider(server, new CurioSlotGenerator(basePackOutput, holderLookup, fileHelper));
50-
generator.addProvider(server, new CurioEntityGenerator(basePackOutput, holderLookup, fileHelper));
48+
generator.addProvider(server, new PSDCuriosProvider(basePackOutput, holderLookup, fileHelper));
5149

5250
generator.addProvider(server, new PointOfInterestTagGenerator(basePackOutput, holderLookup, fileHelper));
5351

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package dev.compactmods.machines.datagen.base.compat;
2+
3+
import dev.compactmods.machines.api.CompactMachines;
4+
import dev.compactmods.machines.compat.curios.CuriosCompat;
5+
import net.minecraft.core.HolderLookup;
6+
import net.minecraft.data.PackOutput;
7+
import net.neoforged.neoforge.common.data.ExistingFileHelper;
8+
import top.theillusivec4.curios.api.CuriosDataProvider;
9+
10+
import java.util.concurrent.CompletableFuture;
11+
12+
public class PSDCuriosProvider extends CuriosDataProvider {
13+
14+
public PSDCuriosProvider(PackOutput output, CompletableFuture<HolderLookup.Provider> lookupProvider, ExistingFileHelper existingFileHelper) {
15+
super(CompactMachines.MOD_ID, output, existingFileHelper, lookupProvider);
16+
}
17+
18+
@Override
19+
public void generate(HolderLookup.Provider registries, ExistingFileHelper fileHelper) {
20+
this.createSlot("psd")
21+
.icon(CompactMachines.modRL("slot/empty_psd"))
22+
.size(1)
23+
.addValidator(CuriosCompat.PSD_VALIDATOR);
24+
25+
this.createEntities("psd")
26+
.addPlayer()
27+
.addSlots("psd");
28+
}
29+
}

neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/base/curios/CurioEntityGenerator.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/base/curios/CurioSlotGenerator.java

Lines changed: 0 additions & 35 deletions
This file was deleted.

neoforge-main/build.gradle.kts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,13 @@ repositories {
181181
// location of a maven mirror for JEI files, as a fallback
182182
name = "ModMaven"
183183
}
184+
185+
maven("https://maven.theillusivec4.top/") {
186+
name = "Illusive Soulworks maven (Curios API)"
187+
content {
188+
includeGroup("top.theillusivec4.curios")
189+
}
190+
}
184191
}
185192

186193
dependencies {
@@ -215,6 +222,9 @@ dependencies {
215222
implementation(compactmods.bundles.gander)
216223
accessTransformers(compactmods.ganderRendering)
217224
jarJar(compactmods.bundles.gander)
225+
226+
// Curios API
227+
compileOnly(libs.curios)
218228
}
219229

220230
tasks.withType<Test> {

neoforge-main/src/main/java/dev/compactmods/machines/client/room/MachineRoomScreen.java

Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,28 @@
22

33
import dev.compactmods.gander.render.geometry.BakedLevel;
44
import dev.compactmods.gander.ui.widget.SpatialRenderer;
5+
import dev.compactmods.machines.CommonConfig;
56
import dev.compactmods.machines.api.CompactMachines;
7+
import dev.compactmods.machines.api.shrinking.PSDTags;
68
import dev.compactmods.machines.client.widget.ImageButtonBuilder;
9+
import dev.compactmods.machines.compat.curios.CuriosCompat;
710
import dev.compactmods.machines.feature.CMFeatureFlags;
811
import dev.compactmods.machines.network.room.PlayerRequestedTeleportPacket;
912
import dev.compactmods.machines.network.room.PlayerRequestedUpgradeUIPacket;
1013
import dev.compactmods.machines.network.room.PlayerStartedRoomTrackingPacket;
14+
import dev.compactmods.machines.shrinking.Shrinking;
15+
import net.minecraft.client.Minecraft;
1116
import net.minecraft.client.gui.GuiGraphics;
1217
import net.minecraft.client.gui.components.ImageButton;
1318
import net.minecraft.client.gui.components.WidgetSprites;
1419
import net.minecraft.client.gui.navigation.ScreenRectangle;
1520
import net.minecraft.client.gui.screens.Screen;
1621
import net.minecraft.core.GlobalPos;
1722
import net.minecraft.network.chat.Component;
23+
import net.minecraft.util.CommonColors;
24+
import net.minecraft.util.FastColor;
1825
import net.minecraft.world.phys.AABB;
26+
import net.neoforged.fml.ModList;
1927
import net.neoforged.neoforge.network.PacketDistributor;
2028

2129
public class MachineRoomScreen extends Screen {
@@ -47,7 +55,7 @@ protected void init() {
4755
CompactMachines.modRL("personal_shrinking_device_highlighted"),
4856
CompactMachines.modRL("personal_shrinking_device_disabled"));
4957

50-
this.screenArea = new ScreenRectangle((height / 2) - 120, (width / 2) - 130,
58+
this.screenArea = new ScreenRectangle((width / 2) - 130, (height / 2) - 120,
5159
260, 240);
5260

5361
this.psdButton = ImageButtonBuilder.button(psdBtnSprites)
@@ -63,6 +71,32 @@ protected void init() {
6371
roomUpgradesButton();
6472
}
6573

74+
@Override
75+
public void tick() {
76+
super.tick();
77+
psdButton.active = checkForShrinkingDevice();
78+
}
79+
80+
private static boolean checkForShrinkingDevice() {
81+
final var player = Minecraft.getInstance().player;
82+
if(player == null)
83+
return false;
84+
85+
if(player.isCreative()) return true;
86+
87+
final var hasPsdInInv = player.getInventory()
88+
.contains(slotItem -> slotItem.has(Shrinking.DataComponents.SHRINKING_CONFIG) || slotItem.is(PSDTags.ITEM));
89+
90+
if(hasPsdInInv)
91+
return true;
92+
93+
if(ModList.get().isLoaded("curios")) {
94+
return CuriosCompat.hasPsdCurio(player);
95+
}
96+
97+
return false;
98+
}
99+
66100
private void roomUpgradesButton() {
67101
if(this.minecraft == null || this.minecraft.getConnection() == null) return;
68102
if(CMFeatureFlags.ROOM_UPGRADES.isSubsetOf(minecraft.getConnection().enabledFeatures()))
@@ -83,6 +117,19 @@ private void roomUpgradesButton() {
83117
}
84118
}
85119

120+
@Override
121+
public void renderBackground(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) {
122+
super.renderBackground(guiGraphics, mouseX, mouseY, partialTick);
123+
124+
// TODO: Re-enable once Gander scissors itself properly
125+
// guiGraphics.fill(screenArea.left(), screenArea.top(), screenArea.right(), screenArea.bottom(),
126+
// FastColor.ARGB32.color(180, CommonColors.WHITE));
127+
//
128+
// guiGraphics.fill(screenArea.left() + 2, screenArea.top() + 2,
129+
// screenArea.right() - 2, screenArea.bottom() - 2,
130+
// FastColor.ARGB32.color(255, CommonColors.BLACK));
131+
}
132+
86133
@Override
87134
public void render(GuiGraphics graphics, int pMouseX, int pMouseY, float pPartialTick) {
88135
super.render(graphics, pMouseX, pMouseY, pPartialTick);
@@ -99,16 +146,6 @@ public void render(GuiGraphics graphics, int pMouseX, int pMouseY, float pPartia
99146
graphics.drawCenteredString(font, rt, 0, font.lineHeight + 7, 0xFFDEDEDE);
100147
}
101148
pose.popPose();
102-
103-
pose.pushPose();
104-
{
105-
pose.translate(screenArea.left(), screenArea.top(), 0);
106-
pose.translate(screenArea.width() / 2f, 0, 0);
107-
108-
// graphics.drawCenteredString(font, Component.literal("Room preview broken for a bit"),
109-
// 0, 100, 0xFFCCCCCC);
110-
}
111-
pose.popPose();
112149
}
113150

114151
@Override

neoforge-main/src/main/java/dev/compactmods/machines/compat/InterModCompat.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package dev.compactmods.machines.compat;
22

3+
import dev.compactmods.machines.compat.curios.CuriosCompat;
4+
import net.neoforged.fml.ModList;
35
import net.neoforged.fml.event.lifecycle.InterModEnqueueEvent;
46

57
public class InterModCompat {
@@ -10,5 +12,8 @@ public static void enqueueCompatMessages(final InterModEnqueueEvent evt) {
1012
//
1113
// if(ModList.get().isLoaded("carryon"))
1214
// CarryOnCompat.sendIMC();
15+
16+
if(ModList.get().isLoaded("curios"))
17+
CuriosCompat.register();
1318
}
1419
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package dev.compactmods.machines.compat.curios;
2+
3+
import dev.compactmods.machines.api.CompactMachines;
4+
import dev.compactmods.machines.api.shrinking.PSDTags;
5+
import dev.compactmods.machines.shrinking.Shrinking;
6+
import net.minecraft.resources.ResourceLocation;
7+
import net.minecraft.world.entity.LivingEntity;
8+
import top.theillusivec4.curios.api.CuriosApi;
9+
10+
import javax.annotation.Nonnull;
11+
12+
public class CuriosCompat {
13+
14+
public static final ResourceLocation PSD_VALIDATOR = CompactMachines.modRL("has_shrinking_config");
15+
16+
public static void register() {
17+
18+
CuriosApi.registerCurioPredicate(PSD_VALIDATOR, result -> {
19+
final var stack = result.stack();
20+
return stack.is(PSDTags.ITEM) || stack.has(Shrinking.DataComponents.SHRINKING_CONFIG);
21+
});
22+
}
23+
24+
public static boolean hasPsdCurio(@Nonnull LivingEntity ent) {
25+
final var inv = CuriosApi.getCuriosInventory(ent)
26+
.flatMap(handler -> handler.getStacksHandler("psd"))
27+
.orElse(null);
28+
29+
if(inv == null) return false;
30+
31+
for(var slot = 0; slot < inv.getSlots(); slot++) {
32+
var slotItem = inv.getStacks().getStackInSlot(slot);
33+
if(slotItem.isEmpty()) continue;
34+
35+
if(slotItem.has(Shrinking.DataComponents.SHRINKING_CONFIG) || slotItem.is(PSDTags.ITEM))
36+
return true;
37+
}
38+
39+
return false;
40+
}
41+
}

0 commit comments

Comments
 (0)