Skip to content

Commit 5f477a8

Browse files
authored
Merge pull request #15 from HyperRaccoon13/master
REI Chaos
2 parents fe92f1a + dcf6118 commit 5f477a8

33 files changed

+1495
-255
lines changed

.github/workflows/build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jobs:
3333
run: ./gradlew build
3434
- name: capture build artifacts
3535
if: ${{ runner.os == 'Linux' && matrix.java == '17' }} # Only upload artifacts built from latest java on one OS
36-
uses: actions/upload-artifact@v3
36+
uses: actions/upload-artifact@v4
3737
with:
3838
name: Artifacts
39-
path: build/libs/
39+
path: build/libs/

build.gradle

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,27 +14,36 @@ repositories {
1414
maven { url "https://maven.shedaniel.me/" }
1515
maven { url "https://maven.terraformersmc.com/releases/" }
1616
maven { url "<https://maven.architectury.dev/>" }
17+
maven {
18+
name = 'tterrag maven'
19+
url = 'https://maven.tterrag.com/'
20+
}
21+
maven {
22+
name = "Modrinth"
23+
url = "https://api.modrinth.com/maven"
24+
}
1725
google()
1826
}
1927

2028
dependencies {
21-
// To change the versions see the gradle.properties file
2229
minecraft "com.mojang:minecraft:${project.minecraft_version}"
2330
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
2431
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
2532

26-
// Fabric API. This is technically optional, but you probably want it anyway.
2733
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
2834

2935

3036
modCompileOnly "me.shedaniel:RoughlyEnoughItems-api-fabric:${rei_version}"
3137
modRuntimeOnly "me.shedaniel:RoughlyEnoughItems-fabric:${rei_version}"
3238

33-
3439
// Dev QOL
3540
modLocalRuntime("com.terraformersmc:modmenu:${modmenu_version}")
3641
modLocalRuntime("me.shedaniel:RoughlyEnoughItems-fabric:${rei_version}")
3742

43+
modCompileOnly "maven.modrinth:yttr:${yttr_version}"
44+
modLocalRuntime "maven.modrinth:yttr:${yttr_version}"
45+
46+
3847
implementation 'com.google.code.gson:gson:2.8.5'
3948
}
4049

@@ -79,4 +88,4 @@ publishing {
7988
// The repositories here will be used for publishing your artifact, not for
8089
// retrieving dependencies.
8190
}
82-
}
91+
}

gradle.properties

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,8 @@ org.gradle.jvmargs=-Xmx2G
2323

2424
# Development QOL
2525
modmenu_version=3.2.5
26-
rei_version=8.3.588
26+
rei_version=8.3.588
27+
28+
29+
# yttr
30+
yttr_version = 7.626+1.18.2

src/main/java/com/github/ethanicuss/astraladditions/AstralAdditionsClient.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,10 @@
66
import com.github.ethanicuss.astraladditions.registry.ModBlocks;
77
import net.fabricmc.api.ClientModInitializer;
88
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
9-
import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandler;
109
import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandlerRegistry;
1110
import net.fabricmc.fabric.api.client.render.fluid.v1.SimpleFluidRenderHandler;
12-
import net.minecraft.block.Block;
1311
import net.minecraft.client.render.RenderLayer;
1412
import net.minecraft.client.render.entity.model.EntityModelLayer;
15-
import net.minecraft.fluid.Fluid;
1613
import net.minecraft.util.Identifier;
1714

