Skip to content

Commit 39e1037

Browse files
committed
ichorium crown
1 parent dd52482 commit 39e1037

File tree

14 files changed

+145
-21
lines changed

14 files changed

+145
-21
lines changed

Diff for: build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ repositories {
3030
dirs("libs")
3131
}
3232
mavenCentral()
33-
33+
mavenLocal()
3434
maven ("https://maven.theillusivec4.top/")
3535
maven("https://dvs1.progwml6.com/files/maven")
3636
maven("https://maven.tterrag.com/")

Diff for: gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ archives_base_name=voidbound
1515

1616
# Dependencies
1717
fabric_api_version=0.92.2+1.20.1
18-
lodestone_version=1.6.2.3c
18+
lodestone_version=1.6.2.3d
1919
trinkets_version=3.7.0
2020
reach_entity_attributes_version=2.4.0
2121
emi_version=1.1.12+1.20.1
+96-2
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,121 @@
11
package dev.sterner.mixin;
22

33
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
4-
import com.sammy.malum.MalumMod;
4+
import com.mojang.blaze3d.platform.Window;
5+
import com.mojang.blaze3d.systems.RenderSystem;
6+
import com.mojang.blaze3d.vertex.PoseStack;
7+
import com.sammy.malum.common.components.MalumComponents;
8+
import com.sammy.malum.common.components.MalumPlayerDataComponent;
59
import com.sammy.malum.core.handlers.SoulWardHandler;
610
import dev.sterner.VoidBound;
711
import dev.sterner.registry.VoidBoundItemRegistry;
812
import net.minecraft.client.Minecraft;
13+
import net.minecraft.client.gui.GuiGraphics;
14+
import net.minecraft.client.player.LocalPlayer;
15+
import net.minecraft.client.renderer.GameRenderer;
916
import net.minecraft.resources.ResourceLocation;
17+
import net.minecraft.util.Mth;
1018
import net.minecraft.world.entity.EquipmentSlot;
19+
import net.minecraft.world.entity.ai.attributes.Attributes;
20+
import org.joml.Vector4f;
1121
import org.spongepowered.asm.mixin.Mixin;
1222
import org.spongepowered.asm.mixin.injection.At;
23+
import org.spongepowered.asm.mixin.injection.Inject;
24+
import org.spongepowered.asm.mixin.injection.Redirect;
25+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
26+
import team.lodestar.lodestone.registry.client.LodestoneShaderRegistry;
27+
import team.lodestar.lodestone.systems.rendering.VFXBuilders;
28+
import team.lodestar.lodestone.systems.rendering.shader.ExtendedShaderInstance;
29+
30+
import java.util.function.Supplier;
31+
32+
import static com.sammy.malum.core.handlers.SoulWardHandler.ClientOnly.getSoulWardTexture;
1333

