Created
January 10, 2022 23:48
-
-
Save Lanse505/c40f23ecd8c9c966dabd61e9e390cefc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.teamacronymcoders.essence.api.modified.rewrite.itemstack; | |
import com.teamacronymcoders.essence.api.holder.ModifierHolder; | |
import com.teamacronymcoders.essence.api.modifier.IModifier; | |
import com.teamacronymcoders.essence.api.modifier.ModifierInstance; | |
import com.teamacronymcoders.essence.common.util.helper.EssenceItemstackModifierHelpers; | |
import net.minecraft.nbt.CompoundTag; | |
import net.minecraft.world.item.ItemStack; | |
import java.util.ArrayList; | |
import java.util.List; | |
public class ItemStackModifierHolder extends ModifierHolder<ItemStack> { | |
private final ItemStack stack; | |
public ItemStackModifierHolder() { | |
super(); | |
stack = ItemStack.EMPTY; | |
} | |
public ItemStackModifierHolder(ItemStack stack) { | |
super(); | |
this.stack = stack; | |
} | |
@Override | |
public CompoundTag serializeNBT() { | |
final CompoundTag holder = super.serializeNBT(); | |
if (stack.hasTag() && stack.getTag() != null) { | |
stack.getTag().put(EssenceItemstackModifierHelpers.HOLDER, holder); | |
} else { | |
stack.getOrCreateTag().put(EssenceItemstackModifierHelpers.HOLDER, holder); | |
} | |
return holder; | |
} | |
@Override | |
public void deserializeNBT(CompoundTag tags) { | |
if (stack.getTag() != null) super.deserializeNBT(stack.getTag()); | |
} | |
@SuppressWarnings("unchecked") | |
@Override | |
public boolean addModifierInstance(boolean simulate, ItemStack object, ModifierInstance... instances) { | |
List<ModifierInstance> copy = new ArrayList<>(List.of(instances)); | |
for (ModifierInstance mi : getModifierInstances()) { | |
for (ModifierInstance addition : instances) { | |
if (mi.getModifier().get().equals(addition.getModifier().get())) { | |
copy.remove(addition); | |
mi.getModifier().get().mergeInstance(object, mi, addition); | |
} | |
} | |
} | |
if (!copy.isEmpty()) copy.forEach(instance -> getModifierInstances().add(instance)); | |
return true; | |
} | |
@SuppressWarnings("unchecked") | |
@Override | |
public boolean removeModifierInstance(boolean simulate, ItemStack object, IModifier<ItemStack>... modifiers) { | |
List<ModifierInstance> instancesToRemove = new ArrayList<>(); | |
for (ModifierInstance mi : getModifierInstances()) { | |
for (IModifier<ItemStack> remover : modifiers) { | |
if (mi.getModifier().get().equals(remover)) { | |
instancesToRemove.add(mi); | |
} | |
} | |
} | |
instancesToRemove.forEach(instance -> getModifierInstances().remove(instance)); | |
return true; | |
} | |
@SuppressWarnings("unchecked") | |
@Override | |
public boolean levelUpModifier(boolean simulate, int increase, ItemStack object, IModifier<ItemStack>... modifiers) { | |
for (ModifierInstance mi : getModifierInstances()) { | |
for (IModifier<ItemStack> addition : modifiers) { | |
if (mi.getModifier().get().equals(addition)) { | |
mi.setLevel(Math.min(mi.getLevel() + increase, mi.getModifier().get().getMaxLevel(object))); | |
} | |
} | |
} | |
return true; | |
} | |
@SuppressWarnings("unchecked") | |
@Override | |
public boolean levelUpModifier(boolean simulate, int increase, ItemStack object, ModifierInstance... modifiersWithData) { | |
for (ModifierInstance mi : getModifierInstances()) { | |
for (ModifierInstance addition : modifiersWithData) { | |
if (mi.getModifier().get().equals(addition.getModifier().get())) { | |
mi.setLevel(Math.min(mi.getLevel() + increase, mi.getModifier().get().getMaxLevel(object))); | |
} | |
} | |
} | |
return true; | |
} | |
@SuppressWarnings("unchecked") | |
@Override | |
public boolean levelDownModifier(boolean simulate, int decrease, ItemStack object, IModifier<ItemStack>... modifiers) { | |
for (ModifierInstance mi : getModifierInstances()) { | |
for (IModifier<ItemStack> addition : modifiers) { | |
if (mi.getModifier().get().equals(addition)) { | |
mi.setLevel(Math.max(mi.getLevel() - decrease, mi.getModifier().get().getMinLevel(object))); | |
} | |
} | |
} | |
return true; | |
} | |
@SuppressWarnings("unchecked") | |
@Override | |
public boolean levelDownModifier(boolean simulate, int decrease, ItemStack object, ModifierInstance... modifiersWithData) { | |
for (ModifierInstance mi : getModifierInstances()) { | |
for (ModifierInstance addition : modifiersWithData) { | |
if (mi.getModifier().get().equals(addition.getModifier().get())) { | |
mi.setLevel(Math.min(mi.getLevel() - decrease, mi.getModifier().get().getMinLevel(object))); | |
} | |
} | |
} | |
return true; | |
} | |
@Override | |
public boolean levelSetModifier(boolean simulate, int level, ItemStack object, IModifier<ItemStack>... modifiers) { | |
for (ModifierInstance mi : getModifierInstances()) { | |
for (IModifier<ItemStack> setter : modifiers) { | |
if (mi.getModifier().get().equals(setter)) { | |
mi.setLevel(Math.min(setter.getMaxLevel(object), Math.max(setter.getMinLevel(object), level))); | |
} | |
} | |
} | |
return true; | |
} | |
@SuppressWarnings("unchecked") | |
@Override | |
public boolean levelSetModifier(boolean simulate, int level, ItemStack object, ModifierInstance... modifiersWithData) { | |
for (ModifierInstance mi : getModifierInstances()) { | |
for (ModifierInstance addition : modifiersWithData) { | |
if (mi.getModifier().get().equals(addition.getModifier().get())) { | |
mi.setLevel(Math.min(addition.getModifier().get().getMaxLevel(object), Math.max(addition.getModifier().get().getMinLevel(object), level))); | |
} | |
} | |
} | |
return true; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment