Skip to content

Commit a406a12

Browse files
committed
1.21.4
1 parent 2cc7c87 commit a406a12

File tree

17 files changed

+199
-83
lines changed

17 files changed

+199
-83
lines changed

build.gradle

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ repositories {
4141

4242
// modmenu
4343
maven { url "https://maven.terraformersmc.com/releases/" }
44-
45-
mavenLocal()
4644
}
4745

4846
dependencies {

gradle.properties

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ org.gradle.jvmargs=-Xmx1G
33

44
# Fabric Properties
55
# check these on https://fabricmc.net/develop
6-
minecraft_base_version=1.21.2
7-
minecraft_version=1.21.3
8-
yarn_mappings=1.21.3+build.2
6+
minecraft_base_version=1.21.4
7+
minecraft_version=1.21.4
8+
yarn_mappings=1.21.4+build.2
99
loader_version=0.16.9
1010

1111
# Mod Properties
@@ -15,16 +15,16 @@ org.gradle.jvmargs=-Xmx1G
1515

1616
# Dependencies
1717
# check this on https://fabricmc.net/develop
18-
fabric_version=0.107.0+1.21.3
18+
fabric_version=0.112.0+1.21.4
1919

2020
# https://maven.shedaniel.me/me/shedaniel/RoughlyEnoughItems-fabric/
21-
rei_version=17.0.789
21+
rei_version=18.0.796
2222

2323
# https://maven.wispforest.io/#/releases/io/wispforest/owo-lib/
24-
owo_version=0.12.18+1.21.2
24+
owo_version=0.12.20+1.21.4
2525

2626
# https://maven.terraformersmc.com/releases/com/terraformersmc/modmenu
27-
modmenu_version=12.0.0-beta.1
27+
modmenu_version=13.0.0-beta.1
2828

2929
# https://maven.wispforest.io/#/releases/io/wispforest/lavender-md/core/
3030
lavender_md_version=0.1.2+1.21.2

src/main/java/io/wispforest/lavender/book/BookLoader.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ public class BookLoader {
3232

3333
public static void initialize() {
3434
ModelLoadingPlugin.register(context -> {
35-
context.addModels(BookBakedModel.Unbaked.BROWN_BOOK_ID);
3635
for (var book : VISIBLE_BOOKS.values()) {
3736
if (book.dynamicBookModel() == null) return;
3837
context.addModels(book.dynamicBookModel());
Lines changed: 51 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,68 @@
11
package io.wispforest.lavender.client;
22

3-
import io.wispforest.lavender.Lavender;
43
import io.wispforest.lavender.book.LavenderBookItem;
5-
import net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel;
64
import net.minecraft.client.MinecraftClient;
7-
import net.minecraft.client.render.model.BakedModel;
8-
import net.minecraft.client.render.model.Baker;
9-
import net.minecraft.client.render.model.ModelBakeSettings;
10-
import net.minecraft.client.render.model.UnbakedModel;
11-
import net.minecraft.client.render.model.json.ModelOverrideList;
12-
import net.minecraft.client.texture.Sprite;
13-
import net.minecraft.client.util.ModelIdentifier;
14-
import net.minecraft.client.util.SpriteIdentifier;
5+
import net.minecraft.client.item.ItemModelManager;
6+
import net.minecraft.client.render.item.ItemRenderState;
7+
import net.minecraft.client.render.item.model.ItemModel;
158
import net.minecraft.client.world.ClientWorld;
169
import net.minecraft.entity.LivingEntity;
1710
import net.minecraft.item.ItemStack;
18-
import net.minecraft.util.Identifier;
11+
import net.minecraft.item.ModelTransformationMode;
1912
import org.jetbrains.annotations.Nullable;
2013

21-
import java.util.function.Function;
14+
public class BookBakedModel implements ItemModel {
2215

23-
public class BookBakedModel extends ForwardingBakedModel {
16+
private final ItemModel defaultModel;
2417

25-
private final ModelOverrideList overrides = new ModelOverrideList() {
26-
@Override
27-
public @Nullable BakedModel getModel(ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity entity, int seed) {
28-
var book = LavenderBookItem.bookOf(stack);
29-
if (book == null || book.dynamicBookModel() == null) return null;
30-
31-
var bookModel = MinecraftClient.getInstance().getBakedModelManager().getModel(new ModelIdentifier(book.dynamicBookModel(), "inventory"));
32-
return bookModel != MinecraftClient.getInstance().getBakedModelManager().getMissingModel()
33-
? bookModel
34-
: null;
35-
}
36-
};
37-
38-
private BookBakedModel(BakedModel parent) {
39-
this.wrapped = parent;
18+
public BookBakedModel(ItemModel defaultModel) {
19+
this.defaultModel = defaultModel;
4020
}
4121

4222
@Override
43-
public ModelOverrideList getOverrides() {
44-
return this.overrides;
45-
}
46-
47-
public static class Unbaked implements UnbakedModel {
48-
49-
public static final Identifier BROWN_BOOK_ID = Lavender.id("item/brown_book");
50-
51-
@Override
52-
public void resolve(Resolver resolver) {
53-
resolver.resolve(BROWN_BOOK_ID);
54-
}
55-
56-
@Nullable
57-
@Override
58-
public BakedModel bake(Baker baker, Function<SpriteIdentifier, Sprite> textureGetter, ModelBakeSettings rotationContainer) {
59-
return new BookBakedModel(baker.bake(BROWN_BOOK_ID, rotationContainer));
23+
public void update(ItemRenderState state, ItemStack stack, ItemModelManager resolver, ModelTransformationMode transformationMode, @Nullable ClientWorld world, @Nullable LivingEntity user, int seed) {
24+
var book = LavenderBookItem.bookOf(stack);
25+
if (book != null && book.dynamicBookModel() != null) {
26+
MinecraftClient.getInstance().getBakedModelManager().getItemModel(book.dynamicBookModel()).update(state, stack, resolver, transformationMode, world, user, seed);
27+
} else {
28+
this.defaultModel.update(state, stack, resolver, transformationMode, world, user, seed);
6029
}
6130
}
31+
32+
// private final ModelOverrideList overrides = new ModelOverrideList() {
33+
// @Override
34+
// public @Nullable BakedModel getModel(ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity entity, int seed) {
35+
// var book = LavenderBookItem.bookOf(stack);
36+
// if (book == null || book.dynamicBookModel() == null) return null;
37+
//
38+
// var bookModel = MinecraftClient.getInstance().getBakedModelManager().getModel(new ModelIdentifier(book.dynamicBookModel(), "inventory"));
39+
// return bookModel != MinecraftClient.getInstance().getBakedModelManager().getMissingModel()
40+
// ? bookModel
41+
// : null;
42+
// }
43+
// };
44+
//
45+
// private BookBakedModel(BakedModel parent) {
46+
// this.wrapped = parent;
47+
// }
48+
//
49+
// @Override
50+
// public ModelOverrideList getOverrides() {
51+
// return this.overrides;
52+
// }
53+
//
54+
// public static class Unbaked implements UnbakedModel {
55+
//
56+
//
57+
// @Override
58+
// public void resolve(Resolver resolver) {
59+
// resolver.resolve(BROWN_BOOK_ID);
60+
// }
61+
//
62+
// @Nullable
63+
// @Override
64+
// public BakedModel bake(Baker baker, Function<SpriteIdentifier, Sprite> textureGetter, ModelBakeSettings rotationContainer) {
65+
// return new BookBakedModel(baker.bake(BROWN_BOOK_ID, rotationContainer));
66+
// }
67+
// }
6268
}

src/main/java/io/wispforest/lavender/client/LavenderBookScreen.java

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import io.wispforest.owo.ui.util.UISounds;
2727
import net.minecraft.client.MinecraftClient;
2828
import net.minecraft.client.gui.DrawContext;
29+
import net.minecraft.client.gui.Element;
2930
import net.minecraft.client.gui.screen.Screen;
3031
import net.minecraft.client.gui.tooltip.TooltipComponent;
3132
import net.minecraft.client.network.ClientPlayerEntity;
@@ -368,6 +369,30 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) {
368369
this.window.setScaleFactor(gameScale);
369370
}
370371

372+
@Override
373+
protected void drawComponentTooltip(DrawContext drawContext, int mouseX, int mouseY, float tickDelta) {
374+
mouseX = (int) (mouseX * this.window.getScaleFactor() / this.scaleFactor);
375+
mouseY = (int) (mouseY * this.window.getScaleFactor() / this.scaleFactor);
376+
377+
double gameScale = this.window.getScaleFactor();
378+
this.window.setScaleFactor(this.scaleFactor);
379+
380+
RenderSystem.backupProjectionMatrix();
381+
RenderSystem.setProjectionMatrix(new Matrix4f().setOrtho(
382+
0,
383+
this.window.getFramebufferWidth() / (float) this.scaleFactor,
384+
this.window.getFramebufferHeight() / (float) this.scaleFactor,
385+
0,
386+
1000,
387+
21000
388+
), ProjectionType.ORTHOGRAPHIC);
389+
390+
super.drawComponentTooltip(drawContext, mouseX, mouseY, tickDelta);
391+
drawContext.draw();
392+
393+
RenderSystem.restoreProjectionMatrix();
394+
this.window.setScaleFactor(gameScale);
395+
}
371396
@Override
372397
public boolean charTyped(char chr, int modifiers) {
373398
if (super.charTyped(chr, modifiers)) return true;
@@ -400,12 +425,17 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
400425
return true;
401426
}
402427

428+
@Override
429+
public Optional<Element> hoveredElement(double mouseX, double mouseY) {
430+
return super.hoveredElement(mouseX, mouseY).flatMap(element -> element != this.uiAdapter ? Optional.of(element) : Optional.empty());
431+
}
432+
403433
@Override
404434
public boolean mouseClicked(double mouseX, double mouseY, int button) {
405435
mouseX = mouseX * this.window.getScaleFactor() / this.scaleFactor;
406436
mouseY = mouseY * this.window.getScaleFactor() / this.scaleFactor;
407437

408-
if (super.mouseClicked(mouseX, mouseY, button)) return true;
438+
if (this.uiAdapter.mouseClicked(mouseX, mouseY, button) || super.mouseClicked(mouseX, mouseY, button)) return true;
409439

410440
if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) {
411441
this.navPop();
@@ -424,7 +454,7 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) {
424454
public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) {
425455
mouseX = mouseX * this.window.getScaleFactor() / this.scaleFactor;
426456
mouseY = mouseY * this.window.getScaleFactor() / this.scaleFactor;
427-
return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY);
457+
return this.uiAdapter.mouseDragged(mouseX, mouseY, button, deltaX, deltaY) || super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY);
428458
}
429459

430460
@Override
@@ -439,7 +469,7 @@ public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmou
439469
mouseX = mouseX * this.window.getScaleFactor() / this.scaleFactor;
440470
mouseY = mouseY * this.window.getScaleFactor() / this.scaleFactor;
441471

442-
if (super.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount)) return true;
472+
if (this.uiAdapter.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount) || super.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount)) return true;
443473
this.turnPage(verticalAmount < 0);
444474

445475
return true;

src/main/java/io/wispforest/lavender/client/LavenderClient.java

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import net.minecraft.client.MinecraftClient;
3030
import net.minecraft.client.gl.Framebuffer;
3131
import net.minecraft.client.network.ClientPlayerEntity;
32+
import net.minecraft.client.render.item.model.ItemModelTypes;
3233
import net.minecraft.item.Items;
3334
import net.minecraft.text.Text;
3435
import net.minecraft.util.ActionResult;
@@ -56,17 +57,19 @@ public class LavenderClient implements ClientModInitializer {
5657
public void onInitializeClient() {
5758
ClientCommandRegistrationCallback.EVENT.register(LavenderCommands.Client::register);
5859

59-
ModelLoadingPlugin.register(pluginContext -> {
60-
pluginContext.modifyModelOnLoad().register((model, context) -> {
61-
if (!Objects.equals(context.resourceId(), Lavender.id("item/dynamic_book"))) return model;
62-
return new BookBakedModel.Unbaked();
63-
});
64-
65-
// pluginContext.resolveModel().register(context -> {
66-
// if (!context.id().equals(Lavender.id("item/dynamic_book"))) return null;
67-
// return new BookBakedModel.Unbaked();
68-
// });
69-
});
60+
ItemModelTypes.ID_MAPPER.put(Lavender.id("dynamic_book_model"), UnbakedBookModel.CODEC);
61+
62+
// ModelLoadingPlugin.register(pluginContext -> {
63+
// pluginContext.modifyModelOnLoad().register((model, context) -> {
64+
// if (!Objects.equals(context.id(), Lavender.id("item/dynamic_book"))) return model;
65+
// return new BookBakedModel.Unbaked();
66+
// });
67+
//
68+
// // pluginContext.resolveModel().register(context -> {
69+
// // if (!context.id().equals(Lavender.id("item/dynamic_book"))) return null;
70+
// // return new BookBakedModel.Unbaked();
71+
// // });
72+
// });
7073

7174
StructureOverlayRenderer.initialize();
7275
OffhandBookRenderer.initialize();

src/main/java/io/wispforest/lavender/client/OffhandBookRenderer.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,6 @@ private FramebufferTexture(int textureId) {
150150
this.glId = textureId;
151151
}
152152

153-
@Override
154-
public void load(ResourceManager manager) {}
155-
156153
@Override
157154
public void clearGlId() {}
158155
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package io.wispforest.lavender.client;
2+
3+
import com.mojang.serialization.MapCodec;
4+
import com.mojang.serialization.codecs.RecordCodecBuilder;
5+
import net.minecraft.client.render.item.model.ItemModel;
6+
import net.minecraft.client.render.item.model.ItemModelTypes;
7+
8+
public class UnbakedBookModel implements ItemModel.Unbaked {
9+
10+
public static final MapCodec<UnbakedBookModel> CODEC = RecordCodecBuilder.mapCodec(
11+
instance -> instance.group(
12+
ItemModelTypes.CODEC.fieldOf("default").forGetter(unbakedBookModel -> unbakedBookModel.defaultModel)
13+
).apply(instance, UnbakedBookModel::new)
14+
);
15+
16+
private final ItemModel.Unbaked defaultModel;
17+
18+
public UnbakedBookModel(ItemModel.Unbaked defaultModel) {
19+
this.defaultModel = defaultModel;
20+
}
21+
22+
@Override
23+
public MapCodec<? extends ItemModel.Unbaked> getCodec() {
24+
return CODEC;
25+
}
26+
27+
@Override
28+
public void resolve(Resolver resolver) {
29+
this.defaultModel.resolve(resolver);
30+
}
31+
32+
@Override
33+
public ItemModel bake(ItemModel.BakeContext context) {
34+
return new BookBakedModel(this.defaultModel.bake(context));
35+
}
36+
}

src/main/java/io/wispforest/lavender/md/features/RecipeFeature.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,8 @@ default void populateIngredients(RecipeEntry<R> recipe, List<Ingredient> ingredi
190190
default void populateIngredientsGrid(RecipeEntry<R> recipe, ParentComponent componentContainer, int gridWidth, int gridHeight) {
191191
var ingredients = recipe.value().getIngredientPlacement().getIngredients();
192192
RecipeGridAligner.alignRecipeToGrid(gridWidth, gridHeight, recipe.value(), recipe.value().getIngredientPlacement().getPlacementSlots(), (input, index, x, y) -> {
193-
if (input.isEmpty() || !(componentContainer.children().get(index) instanceof ItemListComponent ingredient)) return;
194-
ingredient.ingredient(ingredients.get(input.get().placerOutputPosition()));
193+
if (!(componentContainer.children().get(index) instanceof ItemListComponent ingredient)) return;
194+
ingredient.ingredient(ingredients.get(input));
195195
});
196196
}
197197
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"model": {
3+
"type": "lavender:dynamic_book_model",
4+
"default": {
5+
"type": "minecraft:model",
6+
"model": "lavender:item/brown_book"
7+
}
8+
}
9+
}

src/main/resources/assets/lavender/models/item/dynamic_book.json

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

src/main/resources/fabric.mod.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
"fabricloader": ">=0.15.0",
3333
"fabric": "*",
3434
"minecraft": ">=1.21.2",
35-
"owo-lib": ">=0.12.18",
35+
"owo-lib": "*",
3636
"lavender-md": ">=0.1.2",
3737
"lavender-md-owo-ui": "*"
3838
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
accessWidener v2 named
2-
extendable method net/minecraft/client/render/model/json/ModelOverrideList <init> ()V
2+
#extendable method net/minecraft/client/render/model/json/ModelOverrideList <init> ()V

0 commit comments

Comments
 (0)