Skip to content

Commit 56e1fb8

Browse files
committed
feat: custom screen for bigger Augment levels
closes #47
1 parent eb12b31 commit 56e1fb8

25 files changed

+880
-92
lines changed

README.md

+7-5
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,13 @@ selecting EnchantedShulkers and clicking the settings button on the right side.
124124

125125
The following options are available:
126126

127-
| **Option** | **Default** | **Description** |
128-
| ---------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
129-
| Apply glint to placed containers | Yes | Applies the enchantment glint to enchanted shulker boxes and ender chests that are placed in the world |
130-
| Prevent glint overlap with custom models | Yes | Uses different block models and textures for closed containers to prevent overlapping glint. This does not change the look of closed containers, but always uses the vanilla textures, so you should disable this when using a custom resource pack. This option only has effect when the above option is on |
131-
| Refill while inventory is open | No | |
127+
| **Option** | **Default** | **Description** |
128+
| ------------------------------------------------ | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
129+
| Apply glint to placed containers | Yes | Applies the enchantment glint to enchanted shulker boxes and ender chests that are placed in the world |
130+
| Prevent glint overlap with custom models | Yes | Uses different block models and textures for closed containers to prevent overlapping glint. This does not change the look of closed containers, but always uses the vanilla textures, so you should disable this when using a custom resource pack. This option only has effect when the above option is on |
131+
| Refill while inventory is open | No | |
132+
| Use a scrolling screen for higher Augment levels | No | |
133+
| Number of rows for the scrolling screen | 6 | |
132134

133135
### Server
134136

src/main/java/de/rubixdev/enchantedshulkers/mixin/client/ChestBlockEntityRendererMixin.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package de.rubixdev.enchantedshulkers.mixin.client;
22