1434
@Mixin(SoulWardHandler.ClientOnly.class)
1535
public class SoulWardHandlerMixin {
1636

1737
@ModifyReturnValue(method = "getSoulWardTexture", at = @At("RETURN"))
1838
private static ResourceLocation voidbound$modSoulWardTexture(ResourceLocation original){
1939
if (Minecraft.getInstance().player != null) {
20-
boolean bl = Minecraft.getInstance().player.getItemBySlot(EquipmentSlot.HEAD).is(VoidBoundItemRegistry.INSTANCE.getICHORIUM_CROWN().get());
40+
boolean bl = Minecraft.getInstance().player.getItemBySlot(EquipmentSlot.HEAD).is(VoidBoundItemRegistry.INSTANCE.getICHORIUM_CIRCLET().get());
2141
if (bl) {
2242
return VoidBound.INSTANCE.id("textures/gui/soul_ward/ichorium.png");
2343
}
2444
}
2545
return original;
2646
}
47+
/*
48+
@Inject(method = "renderSoulWard", at = @At("HEAD"), cancellable = true)
49+
private static void v(GuiGraphics guiGraphics, Window window, CallbackInfo ci){
50+
Minecraft minecraft = Minecraft.getInstance();
51+
PoseStack poseStack = guiGraphics.pose();
52+
if (!minecraft.options.hideGui) {
53+
LocalPlayer player = minecraft.player;
54+
if (!player.isCreative() && !player.isSpectator()) {
55+
SoulWardHandler soulWardHandler = ((MalumPlayerDataComponent) MalumComponents.MALUM_PLAYER_COMPONENT.get(player)).soulWardHandler;
56+
float soulWard = soulWardHandler.soulWard;
57+
if (soulWard > 0.0F) {
58+
float absorb = (float) Mth.ceil(player.getAbsorptionAmount());
59+
float maxHealth = (float)player.getAttribute(Attributes.MAX_HEALTH).getValue();
60+
float armor = (float)player.getAttribute(Attributes.ARMOR).getValue();
61+
int left = window.getGuiScaledWidth() / 2 - 91;
62+
int top = window.getGuiScaledHeight() - 59;
63+
if (armor == 0.0F) {
64+
top += 4;
65+
}
66+
67+
int healthRows = Mth.ceil((maxHealth + absorb) / 2.0F / 10.0F);
68+
int rowHeight = Math.max(10 - (healthRows - 2), 3);
69+
poseStack.pushPose();
70+
RenderSystem.setShaderTexture(0, getSoulWardTexture());
71+
RenderSystem.depthMask(true);
72+
RenderSystem.enableBlend();
73+
RenderSystem.defaultBlendFunc();
74+
//ExtendedShaderInstance shaderInstance = (ExtendedShaderInstance) LodestoneShaderRegistry.DISTORTED_TEXTURE.getInstance().get();
75+
//shaderInstance.safeGetUniform("YFrequency").set(15.0F);
76+
//shaderInstance.safeGetUniform("XFrequency").set(15.0F);
77+
//shaderInstance.safeGetUniform("Speed").set(550.0F);
78+
//shaderInstance.safeGetUniform("Intensity").set(120.0F);
79+
VFXBuilders.ScreenVFXBuilder builder = VFXBuilders.createScreen().setPosColorTexDefaultFormat().setShader(() -> {
80+
return GameRenderer.getPositionColorTexShader();
81+
});
82+
int size = 13;
83+
boolean forceDisplay = soulWard <= 1.0F;
84+
double soulWardAmount = forceDisplay ? 1.0 : Math.ceil(Math.floor((double)soulWard) / 3.0);
85+
86+
for(int i = 0; (double)i < soulWardAmount; ++i) {
87+
int row = (int)((float)i / 10.0F);
88+
int x = left + i % 10 * 8;
89+
int y = top - row * 4 + rowHeight * 2 - 15;
90+
int progress = Math.min(3, (int)soulWard - i * 3);
91+
int xTextureOffset = forceDisplay ? 31 : 1 + (3 - progress) * 15;
92+
//shaderInstance.safeGetUniform("UVCoordinates").set(new Vector4f((float)xTextureOffset / 45.0F, (float)(xTextureOffset + size) / 45.0F, 0.0F, 0.33333334F));
93+
//shaderInstance.safeGetUniform("TimeOffset").set((float)i * 150.0F);
94+
builder.setPositionWithWidth((float)(x - 2), (float)(y - 2), (float)size, (float)size).setUVWithWidth((float)xTextureOffset, 0.0F, (float)size, (float)size, 45.0F).draw(poseStack);
95+
}
96+
97+
//shaderInstance.setUniformDefaults();
98+
RenderSystem.depthMask(true);
99+
RenderSystem.disableBlend();
100+
poseStack.popPose();
101+
}
102+
}
103+
}
104+
ci.cancel();
105+
}
106+
107+
*/
108+
109+
/*
110+
111+
@Redirect(method = "renderSoulWard", at = @At(value = "INVOKE", target = "Lteam/lodestar/lodestone/systems/rendering/VFXBuilders;createScreen()Lteam/lodestar/lodestone/systems/rendering/VFXBuilders$ScreenVFXBuilder;"))
112+
private static VFXBuilders.ScreenVFXBuilder voidbound$modSoulWardScreen(){
113+
114+
return VFXBuilders.createScreen().setPosColorTexDefaultFormat().setShader(() -> {
115+
116+
return GameRenderer.getPositionTexShader();
117+
});
118+
}
119+
120+
*/
27121
}

Diff for: src/main/kotlin/dev/sterner/client/screen/ItemAbilityScreen.kt

+29-5
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@ import dev.sterner.api.item.ItemAbility
66
import dev.sterner.api.util.VoidBoundItemUtils
77
import dev.sterner.networking.AbilityUpdatePacket
88
import dev.sterner.registry.VoidBoundComponentRegistry
9+
import dev.sterner.registry.VoidBoundItemRegistry
910
import dev.sterner.registry.VoidBoundPacketRegistry
1011
import net.minecraft.client.Minecraft
1112
import net.minecraft.client.gui.GuiGraphics
1213
import net.minecraft.client.gui.screens.Screen
1314
import net.minecraft.network.chat.Component
1415
import net.minecraft.world.item.ItemStack
1516