1815
public class AstralAdditionsClient implements ClientModInitializer {

src/main/java/com/github/ethanicuss/astraladditions/compat/rei/AstralAdditionsREIClientPlugin.java

Lines changed: 117 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,61 +8,151 @@
88
import com.github.ethanicuss.astraladditions.compat.rei.transmute.TransmuteDisplay;
99
import com.github.ethanicuss.astraladditions.compat.rei.vacuum.VacuumCategory;
1010
import com.github.ethanicuss.astraladditions.compat.rei.vacuum.VacuumDisplay;
11+
import com.github.ethanicuss.astraladditions.compat.rei.yttr.centrifuging.CentrifugeCategory;
12+
import com.github.ethanicuss.astraladditions.compat.rei.yttr.centrifuging.CentrifugeDisplay;
13+
import com.github.ethanicuss.astraladditions.compat.rei.yttr.pistonsmashing.PistonSmashingCategory;
14+
import com.github.ethanicuss.astraladditions.compat.rei.yttr.pistonsmashing.PistonSmashingDisplay;
15+
import com.github.ethanicuss.astraladditions.compat.rei.yttr.shattering.ShatteringCategory;
16+
import com.github.ethanicuss.astraladditions.compat.rei.yttr.shattering.ShatteringDisplay;
17+
import com.github.ethanicuss.astraladditions.compat.rei.yttr.soaking.SoakingCategory;
18+
import com.github.ethanicuss.astraladditions.compat.rei.yttr.soaking.SoakingDisplay;
19+
import com.github.ethanicuss.astraladditions.compat.rei.yttr.voidfiltering.VoidFilteringCategory;
20+
import com.github.ethanicuss.astraladditions.compat.rei.yttr.voidfiltering.VoidFilteringDisplay;
1121
import com.github.ethanicuss.astraladditions.fluids.ModFluids;
1222
import com.github.ethanicuss.astraladditions.recipes.DesizerRecipe;
1323
import com.github.ethanicuss.astraladditions.recipes.TransmuteRecipe;
1424
import com.github.ethanicuss.astraladditions.registry.ChromaticVacuumRecipe;
1525
import com.github.ethanicuss.astraladditions.registry.ModBlocks;
1626
import com.github.ethanicuss.astraladditions.registry.ModItems;
27+
import com.unascribed.yttr.init.YEnchantments;
28+
import com.unascribed.yttr.init.YItems;
29+
import com.unascribed.yttr.init.YRecipeTypes;
1730
import me.shedaniel.rei.api.client.plugins.REIClientPlugin;
1831
import me.shedaniel.rei.api.client.registry.category.CategoryRegistry;
1932
import me.shedaniel.rei.api.client.registry.display.DisplayRegistry;
2033
import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry;
2134
import me.shedaniel.rei.api.common.category.CategoryIdentifier;
2235
import me.shedaniel.rei.api.common.util.EntryStacks;
2336
import net.minecraft.client.MinecraftClient;
37+
import net.minecraft.enchantment.EnchantmentHelper;
38+
import net.minecraft.item.ItemStack;
39+
import net.minecraft.item.Items;
40+
import net.minecraft.nbt.NbtCompound;
41+
import net.minecraft.nbt.NbtList;
42+
import net.minecraft.nbt.NbtString;
2443
import net.minecraft.recipe.RecipeManager;
44+
import net.minecraft.recipe.RecipeType;
45+
import net.minecraft.text.Style;
46+
import net.minecraft.text.Text;
47+
import net.minecraft.text.TranslatableText;
48+
import net.minecraft.util.Formatting;
2549
import net.minecraft.util.Identifier;
2650

2751
import java.util.List;
52+
import java.util.Map;
2853

2954
public class AstralAdditionsREIClientPlugin implements REIClientPlugin {
30-
public static final CategoryIdentifier<DesizerDisplay> DESIZER = CategoryIdentifier.of(new Identifier(AstralAdditions.MOD_ID, "desizer"));
55+
public static final CategoryIdentifier<DesizerDisplay> DESIZER = CategoryIdentifier.of(new Identifier(AstralAdditions.MOD_ID, "desizer"));
3156

32-
public static final CategoryIdentifier<TransmuteDisplay> TRANSMUTE = CategoryIdentifier.of(new Identifier(AstralAdditions.MOD_ID, "transmute"));
57+
public static final CategoryIdentifier<TransmuteDisplay> TRANSMUTE = CategoryIdentifier.of(new Identifier(AstralAdditions.MOD_ID, "transmute"));
3358

34-
public static final CategoryIdentifier<VacuumDisplay> VACUUM = CategoryIdentifier.of(new Identifier(AstralAdditions.MOD_ID, "vacuum"));
59+
public static final CategoryIdentifier<VacuumDisplay> VACUUM = CategoryIdentifier.of(new Identifier(AstralAdditions.MOD_ID, "vacuum"));
3560

36-
@Override
37-
public void registerCategories(CategoryRegistry registry) {
38-
registry.add(new DesizerCategory());
39-
registry.addWorkstations(DESIZER, EntryStacks.of(ModBlocks.DESIZER_CONTROLLER));
61+
//* YTTR
62+
public static final CategoryIdentifier<CentrifugeDisplay> CENTRIFUGE = CategoryIdentifier.of(new Identifier(AstralAdditions.MOD_ID, "centrifuge"));
63+
public static final CategoryIdentifier<PistonSmashingDisplay> PISTON_SMASHING = CategoryIdentifier.of(new Identifier(AstralAdditions.MOD_ID, "piston_smashing"));
64+
public static final CategoryIdentifier<SoakingDisplay> SOAKING = CategoryIdentifier.of(new Identifier(AstralAdditions.MOD_ID, "soaking"));
65+
public static final CategoryIdentifier<VoidFilteringDisplay> VOID_FILTERING = CategoryIdentifier.of(new Identifier(AstralAdditions.MOD_ID, "void_filtering"));
66+
public static final CategoryIdentifier<ShatteringDisplay> SHATTERING = CategoryIdentifier.of(new Identifier(AstralAdditions.MOD_ID, "shattering"));
4067

41-
registry.add(new TransmuteCategory());
42-
registry.addWorkstations(TRANSMUTE, EntryStacks.of(ModFluids.SHIMMER_BUCKET));
68+
@Override
69+
public void registerCategories(CategoryRegistry registry) {
70+
registry.add(new DesizerCategory());
71+
registry.addWorkstations(DESIZER, EntryStacks.of(ModBlocks.DESIZER_CONTROLLER));
4372

44-
registry.add(new VacuumCategory());
45-
registry.addWorkstations(VACUUM, EntryStacks.of(ModItems.CHROMATIC_VACUUM));
73+
registry.add(new TransmuteCategory());
74+
registry.addWorkstations(TRANSMUTE, EntryStacks.of(ModFluids.SHIMMER_BUCKET));
4675

47-
}
76+
registry.add(new VacuumCategory());
77+
registry.addWorkstations(VACUUM, EntryStacks.of(ModItems.CHROMATIC_VACUUM));
4878

49-
@Override
50-
public void registerDisplays(DisplayRegistry registry) {
51-
RecipeManager recipeManager = MinecraftClient.getInstance().world.getRecipeManager();
79+
//* YTTR
80+
registry.add(new CentrifugeCategory());
81+
registry.addWorkstations(CENTRIFUGE, EntryStacks.of(YItems.CENTRIFUGE));
5282

53-
List<DesizerDisplay> desizerRecipes = recipeManager.listAllOfType(DesizerRecipe.Type.INSTANCE).stream().map(DesizerDisplay::of).toList();
54-
desizerRecipes.forEach(registry::add);
83+
registry.add(new PistonSmashingCategory());
84+
registry.addWorkstations(PISTON_SMASHING, EntryStacks.of(Items.PISTON));
85+
registry.addWorkstations(PISTON_SMASHING, EntryStacks.of(Items.STICKY_PISTON));
5586

56-
List<TransmuteDisplay> transmuteRecipes = recipeManager.listAllOfType(TransmuteRecipe.Type.INSTANCE).stream().map(TransmuteDisplay::of).toList();
57-
transmuteRecipes.forEach(registry::add);
87+
registry.add(new SoakingCategory());
5888

59-
List<VacuumDisplay> vacuumRecipes = recipeManager.listAllOfType(ChromaticVacuumRecipe.Type.INSTANCE).stream().map(VacuumDisplay::of).toList();
60-
vacuumRecipes.forEach(registry::add);
89+
registry.add(new VoidFilteringCategory());
90+
registry.addWorkstations(VOID_FILTERING, EntryStacks.of(YItems.VOID_FILTER));
6191

62-
}
6392

64-
@Override
65-
public void registerScreens(ScreenRegistry registry) {
66-
REIClientPlugin.super.registerScreens(registry);
67-
}
68-
}
93+
registry.add(new ShatteringCategory());
94+
ItemStack shatteringBook = new ItemStack(Items.ENCHANTED_BOOK);
95+
EnchantmentHelper.set(Map.of(YEnchantments.SHATTERING_CURSE, 1), shatteringBook);
96+
97+
NbtList lore = new NbtList();
98+
lore.add(NbtString.of(Text.Serializer.toJson(
99+
new TranslatableText("category.astraladditions.shattering.workstations").setStyle(Style.EMPTY.withItalic(false).withColor(Formatting.YELLOW))
100+
)));
101+
NbtCompound displayTag = shatteringBook.getOrCreateSubNbt("display");
102+
displayTag.put("Lore", lore);
103+
104+
registry.addWorkstations(SHATTERING, EntryStacks.of(shatteringBook));
105+
106+
}
107+
108+
@Override
109+
public void registerDisplays(DisplayRegistry registry) {
110+
RecipeManager recipeManager = MinecraftClient.getInstance().world.getRecipeManager();
111+
112+
List<DesizerDisplay> desizerRecipes = recipeManager.listAllOfType(DesizerRecipe.Type.INSTANCE).stream().map(DesizerDisplay::of).toList();
113+
desizerRecipes.forEach(registry::add);
114+
115+
List<TransmuteDisplay> transmuteRecipes = recipeManager.listAllOfType(TransmuteRecipe.Type.INSTANCE).stream().map(TransmuteDisplay::of).toList();
116+
transmuteRecipes.forEach(registry::add);
117+
118+
List<VacuumDisplay> vacuumRecipes = recipeManager.listAllOfType(ChromaticVacuumRecipe.Type.INSTANCE).stream().map(VacuumDisplay::of).toList();
119+
vacuumRecipes.forEach(registry::add);
120+
121+
//* YTTR
122+
List<CentrifugeDisplay> centrifugeRecipes = recipeManager.listAllOfType(YRecipeTypes.CENTRIFUGING).stream().map(CentrifugeDisplay::of).toList();
123+
centrifugeRecipes.forEach(registry::add);
124+
125+
List<PistonSmashingDisplay> pistonSmashingRecipes = recipeManager.listAllOfType(YRecipeTypes.PISTON_SMASHING).stream().map(PistonSmashingDisplay::of).toList();
126+
pistonSmashingRecipes.forEach(registry::add);
127+
128+
List<SoakingDisplay> soakingRecipes = recipeManager.listAllOfType(YRecipeTypes.SOAKING).stream().map(SoakingDisplay::of).toList();
129+
soakingRecipes.forEach(registry::add);
130+
131+
List<VoidFilteringDisplay> voidFilteringRecipe = recipeManager.listAllOfType(YRecipeTypes.VOID_FILTERING).stream().map(VoidFilteringDisplay::of).toList();
132+
voidFilteringRecipe.forEach(registry::add);
133+
134+
//Shattering stuff
135+
List<ShatteringDisplay> shatteringRecipes = recipeManager.listAllOfType(YRecipeTypes.SHATTERING).stream()
136+
.map(ShatteringDisplay::of)
137+
.toList();
138+
shatteringRecipes.forEach(registry::add);
139+
140+
List<ShatteringDisplay> shatteringstonecuttingRecipes = recipeManager.listAllOfType(RecipeType.STONECUTTING).stream()
141+
.filter(r -> r.getOutput().getCount() == 1 && !r.getIngredients().isEmpty())
142+
.map(ShatteringDisplay::of)
143+
.toList();
144+
shatteringstonecuttingRecipes.forEach(registry::add);
145+
146+
List<ShatteringDisplay> shatteringoneByOneCraftingRecipes = recipeManager.listAllOfType(RecipeType.CRAFTING).stream()
147+
.filter(r -> r.fits(1, 1) && !r.getIngredients().isEmpty())
148+
.map(ShatteringDisplay::of)
149+
.toList();
150+
shatteringoneByOneCraftingRecipes.forEach(registry::add);
151+
}
152+
153+
154+
@Override
155+
public void registerScreens(ScreenRegistry registry) {
156+
REIClientPlugin.super.registerScreens(registry);
157+
}
158+
}
Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.github.ethanicuss.astraladditions.compat.rei.transmute;
22