3-
import de.rubixdev.enchantedshulkers.ClientMod;
43
import de.rubixdev.enchantedshulkers.Utils;
4+
import de.rubixdev.enchantedshulkers.config.ClientConfig;
55
import net.minecraft.block.AbstractChestBlock;
66
import net.minecraft.block.Block;
77
import net.minecraft.block.BlockState;
@@ -83,7 +83,7 @@ private void renderGlint(
8383
int i,
8484
SpriteIdentifier spriteIdentifier
8585
) {
86-
if (!ClientMod.glintWhenPlaced() || !(entity instanceof EnderChestBlockEntity) || !Utils.shouldGlint(entity))
86+
if (!ClientConfig.glintWhenPlaced() || !(entity instanceof EnderChestBlockEntity) || !Utils.shouldGlint(entity))
8787
return;
8888
VertexConsumer vertexConsumer = new SpriteTexturedVertexConsumer(
8989
ItemRenderer.getDirectItemGlintConsumer(
@@ -156,7 +156,7 @@ private void renderGlintWhenClosed(
156156
int i
157157
) {
158158
if (
159-
!ClientMod.customModels()
159+
!ClientConfig.customModels()
160160
|| !(entity instanceof EnderChestBlockEntity)
161161
|| !Utils.shouldGlint(entity)
162162
|| g > 0.01f

src/main/java/de/rubixdev/enchantedshulkers/mixin/client/MinecraftClientMixin.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package de.rubixdev.enchantedshulkers.mixin.client;
22

3-
import de.rubixdev.enchantedshulkers.ClientMod;
43
import de.rubixdev.enchantedshulkers.Mod;
4+
import de.rubixdev.enchantedshulkers.config.ClientConfig;
55
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
66
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
77
import net.minecraft.client.MinecraftClient;
@@ -21,7 +21,7 @@ public class MinecraftClientMixin {
2121

2222
@Inject(method = "setScreen", at = @At("HEAD"))
2323
private void sendScreenChangePacket(Screen screen, CallbackInfo ci) {
24-
if (ClientMod.refillInInventory() || MinecraftClient.getInstance().getNetworkHandler() == null) return;
24+
if (ClientConfig.refillInInventory() || MinecraftClient.getInstance().getNetworkHandler() == null) return;
2525
if (screen != null) {
2626
if (!(screen instanceof AbstractInventoryScreen<?>)) return;
2727
ClientPlayNetworking.send(Mod.INVENTORY_OPEN_PACKET_ID, PacketByteBufs.empty());

src/main/java/de/rubixdev/enchantedshulkers/mixin/client/ShulkerBoxBlockEntityRendererMixin.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package de.rubixdev.enchantedshulkers.mixin.client;
22

3-
import de.rubixdev.enchantedshulkers.ClientMod;
43
import de.rubixdev.enchantedshulkers.Utils;
54
import java.util.function.Function;
5+
import de.rubixdev.enchantedshulkers.config.ClientConfig;
66
import net.minecraft.block.entity.ShulkerBoxBlockEntity;
77
import net.minecraft.client.render.RenderLayer;
88
import net.minecraft.client.render.VertexConsumer;
@@ -34,7 +34,7 @@ private VertexConsumer getVertexConsumer(
3434
Function<Identifier, RenderLayer> layerFactory,
3535
ShulkerBoxBlockEntity shulkerBoxBlockEntity
3636
) {
37-
if (!ClientMod.glintWhenPlaced() || !Utils.shouldGlint(shulkerBoxBlockEntity))
37+
if (!ClientConfig.glintWhenPlaced() || !Utils.shouldGlint(shulkerBoxBlockEntity))
3838
return instance.getVertexConsumer(vertexConsumers, layerFactory);
3939
return instance.getSprite()
4040
.getTextureSpecificVertexConsumer(
@@ -64,7 +64,7 @@ private void renderClosedBox(
6464
float f
6565
) {
6666
if (
67-
!ClientMod.customModels()
67+
!ClientConfig.customModels()
6868
|| !Utils.shouldGlint(shulkerBoxBlockEntity)
6969
|| shulkerBoxBlockEntity.getAnimationProgress(f) > 0.01f
7070
) {

src/main/java/de/rubixdev/enchantedshulkers/mixin/client/ShulkerBoxBlockEntityRendererMixin_999.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package de.rubixdev.enchantedshulkers.mixin.client;
22

3-
import de.rubixdev.enchantedshulkers.ClientMod;
43
import de.rubixdev.enchantedshulkers.Utils;
4+
import de.rubixdev.enchantedshulkers.config.ClientConfig;
55
import net.minecraft.block.entity.ShulkerBoxBlockEntity;
66
import net.minecraft.client.render.block.entity.ShulkerBoxBlockEntityRenderer;
77
import net.minecraft.client.util.SpriteIdentifier;
@@ -29,7 +29,7 @@ private SpriteIdentifier modifySpriteIdentifier(
2929
float f
3030
) {
3131
if (
32-
!ClientMod.customModels()
32+
!ClientConfig.customModels()
3333
|| !Utils.shouldGlint(shulkerBoxBlockEntity)
3434
|| shulkerBoxBlockEntity.getAnimationProgress(f) > 0.01f
3535
|| Utils.hasTwoColors(shulkerBoxBlockEntity)

src/main/java/de/rubixdev/enchantedshulkers/mixin/client/compat/ReinforcedShulkerBoxBlockEntityRendererMixin.java

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package de.rubixdev.enchantedshulkers.mixin.client.compat;
22

3+
import de.rubixdev.enchantedshulkers.config.ClientConfig;
34
import me.fallenbreath.conditionalmixin.api.annotation.Condition;
45
import me.fallenbreath.conditionalmixin.api.annotation.Restriction;
56
import org.spongepowered.asm.mixin.Mixin;
@@ -8,7 +9,6 @@
89
import atonkish.reinfshulker.client.render.block.entity.ReinforcedShulkerBoxBlockEntityRenderer;
910
import atonkish.reinfshulker.util.ReinforcingMaterialSettings;
1011
import com.google.common.collect.ImmutableList;
11-
import de.rubixdev.enchantedshulkers.ClientMod;
1212
import de.rubixdev.enchantedshulkers.Mod;
1313
import de.rubixdev.enchantedshulkers.Utils;
1414
import net.minecraft.client.render.RenderLayer;
@@ -86,8 +86,9 @@ private SpriteIdentifier modifySpriteIdentifier(
8686
ReinforcedShulkerBoxBlockEntity shulkerBox,
8787
float f
8888
) {
89-
if (!ClientMod.customModels() || !Utils.shouldGlint(shulkerBox) || shulkerBox.getAnimationProgress(f) > 0.01f)
90-
return value;
89+
if (
90+
!ClientConfig.customModels() || !Utils.shouldGlint(shulkerBox) || shulkerBox.getAnimationProgress(f) > 0.01f
91+
) return value;
9192
DyeColor dyeColor;
9293
return (dyeColor = shulkerBox.getColor()) == null
9394
? REINFORCED_CLOSED_SHULKER_TEXTURE_ID_MAP.get(shulkerBox.getMaterial().getName())
@@ -108,7 +109,7 @@ private VertexConsumer getVertexConsumer(
108109
Function<Identifier, RenderLayer> layerFactory,
109110
ReinforcedShulkerBoxBlockEntity shulkerBoxBlockEntity
110111
) {
111-
if (!ClientMod.glintWhenPlaced() || !Utils.shouldGlint(shulkerBoxBlockEntity))
112+
if (!ClientConfig.glintWhenPlaced() || !Utils.shouldGlint(shulkerBoxBlockEntity))
112113
return instance.getVertexConsumer(vertexConsumers, layerFactory);
113114
return instance.getSprite()
114115
.getTextureSpecificVertexConsumer(
@@ -137,7 +138,9 @@ private void renderClosedBox(
137138
ReinforcedShulkerBoxBlockEntity shulkerBox,
138139
float f
139140
) {
140-
if (!ClientMod.customModels() || !Utils.shouldGlint(shulkerBox) || shulkerBox.getAnimationProgress(f) > 0.01f) {
141+
if (
142+
!ClientConfig.customModels() || !Utils.shouldGlint(shulkerBox) || shulkerBox.getAnimationProgress(f) > 0.01f
143+
) {
141144
instance.render(matrixStack, vertexConsumer, light, overlay, red, green, blue, alpha);
142145
} else {
143146
CLOSED_BOX.render(matrixStack, vertexConsumer, light, overlay, red, green, blue, alpha);

src/main/java/de/rubixdev/enchantedshulkers/mixin/client/compat/SplitShulkers_ShulkerBoxBlockEntityRendererMixin.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
import com.bawnorton.mixinsquared.TargetHandler;
44
import cursedflames.splitshulkers.SplitShulkerBoxBlockEntity;
5-
import de.rubixdev.enchantedshulkers.ClientMod;
65
import de.rubixdev.enchantedshulkers.Utils;
6+
import de.rubixdev.enchantedshulkers.config.ClientConfig;
77
import me.fallenbreath.conditionalmixin.api.annotation.Condition;
88
import me.fallenbreath.conditionalmixin.api.annotation.Restriction;
99
import net.minecraft.block.entity.ShulkerBoxBlockEntity;
@@ -64,7 +64,7 @@ private VertexConsumer getVertexConsumerSplitShulkers(
6464
Function<Identifier, RenderLayer> layerFactory,
6565
ShulkerBoxBlockEntity shulkerBoxBlockEntity
6666
) {
67-
if (!ClientMod.glintWhenPlaced() || !Utils.shouldGlint(shulkerBoxBlockEntity))
67+
if (!ClientConfig.glintWhenPlaced() || !Utils.shouldGlint(shulkerBoxBlockEntity))
6868
return instance.getVertexConsumer(vertexConsumers, layerFactory);
6969
return instance.getSprite()
7070
.getTextureSpecificVertexConsumer(

src/main/kotlin/de/rubixdev/enchantedshulkers/ClientMod.kt

+12-21
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
package de.rubixdev.enchantedshulkers
22

3-
import de.rubixdev.enchantedshulkers.config.ClientConfig
3+
import de.rubixdev.enchantedshulkers.Utils.id
44
import de.rubixdev.enchantedshulkers.config.InvalidOptionValueException
55
import de.rubixdev.enchantedshulkers.config.WorldConfig
6+
import de.rubixdev.enchantedshulkers.screen.BigAugmentedScreen
7+
import de.rubixdev.enchantedshulkers.screen.ScreenHandlerTypes
68
import net.fabricmc.api.ClientModInitializer
79
import net.fabricmc.api.EnvType
810
import net.fabricmc.api.Environment
911
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents
1012
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking
11-
import net.fabricmc.loader.api.FabricLoader
13+
import net.minecraft.client.gui.screen.ingame.HandledScreens
1214
import net.minecraft.client.model.*
1315
import net.minecraft.client.render.TexturedRenderLayers
1416
import net.minecraft.client.util.SpriteIdentifier
@@ -22,10 +24,10 @@ import net.minecraft.nbt.NbtInt
2224

2325
@Environment(EnvType.CLIENT)
2426
object ClientMod : ClientModInitializer {
25-
@JvmField val CLOSED_ENDER_TEXTURE_ID = SpriteIdentifier(TexturedRenderLayers.CHEST_ATLAS_TEXTURE, Mod.id("entity/chest/closed_ender"))
27+
@JvmField val CLOSED_ENDER_TEXTURE_ID = SpriteIdentifier(TexturedRenderLayers.CHEST_ATLAS_TEXTURE, "entity/chest/closed_ender".id)
2628
@JvmField val COLORS = DyeColor.values().sortedBy { it.id }.map { it.getName() }
27-
@JvmField val CLOSED_SHULKER_TEXTURE_ID = SpriteIdentifier(TexturedRenderLayers.SHULKER_BOXES_ATLAS_TEXTURE, Mod.id("entity/shulker/closed_shulker"))
28-
@JvmField val CLOSED_COLORED_SHULKER_BOXES_TEXTURE_IDS = COLORS.map { SpriteIdentifier(TexturedRenderLayers.SHULKER_BOXES_ATLAS_TEXTURE, Mod.id("entity/shulker/closed_shulker_$it")) }
29+
@JvmField val CLOSED_SHULKER_TEXTURE_ID = SpriteIdentifier(TexturedRenderLayers.SHULKER_BOXES_ATLAS_TEXTURE, "entity/shulker/closed_shulker".id)
30+
@JvmField val CLOSED_COLORED_SHULKER_BOXES_TEXTURE_IDS = COLORS.map { SpriteIdentifier(TexturedRenderLayers.SHULKER_BOXES_ATLAS_TEXTURE, "entity/shulker/closed_shulker_$it".id) }
2931
@JvmField val CLOSED_BOX: ModelPart = let {
3032
val modelData = ModelData()
3133
val modelPartData = modelData.root
@@ -37,12 +39,10 @@ object ClientMod : ClientModInitializer {
3739
TexturedModelData.of(modelData, 64, 32).createModel()
3840
}
3941

40-
private var hasCloth = false
41-
4242
override fun onInitializeClient() {
4343
// let the server know that we have the client mod installed
4444
//#if MC >= 12001
45-
PolymerClientNetworking.setClientMetadata(Mod.HANDSHAKE_PACKET_ID, NbtInt.of(1))
45+
PolymerClientNetworking.setClientMetadata(Mod.HANDSHAKE_PACKET_ID, NbtInt.of(2))
4646
//#endif
4747

4848
// receive config updates from server
@@ -68,18 +68,9 @@ object ClientMod : ClientModInitializer {
6868
}
6969
ClientPlayConnectionEvents.DISCONNECT.register { _, _ -> WorldConfig.detachServer() }
7070

71-
if (!FabricLoader.getInstance().isModLoaded("cloth-config")) return
72-
hasCloth = true
73-
ClientConfig.init()
71+
// screens
72+
ScreenHandlerTypes.SHULKER_LIST.forEach { HandledScreens.register(it, ::BigAugmentedScreen) }
73+
ScreenHandlerTypes.GENERIC_LIST.forEach { HandledScreens.register(it, ::BigAugmentedScreen) }
74+
ScreenHandlerTypes.GENERIC_DOUBLE_MAP.values.forEach { HandledScreens.register(it, ::BigAugmentedScreen) }
7475
}
75-
76-
@JvmStatic
77-
@get:JvmName("glintWhenPlaced")
78-
val glintWhenPlaced: Boolean get() = if (!hasCloth) true else ClientConfig.inner.glintWhenPlaced
79-
@JvmStatic
80-
@get:JvmName("customModels")
81-
val customModels: Boolean get() = if (!hasCloth) true else glintWhenPlaced && ClientConfig.inner.customModels
82-
@JvmStatic
83-
@get:JvmName("refillInInventory")
84-
val refillInInventory: Boolean get() = if (!hasCloth) false else ClientConfig.inner.refillInInventory
8576
}

0 commit comments

Comments
 (0)