16-
class ItemAbilityScreen(stack: ItemStack) : Screen(Component.literal("Ability Selection")) {
17+
class ItemAbilityScreen(var stack: ItemStack) : Screen(Component.literal("Ability Selection")) {
1718

1819
var focus: Boolean = false
1920
private var yOffset = 0f
@@ -81,19 +82,19 @@ class ItemAbilityScreen(stack: ItemStack) : Screen(Component.literal("Ability Se
8182
gray,
8283
x - 15,
8384
y,
84-
0f,
85+
0f,
8586
0f,
8687
w,
8788
h,
8889
256,
89-
256
90+
256
9091
)
9192

9293
val abilityWidth = 50 // Width of one ability + some space
9394
val totalWidth = abilities!!.size * abilityWidth
94-
9595
val startX = (mainWindow.guiScaledWidth - totalWidth) / 2
9696

97+
// Render the abilities
9798
for ((index, ability) in abilities!!.withIndex()) { // Loop through the Set directly
9899
RenderSystem.enableBlend()
99100
matrixStack.pushPose()
@@ -125,14 +126,37 @@ class ItemAbilityScreen(stack: ItemStack) : Screen(Component.literal("Ability Se
125126

126127
matrixStack.popPose()
127128
}
129+
if (focus) {
130+
// Render the item name in the middle of the screen
131+
val itemName = stack.hoverName // Get the item's display name from the ItemStack
132+
val itemNameX = mainWindow.guiScaledWidth / 2
133+
val itemNameY = y - 10 // Adjust the Y position above the abilities
134+
135+
guiGraphics.drawCenteredString(
136+
minecraft!!.font,
137+
itemName, // Use the item name here
138+
itemNameX,
139+
itemNameY,
140+
0xFFFFFF // White color
141+
)
142+
}
143+
144+
128145
RenderSystem.setShaderColor(1f, 1f, 1f, 1f)
129146
RenderSystem.disableBlend()
130147
matrixStack.popPose()
131148
}
132149

133150
override fun onClose() {
134151
if (Minecraft.getInstance().player != null && abilities!!.elementAtOrNull(selection) != null) {
135-
VoidBoundPacketRegistry.VOID_BOUND_CHANNEL.sendToServer(AbilityUpdatePacket(Minecraft.getInstance().player!!.uuid, abilities!!.elementAt(selection)))
152+
153+
VoidBoundPacketRegistry.VOID_BOUND_CHANNEL.sendToServer(
154+
AbilityUpdatePacket(
155+
Minecraft.getInstance().player!!.uuid,
156+
abilities!!.elementAt(selection),
157+
stack.`is`(VoidBoundItemRegistry.ICHORIUM_CIRCLET.get())
158+
)
159+
)
136160
}
137161
}
138162
}

Diff for: src/main/kotlin/dev/sterner/common/ItemAbilityHandler.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package dev.sterner.common
22

3-
import dev.sterner.VoidBound
43
import dev.sterner.api.item.ItemAbility
54
import dev.sterner.client.screen.ItemAbilityScreen
5+
import dev.sterner.registry.VoidBoundItemRegistry
66
import dev.sterner.registry.VoidBoundTags
77
import net.minecraft.client.Minecraft
88
import net.minecraft.client.gui.GuiGraphics
99
import net.minecraft.client.player.LocalPlayer
10+
import net.minecraft.world.entity.EquipmentSlot
1011
import net.minecraft.world.item.ItemStack
1112
import net.minecraft.world.level.GameType
1213
import org.lwjgl.glfw.GLFW
@@ -43,6 +44,8 @@ class ItemAbilityHandler {
4344
// Only create a new screen if the item is not null
4445
selectionScreen = if (stack != null && stack.`is`(VoidBoundTags.ITEM_WITH_ABILITY)) {
4546
ItemAbilityScreen(stack)
47+
} else if (player.getItemBySlot(EquipmentSlot.HEAD).`is`(VoidBoundItemRegistry.ICHORIUM_CIRCLET.get())) {
48+
ItemAbilityScreen(player.getItemBySlot(EquipmentSlot.HEAD))
4649
} else {
4750
null
4851
}

Diff for: src/main/kotlin/dev/sterner/common/item/equipment/ichor/IchoriumCrown.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class IchoriumCrown(properties: Properties) : MalumArmorItem(
2121
AttributeModifier(
2222
UUID.fromString("745DB17C-C613-495F-8C9F-6020A9A58B5B"),
2323
"Soul Ward Recovery Speed",
24-
3.0,
24+
5.0,
2525
AttributeModifier.Operation.ADDITION
2626
)
2727
)
@@ -30,8 +30,8 @@ class IchoriumCrown(properties: Properties) : MalumArmorItem(
3030
AttributeModifier(
3131
UUID.fromString("545DB17C-C623-495F-8C9F-6010A9A58B5B"),
3232
"Speed",
33-
6.0,
34-
AttributeModifier.Operation.MULTIPLY_BASE
33+
8.0,
34+
AttributeModifier.Operation.ADDITION
3535
)
3636
)
3737
return attributes

Diff for: src/main/kotlin/dev/sterner/networking/AbilityUpdatePacket.kt

+5-3
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,19 @@ import net.minecraft.network.FriendlyByteBuf
88
import net.minecraft.server.MinecraftServer
99
import net.minecraft.server.level.ServerPlayer
1010
import net.minecraft.server.network.ServerGamePacketListenerImpl
11+
import net.minecraft.world.entity.EquipmentSlot
1112
import team.lodestar.lodestone.systems.network.LodestoneServerPacket
1213
import java.util.UUID
1314

14-
class AbilityUpdatePacket(val uuid: UUID, val itemAbility: ItemAbility) : LodestoneServerPacket() {
15+
class AbilityUpdatePacket(val uuid: UUID, val itemAbility: ItemAbility, val helm: Boolean) : LodestoneServerPacket() {
1516

1617
override fun encode(buf: FriendlyByteBuf) {
1718
buf.writeUUID(uuid)
1819
buf.writeUtf(itemAbility.name)
20+
buf.writeBoolean(helm)
1921
}
2022

21-
constructor(buf: FriendlyByteBuf) : this(buf.readUUID(), ItemAbility.valueOf(buf.readUtf()))
23+
constructor(buf: FriendlyByteBuf) : this(buf.readUUID(), ItemAbility.valueOf(buf.readUtf()), buf.readBoolean())
2224

2325
override fun executeServer(
2426
server: MinecraftServer?,
@@ -29,7 +31,7 @@ class AbilityUpdatePacket(val uuid: UUID, val itemAbility: ItemAbility) : Lodest
2931
) {
3032
server?.execute {
3133
if (player?.uuid == uuid) {
32-
val item = player.mainHandItem
34+
val item = if (helm) player.getItemBySlot(EquipmentSlot.HEAD) else player.mainHandItem
3335
VoidBoundItemUtils.addItemAbility(item, itemAbility, true)
3436
VoidBoundItemUtils.setActiveAbility(item, itemAbility)
3537
}

Diff for: src/main/kotlin/dev/sterner/registry/VoidBoundCreativeTabRegistry.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ object VoidBoundCreativeTabRegistry {
6262
entries.accept(VoidBoundItemRegistry.TEAR_OF_CRIMSON.get())
6363
entries.accept(VoidBoundItemRegistry.TEAR_OF_ENDER.get())
6464
entries.accept(VoidBoundItemRegistry.ICHOR.get())
65-
entries.accept(VoidBoundItemRegistry.ICHORIUM_CROWN.get())
65+
entries.accept(VoidBoundItemRegistry.ICHORIUM_CIRCLET.get())
6666
entries.accept(VoidBoundItemRegistry.ICHORIUM_SCYTHE.get())
6767
entries.accept(VoidBoundItemRegistry.ICHORIUM_VORPAL.get())
6868
entries.accept(VoidBoundItemRegistry.ICHORIUM_TERRAFORMER.get())

Diff for: src/main/kotlin/dev/sterner/registry/VoidBoundItemRegistry.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ object VoidBoundItemRegistry {
200200
IchoriumEdge(VoidBoundTiers.ICHORIUM, -2.5f, 2.1f, ichorProptery)
201201
}
202202

203-
val ICHORIUM_CROWN: RegistryObject<IchoriumCrown> = ITEMS.register("ichorium_crown") {
203+
val ICHORIUM_CIRCLET: RegistryObject<IchoriumCrown> = ITEMS.register("ichorium_circlet") {
204204
IchoriumCrown(Item.Properties())
205205
}
206206

Diff for: src/main/resources/assets/voidbound/lang/en_us.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@
3838
"item.voidbound.tear_of_brimstone": "Tear of Brimstone",
3939
"item.voidbound.ichorium_vorpal": "Ichorium Vorpal",
4040
"item.voidbound.ichorium_terraformer": "Ichorium Terraformer",
41-
"item.voidbound.ichorium_scythe": "Ichorium Scythe",
41+
"item.voidbound.ichorium_scythe": "Ichorium Edge",
42+
"item.voidbound.ichorium_circlet": "Ichorium Circlet",
4243
"block.voidbound.tear_of_ender": "Tear of Ender",
4344
"block.voidbound.tear_of_brimstone": "Tear of Brimstone",
4445
"item.voidbound.hallowed_gold_capped_runewood_wand": "Hallowed Gold Capped Runewood Wand",
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"parent": "item/generated",
33
"textures": {
4-
"layer0": "voidbound:item/ichorium_crown"
4+
"layer0": "voidbound:item/ichorium_circlet"
55
}
66
}
Loading
Loading

Diff for: src/main/resources/data/voidbound/tags/items/item_with_ability.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44
"voidbound:ichorium_vorpal",
55
"voidbound:ichorium_terraformer",
66
"voidbound:ichorium_scythe",
7-
"voidbound:ichorium_crown"
7+
"voidbound:ichorium_circlet"
88
]
99
}

0 commit comments

Comments
 (0)