33
import com.github.ethanicuss.astraladditions.compat.rei.AstralAdditionsREIClientPlugin;
4+
import com.github.ethanicuss.astraladditions.compat.rei.widgets.CurvedArrowWidget;
45
import com.github.ethanicuss.astraladditions.compat.rei.widgets.RotatedArrowWidget;
56
import com.github.ethanicuss.astraladditions.fluids.ModFluids;
67
import com.google.common.collect.Lists;
@@ -35,7 +36,7 @@ public Renderer getIcon() {
3536
public CategoryIdentifier<? extends TransmuteDisplay> getCategoryIdentifier() {
3637
return AstralAdditionsREIClientPlugin.TRANSMUTE;
3738
}
38-
boolean makeBigger = false;
39+
3940
@Override
4041
public List<Widget> setupDisplay(TransmuteDisplay display, Rectangle bounds) {
4142
List<Widget> widgets = Lists.newArrayList();
@@ -45,56 +46,53 @@ public List<Widget> setupDisplay(TransmuteDisplay display, Rectangle bounds) {
4546
List<EntryIngredient> outputs = display.getOutputEntries();
4647

4748

48-
widgets.add(new RotatedArrowWidget(new Point(bounds.x + 1, bounds.y+30), 90));
49+
int centerX = bounds.getCenterX();
50+
int centerY = bounds.getCenterY();
51+
52+
widgets.add(Widgets.createSlot(new Point(centerX - 75, centerY-45))
53+
.entries(inputs.get(0))
54+
.markInput());
4955

50-
widgets.add(Widgets.createSlot(new Point(bounds.x + 5, bounds.y+5)).entries(inputs.get(0)));
56+
widgets.add(CurvedArrowWidget.of(new Point(centerX - 54, centerY-38),90, false));
5157

52-
Rectangle renderBounds = new Rectangle(bounds.x + 5, bounds.y + 55, 16, 16);
58+
Rectangle renderBounds = new Rectangle(centerX - 61, centerY-18, 32, 32);
5359

5460
widgets.add(Widgets.createDrawableWidget(((helper, matrices, mouseX, mouseY, delta) -> {
5561
EntryStacks.of(ModFluids.FLOWING_SHIMMER).render(matrices, renderBounds, mouseX, mouseY, delta);
5662
})));
5763

58-
widgets.add(Widgets.createTooltip(renderBounds, new TranslatableText("tooltip.astraladditions.transmute_text")));
59-
60-
widgets.add(Widgets.createArrow(new Point(bounds.x + 5 + 20, bounds.y+55)));
64+
widgets.add(Widgets.createTooltip(renderBounds, new TranslatableText("tooltip.astraladditions.transmute_hint")));
6165

66+
widgets.add(CurvedArrowWidget.of(new Point(centerX - 46, centerY+19),180, true));
6267

68+
widgets.add(Widgets.createLabel(new Point(centerX - 75,centerY+42), display.getHintText())
69+
.leftAligned());
6370

71+
int[] xOffsets = {-25, -5, 15, 35};
72+
int[] yOffsets = {19, -1, -21, -41};
6473

65-
int baseX = bounds.x + 55;
66-
int baseY = bounds.y + 55;
67-
int outputSize = outputs.size();
68-
//? math, me head hurts
69-
for (int i = 0; i < outputSize; i++) {
70-
if (outputSize < 4) {
71-
makeBigger = false;
72-
widgets.add(Widgets.createSlot(new Point(baseX, baseY - (i * 20))).entries(outputs.get(i)));
73-
} else if (outputSize == 4) {
74-
makeBigger = true;
75-
widgets.add(Widgets.createSlot(new Point(baseX, baseY - (i * 20) + 20)).entries(outputs.get(i)));
76-
} else {
77-
int column = i / 4;
78-
int row = i % 4;
79-
makeBigger = true;
80-
widgets.add(Widgets.createSlot(new Point(baseX + (column * 20), baseY - (row * 20) + 20)).entries(outputs.get(i)));
74+
int index = 0;
75+
for (int xOffset : xOffsets) {
76+
for (int yOffset : yOffsets) {
77+
if (index < outputs.size()) {
78+
widgets.add(Widgets.createSlot(new Point(centerX + xOffset, centerY + yOffset))
79+
.entries(outputs.get(index))
80+
.markOutput());
81+
index++;
82+
}
8183
}
8284
}
83-
8485
return widgets;
8586
}
8687

8788
@Override
8889
public int getDisplayHeight() {
89-
if (makeBigger) {
90-
return 100;
91-
}
92-
else return 80;
90+
return 110;
9391

9492
}
9593

9694
@Override
9795
public int getDisplayWidth(TransmuteDisplay TransmuteDisplay) {
98-
return 146;
96+
return 160;
9997
}
100-
}
98+
}

0 commit comments

Comments
 (0)