Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -138,9 +138,9 @@ dependencies {
// apple skin
implementation fg.deobf("curse.maven:appleskin-248787:4605078")
// apotheosis
implementation fg.deobf("curse.maven:apotheosis-313970:5209354")
implementation fg.deobf("curse.maven:placebo-283644:5098182")
implementation fg.deobf("curse.maven:apothic-attributes-898963:5209162")
implementation fg.deobf("curse.maven:apotheosis-313970:5486368")
implementation fg.deobf("curse.maven:placebo-283644:5414631")
implementation fg.deobf("curse.maven:apothic-attributes-898963:5340012")
// tetra
implementation fg.deobf("curse.maven:tetra-289712:4857842")
implementation fg.deobf("curse.maven:mutil-351914:4824501")
Expand All @@ -150,7 +150,7 @@ dependencies {
// item production lib
implementation fg.deobf("curse.maven:item-production-lib-950401:5097458")
// apothic curios
implementation fg.deobf("curse.maven:apothic-curios-950712:4966964")
implementation fg.deobf("curse.maven:apothic-curios-950712:5497444")
}

mixin {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,18 @@
import dev.shadowsoffire.apotheosis.Apoth;
import dev.shadowsoffire.apotheosis.Apotheosis;
import dev.shadowsoffire.apotheosis.adventure.affix.AffixHelper;
import dev.shadowsoffire.apotheosis.adventure.affix.socket.SocketHelper;
import dev.shadowsoffire.apotheosis.adventure.affix.socket.gem.Gem;
import dev.shadowsoffire.apotheosis.adventure.affix.socket.gem.GemInstance;
import dev.shadowsoffire.apotheosis.adventure.affix.socket.gem.GemItem;
import dev.shadowsoffire.apotheosis.adventure.affix.socket.gem.GemRegistry;
import dev.shadowsoffire.apotheosis.adventure.affix.socket.gem.bonus.GemBonus;
import dev.shadowsoffire.apotheosis.adventure.event.GetItemSocketsEvent;
import dev.shadowsoffire.apotheosis.adventure.loot.GemLootPoolEntry;
import dev.shadowsoffire.apotheosis.adventure.loot.LootCategory;
import dev.shadowsoffire.apotheosis.adventure.loot.LootRarity;
import dev.shadowsoffire.apotheosis.adventure.loot.RarityRegistry;
import dev.shadowsoffire.apotheosis.adventure.socket.SocketHelper;
import dev.shadowsoffire.apotheosis.adventure.socket.SocketedGems;
import dev.shadowsoffire.apotheosis.adventure.socket.gem.Gem;
import dev.shadowsoffire.apotheosis.adventure.socket.gem.GemInstance;
import dev.shadowsoffire.apotheosis.adventure.socket.gem.GemItem;
import dev.shadowsoffire.apotheosis.adventure.socket.gem.GemRegistry;
import dev.shadowsoffire.apotheosis.adventure.socket.gem.bonus.GemBonus;
import dev.shadowsoffire.placebo.reload.DynamicHolder;
import java.util.*;
import java.util.function.Consumer;
Expand All @@ -45,44 +46,50 @@ public void register() {
forgeEventBus.addListener(this::addItemSockets);
}

public List<ItemStack> getGems(ItemStack stack, int sockets) {
if (sockets == 0 || stack.isEmpty()) return Collections.emptyList();
List<ItemStack> gems = NonNullList.withSize(sockets, ItemStack.EMPTY);
public SocketedGems getGems(ItemStack stack, int sockets) {
if (sockets == 0 || stack.isEmpty()) return SocketedGems.EMPTY;

LootCategory cat = LootCategory.forItem(stack);
if (cat.isNone()) return SocketedGems.EMPTY;
List<GemInstance> gems = NonNullList.withSize(sockets, GemInstance.EMPTY);

int i = 0;
CompoundTag afxData = stack.getTagElement(SocketHelper.AFFIX_DATA);
if (afxData != null && afxData.contains(SocketHelper.GEMS)) {
ListTag gemData = afxData.getList(SocketHelper.GEMS, Tag.TAG_COMPOUND);
for (Tag tag : gemData) {
ItemStack gemStack = ItemStack.of((CompoundTag) tag);
gemStack.setCount(1);
if (GemInstance.unsocketed(gemStack).isValidUnsocketed()) {
gems.set(i++, gemStack);
GemInstance inst = GemInstance.socketed(stack, gemStack);
if (inst.isValid()) {
gems.set(i++, inst);
}
if (i >= sockets) break;
}
}
return ImmutableList.copyOf(gems);

return new SocketedGems(ImmutableList.copyOf(gems));
}

public List<? extends ItemBonus<?>> getGemBonuses(ItemStack stack) {
List<ItemBonus<?>> list = new ArrayList<>();
for (ItemStack gemStack : SocketHelper.getGems(stack)) {
DynamicHolder<Gem> gem = GemItem.getGem(gemStack);
for (GemInstance gemInstance : SocketHelper.getGems(stack)) {
DynamicHolder<Gem> gem = gemInstance.gem();
if (!gem.isBound()) continue;
List<GemBonus> bonuses = gem.get().getBonuses();
for (GemBonus gemBonus : bonuses) {
Set<LootCategory> lootCategories = gemBonus.getGemClass().types();
if (lootCategories.stream().noneMatch(c -> c.isValid(stack))) continue;
if (gemBonus instanceof PSTGemBonus aBonus) {
list.add(aBonus.getBonus(gemStack));
list.add(aBonus.getBonus(gemInstance.gemStack()));
break;
}
}
}
return list;
}

public List<ItemStack> getGems(ItemStack stack) {
public SocketedGems getGems(ItemStack stack) {
return getGems(stack, getSockets(stack, null));
}

Expand All @@ -96,24 +103,21 @@ public int getSockets(ItemStack stack, @Nullable Player player) {
}

public boolean hasEmptySockets(ItemStack stack, Player player) {
return getGems(stack, getSockets(stack, player)).stream()
.map(GemItem::getGem)
.map(DynamicHolder::getOptional)
.anyMatch(Optional::isEmpty);
return getGems(stack, getSockets(stack, player)).gems().stream().anyMatch(g -> !g.isValid());
}

public int getFirstEmptySocket(ItemStack stack, int sockets) {
List<ItemStack> gems = getGems(stack, sockets);
SocketedGems gems = getGems(stack, sockets);
for (int socket = 0; socket < sockets; socket++) {
if (GemItem.getGem(gems.get(socket)).getOptional().isEmpty()) {
if (!gems.get(socket).isValid()) {
return socket;
}
}
return 0;
}

public void createGemStack(
Consumer<ItemStack> consumer, LootContext context, ResourceLocation gemTypeId) {
Consumer<ItemStack> consumer, LootContext context, ResourceLocation gemTypeId) {
Player player = GemLootPoolEntry.findPlayer(context);
if (player == null) return;
ItemStack gemStack = getGemStack(gemTypeId);
Expand All @@ -139,7 +143,6 @@ public boolean adventureModuleEnabled() {
}

private void addItemSockets(GetItemSocketsEvent event) {
if (!Apoth.Affixes.SOCKET.isBound()) return;
ItemStack stack = event.getStack();
if (!ItemHelper.hasSockets(stack)) return;
int sockets = event.getSockets();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
import daripher.skilltree.skill.bonus.item.ItemBonus;
import daripher.skilltree.skill.bonus.item.ItemSkillBonus;
import daripher.skilltree.skill.bonus.player.AttributeBonus;
import dev.shadowsoffire.apotheosis.adventure.affix.socket.gem.GemClass;
import dev.shadowsoffire.apotheosis.adventure.affix.socket.gem.GemItem;
import dev.shadowsoffire.apotheosis.adventure.affix.socket.gem.bonus.GemBonus;
import dev.shadowsoffire.apotheosis.adventure.loot.LootRarity;
import dev.shadowsoffire.apotheosis.adventure.socket.gem.GemClass;
import dev.shadowsoffire.apotheosis.adventure.socket.gem.GemItem;
import dev.shadowsoffire.apotheosis.adventure.socket.gem.bonus.GemBonus;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
Expand Down
4 changes: 3 additions & 1 deletion src/main/java/daripher/skilltree/item/gem/GemItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
import java.util.Set;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;

import dev.shadowsoffire.apotheosis.adventure.socket.gem.GemInstance;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.model.BakedModel;
Expand Down Expand Up @@ -147,7 +149,7 @@ public static List<? extends ItemBonus<?>> getGemBonuses(ItemStack stack) {

public static List<ItemStack> getGems(ItemStack stack) {
if (SkillTreeMod.apotheosisEnabled()) {
return ApotheosisCompatibility.INSTANCE.getGems(stack);
return ApotheosisCompatibility.INSTANCE.getGems(stack).gems().stream().map(GemInstance::gemStack).toList();
}
if (!stack.hasTag()) return List.of();
return stack.getOrCreateTag().getList("gems", Tag.TAG_STRING).stream()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package daripher.skilltree.mixin.apotheosis;

import daripher.skilltree.compat.apotheosis.ApotheosisCompatibility;
import java.util.List;

import dev.shadowsoffire.apotheosis.adventure.client.AdventureModuleClient;
import dev.shadowsoffire.apotheosis.adventure.socket.SocketedGems;
import net.minecraft.client.Minecraft;
import net.minecraft.world.item.ItemStack;
import org.spongepowered.asm.mixin.Mixin;
Expand All @@ -18,8 +18,8 @@ public class AdventureModuleClientMixin {
@At(
value = "INVOKE",
target =
"Ldev/shadowsoffire/apotheosis/adventure/affix/socket/SocketHelper;getGems(Lnet/minecraft/world/item/ItemStack;)Ljava/util/List;"))
private static List<ItemStack> showPlayerSockets(ItemStack stack) {
"Ldev/shadowsoffire/apotheosis/adventure/socket/SocketHelper;getGems(Lnet/minecraft/world/item/ItemStack;)Ldev/shadowsoffire/apotheosis/adventure/socket/SocketedGems;"))
private static SocketedGems showPlayerSockets(ItemStack stack) {
Minecraft minecraft = Minecraft.getInstance();
int sockets = ApotheosisCompatibility.INSTANCE.getSockets(stack, minecraft.player);
return ApotheosisCompatibility.INSTANCE.getGems(stack, sockets);
Expand All @@ -31,7 +31,7 @@ private static List<ItemStack> showPlayerSockets(ItemStack stack) {
@At(
value = "INVOKE",
target =
"Ldev/shadowsoffire/apotheosis/adventure/affix/socket/SocketHelper;getSockets(Lnet/minecraft/world/item/ItemStack;)I"))
"Ldev/shadowsoffire/apotheosis/adventure/socket/SocketHelper;getSockets(Lnet/minecraft/world/item/ItemStack;)I"))
private static int addPlayerSockets(ItemStack stack) {
return ApotheosisCompatibility.INSTANCE.getSockets(stack, Minecraft.getInstance().player);
}
Expand All @@ -42,7 +42,7 @@ private static int addPlayerSockets(ItemStack stack) {
@At(
value = "INVOKE",
target =
"Ldev/shadowsoffire/apotheosis/adventure/affix/socket/SocketHelper;getSockets(Lnet/minecraft/world/item/ItemStack;)I"))
"Ldev/shadowsoffire/apotheosis/adventure/socket/SocketHelper;getSockets(Lnet/minecraft/world/item/ItemStack;)I"))
private static int addPlayerSockets2(ItemStack stack) {
return ApotheosisCompatibility.INSTANCE.getSockets(stack, Minecraft.getInstance().player);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package daripher.skilltree.mixin.apotheosis;

import dev.shadowsoffire.apotheosis.adventure.affix.socket.gem.bonus.AttributeBonus;
import dev.shadowsoffire.apotheosis.adventure.loot.LootRarity;
import dev.shadowsoffire.apotheosis.adventure.socket.gem.bonus.AttributeBonus;
import dev.shadowsoffire.placebo.util.StepFunction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.item.ItemStack;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import java.util.Map;

import dev.shadowsoffire.apotheosis.adventure.affix.socket.gem.bonus.EnchantmentBonus;
import dev.shadowsoffire.apotheosis.adventure.socket.gem.bonus.EnchantmentBonus;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.item.ItemStack;
import org.spongepowered.asm.mixin.Mixin;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@
import daripher.skilltree.compat.apotheosis.ApotheosisCompatibility;
import daripher.skilltree.container.ContainerHelper;
import daripher.skilltree.entity.player.PlayerHelper;
import dev.shadowsoffire.apotheosis.adventure.affix.socket.SocketHelper;
import dev.shadowsoffire.apotheosis.adventure.affix.socket.SocketingRecipe;
import java.util.List;

import dev.shadowsoffire.apotheosis.adventure.socket.SocketHelper;
import dev.shadowsoffire.apotheosis.adventure.socket.SocketedGems;
import dev.shadowsoffire.apotheosis.adventure.socket.SocketingRecipe;
import dev.shadowsoffire.apotheosis.adventure.socket.gem.GemInstance;
import net.minecraft.world.Container;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
Expand All @@ -22,7 +25,7 @@ public class SocketingRecipeMixin {
@At(
value = "INVOKE",
target =
"Ldev/shadowsoffire/apotheosis/adventure/affix/socket/SocketHelper;hasEmptySockets(Lnet/minecraft/world/item/ItemStack;)Z"))
"Ldev/shadowsoffire/apotheosis/adventure/socket/SocketHelper;hasEmptySockets(Lnet/minecraft/world/item/ItemStack;)Z"))
private boolean checkPlayerSockets(ItemStack stack, Container container, Level level) {
Player player = ContainerHelper.getViewingPlayer(container);
if (player == null) return SocketHelper.hasEmptySockets(stack);
Expand All @@ -40,7 +43,7 @@ private Object applyGemPower(List<Object> gems, int index, Object gem, Container
if (player == null) return gems.set(index, gem);
ItemStack result = container.getItem(1);
float power = PlayerHelper.getGemPower(player, result);
((ItemStack) gem).getOrCreateTag().putFloat("gem_power", power);
((GemInstance) gem).gemStack().getOrCreateTag().putFloat("gem_power", power);
return gems.set(index, gem);
}

Expand All @@ -50,7 +53,7 @@ private Object applyGemPower(List<Object> gems, int index, Object gem, Container
@At(
value = "INVOKE",
target =
"Ldev/shadowsoffire/apotheosis/adventure/affix/socket/SocketHelper;getFirstEmptySocket(Lnet/minecraft/world/item/ItemStack;)I"))
"Ldev/shadowsoffire/apotheosis/adventure/socket/SocketHelper;getFirstEmptySocket(Lnet/minecraft/world/item/ItemStack;)I"))
private int applyPlayerSockets(ItemStack stack, Container container) {
Player player = ContainerHelper.getViewingPlayer(container);
if (player == null) return SocketHelper.getFirstEmptySocket(stack);
Expand All @@ -64,8 +67,8 @@ private int applyPlayerSockets(ItemStack stack, Container container) {
@At(
value = "INVOKE",
target =
"Ldev/shadowsoffire/apotheosis/adventure/affix/socket/SocketHelper;getGems(Lnet/minecraft/world/item/ItemStack;)Ljava/util/List;"))
private List<ItemStack> applyPlayerSockets2(ItemStack stack, Container container) {
"Ldev/shadowsoffire/apotheosis/adventure/socket/SocketHelper;getGems(Lnet/minecraft/world/item/ItemStack;)Ldev/shadowsoffire/apotheosis/adventure/socket/SocketedGems;"))
private SocketedGems applyPlayerSockets2(ItemStack stack, Container container) {
Player player = ContainerHelper.getViewingPlayer(container);
if (player == null) return SocketHelper.getGems(stack);
int sockets = ApotheosisCompatibility.INSTANCE.getSockets(stack, player);
Expand Down