Skip to content

Commit

Permalink
added on-hold traits
Browse files Browse the repository at this point in the history
  • Loading branch information
TheMarstonConnell committed Sep 5, 2023
1 parent 0f7e1ae commit 9a5a7a7
Show file tree
Hide file tree
Showing 13 changed files with 514 additions and 51 deletions.
107 changes: 66 additions & 41 deletions src/main/java/dev/marston/randomloot/loot/LootItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Multimap;

import dev.marston.randomloot.RandomLootMod;
import dev.marston.randomloot.loot.modifiers.BlockBreakModifier;
import dev.marston.randomloot.loot.modifiers.EntityHurtModifier;
import dev.marston.randomloot.loot.modifiers.HoldModifier;
import dev.marston.randomloot.loot.modifiers.Modifier;
import dev.marston.randomloot.loot.modifiers.UseModifier;
import net.minecraft.ChatFormatting;
Expand All @@ -24,6 +26,11 @@
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.TagKey;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.effect.MobEffect;
import net.minecraft.world.effect.MobEffectCategory;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.ai.attributes.Attribute;
Expand Down Expand Up @@ -69,15 +76,15 @@ public static float getDigSpeed(ItemStack stack, ToolType type) {
if (type.equals(ToolType.SWORD)) {
return 1.0f;
}

float speed = (LootUtils.getStats(stack) / 2.0f) + 6.0f;
return speed;
}

public static float getAttackSpeed(ItemStack stack, ToolType type) {

float speed = 0.0f;

switch (type) {
case PICKAXE:
speed = -2.8F;
Expand All @@ -92,15 +99,14 @@ public static float getAttackSpeed(ItemStack stack, ToolType type) {
speed = -2.4F;
break;
}



return speed;
}

public static float getAttackDamage(ItemStack stack, ToolType type) {

float damage = (LootUtils.getStats(stack)) + 1.0f;

switch (type) {
case PICKAXE:
damage = damage * 0.5f;
Expand All @@ -112,8 +118,7 @@ public static float getAttackDamage(ItemStack stack, ToolType type) {
damage = damage * 0.6f;
break;
}



return damage;
}

Expand Down Expand Up @@ -157,36 +162,37 @@ public boolean isCorrectToolForDrops(ItemStack stack, BlockState state) {
return state.is(blocks)
&& net.minecraftforge.common.TierSortingRegistry.isCorrectTierForDrops(Tiers.DIAMOND, state);
}

@Override
public Multimap<Attribute, AttributeModifier> getAttributeModifiers(EquipmentSlot slot, ItemStack stack)
{

public Multimap<Attribute, AttributeModifier> getAttributeModifiers(EquipmentSlot slot, ItemStack stack) {

if (!slot.equals(EquipmentSlot.MAINHAND)) {
return super.getAttributeModifiers(slot, stack);
}

ToolType tt = LootUtils.getToolType(stack);

float damage = getAttackDamage(stack, tt);

ImmutableMultimap.Builder<Attribute, AttributeModifier> builder = ImmutableMultimap.builder();
builder.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Weapon modifier", (double)damage, AttributeModifier.Operation.ADDITION));
builder.put(Attributes.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED_UUID, "Weapon modifier", (double)getAttackSpeed(stack, tt), AttributeModifier.Operation.ADDITION));

return builder.build();
}

builder.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Weapon modifier",
(double) damage, AttributeModifier.Operation.ADDITION));
builder.put(Attributes.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED_UUID, "Weapon modifier",
(double) getAttackSpeed(stack, tt), AttributeModifier.Operation.ADDITION));

return builder.build();
}

@Override
public boolean hurtEnemy(ItemStack itemstack, LivingEntity p_43279_, LivingEntity p_43280_) {

ToolType type = LootUtils.getToolType(itemstack);

if (type == ToolType.AXE || type == ToolType.SWORD) {
LootUtils.addXp(itemstack, 1);

}

List<Modifier> mods = LootUtils.getModifiers(itemstack);

for (Modifier mod : mods) {
Expand All @@ -196,12 +202,12 @@ public boolean hurtEnemy(ItemStack itemstack, LivingEntity p_43279_, LivingEntit
ehm.hurtEnemy(itemstack, p_43279_, p_43280_);
}
}

itemstack.hurtAndBreak(1, p_43280_, (p_43296_) -> {
p_43296_.broadcastBreakEvent(EquipmentSlot.MAINHAND);
});
return true;
}
p_43296_.broadcastBreakEvent(EquipmentSlot.MAINHAND);
});
return true;
}

@Override
public boolean mineBlock(ItemStack stack, Level level, BlockState blockState, BlockPos pos, LivingEntity player) {
Expand Down Expand Up @@ -237,14 +243,13 @@ public boolean onBlockStartBreak(ItemStack itemstack, BlockPos pos, Player playe

return super.onBlockStartBreak(itemstack, pos, player);
}

@Override
public int getMaxDamage(ItemStack stack)
{
public int getMaxDamage(ItemStack stack) {
float stats = (LootUtils.getStats(stack) + 10.0f) * 80.0f;
return (int) stats;
}

return (int) stats;
}

@Override
public InteractionResult useOn(UseOnContext ctx) {
Expand Down Expand Up @@ -282,7 +287,7 @@ private void newLine(List<Component> tipList) {
public void appendHoverText(ItemStack item, @Nullable Level level, List<Component> tipList, TooltipFlag flag) {

boolean show = Screen.hasShiftDown();

boolean showDescription = Screen.hasControlDown();

ToolType tt = LootUtils.getToolType(item);
Expand Down Expand Up @@ -315,7 +320,7 @@ public int compare(final Modifier object1, final Modifier object2) {
for (Modifier modifier : mods) {
modifier.writeToLore(tipList, show);
if (show) {
Component details = modifier.writeDetailsToLore();
Component details = modifier.writeDetailsToLore(level);

if (details != null) {
MutableComponent detailComp = makeComp(" - ", ChatFormatting.GRAY);
Expand All @@ -339,9 +344,9 @@ public int compare(final Modifier object1, final Modifier object2) {
float attackDamage = LootItem.getAttackDamage(item, tt);
tipList.add(makeComp(String.format("Damage: %.2f", attackDamage), ChatFormatting.GRAY));

}
if (!show && !showDescription){
}

if (!show && !showDescription) {
newLine(tipList);
MutableComponent comp = MutableComponent.create(ComponentContents.EMPTY);
comp.append("[Shift for more]");
Expand All @@ -355,4 +360,24 @@ public int compare(final Modifier object1, final Modifier object2) {
}
}

@Override
public void inventoryTick(ItemStack stack, Level level, Entity holder, int slot, boolean holding) {

if (holding) {

List<Modifier> mods = LootUtils.getModifiers(stack);

for (Modifier mod : mods) {

if (mod instanceof HoldModifier) {
HoldModifier hodlMod = (HoldModifier) mod;

hodlMod.hold(stack, level, holder);
}

}
}

}

}
7 changes: 5 additions & 2 deletions src/main/java/dev/marston/randomloot/loot/LootUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ public static List<Modifier> getModifiers(ItemStack item) {

ArrayList<Modifier> tags = new ArrayList<Modifier>();

CompoundTag modifiers = item.getTagElement(Modifier.MODTAG);
CompoundTag modifiers = item.getOrCreateTagElement(Modifier.MODTAG);
if (modifiers == null) {
return tags;
}
Expand All @@ -145,7 +145,10 @@ public static List<Modifier> getModifiers(ItemStack item) {
CompoundTag modTag = modifiers.getCompound(string);

Modifier finalModifier = ModifierRegistry.loadModifier(string, modTag);

if (finalModifier == null) {
continue;
}

tags.add(finalModifier);

}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package dev.marston.randomloot.loot.modifiers;

import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;

public interface HoldModifier extends Modifier{
public void hold(ItemStack stack, Level level, Entity holder);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@

import java.util.List;

import javax.annotation.Nullable;

import dev.marston.randomloot.loot.LootItem.ToolType;
import net.minecraft.ChatFormatting;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.ComponentContents;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.level.Level;



Expand Down Expand Up @@ -40,7 +43,7 @@ public static MutableComponent makeComp(Component compIn) {
static final String NAME = "name";
public String tagName();
public void writeToLore(List<Component> list, boolean shift);
public Component writeDetailsToLore();
public Component writeDetailsToLore(@Nullable Level level);
public String description();
public String name();
public String color();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
import dev.marston.randomloot.RandomLootMod;
import dev.marston.randomloot.loot.modifiers.breakers.Explode;
import dev.marston.randomloot.loot.modifiers.breakers.Learning;
import dev.marston.randomloot.loot.modifiers.holders.Hasty;
import dev.marston.randomloot.loot.modifiers.hurter.Charging;
import dev.marston.randomloot.loot.modifiers.hurter.Critical;
import dev.marston.randomloot.loot.modifiers.hurter.Fire;
import dev.marston.randomloot.loot.modifiers.users.DirtPlace;
import dev.marston.randomloot.loot.modifiers.users.TorchPlace;
Expand All @@ -18,14 +21,21 @@ public class ModifierRegistry {


public static Modifier EXPLODE = register(new Explode());
public static Modifier LEARNING = register(new Learning());

public static Modifier TORCH_PLACE = register(new TorchPlace());
public static Modifier DIRT_PLACE = register(new DirtPlace());
public static Modifier LEARNING = register(new Learning());

public static Modifier FLAMING = register(new Fire());
public static Modifier CRITICAL = register(new Critical());
public static Modifier CHARGING = register(new Charging());

public static Modifier HASTY = register(new Hasty());

public static final Set<Modifier> BREAKERS = Set.of(EXPLODE, LEARNING);
public static final Set<Modifier> USERS = Set.of(TORCH_PLACE, DIRT_PLACE);
public static final Set<Modifier> HURTERS = Set.of(FLAMING);
public static final Set<Modifier> HURTERS = Set.of(CRITICAL, CHARGING, FLAMING);
public static final Set<Modifier> HOLDERS = Set.of(HASTY);

public static Modifier register(Modifier modifier) {

Expand All @@ -43,6 +53,9 @@ public static Modifier register(Modifier modifier) {

public static Modifier loadModifier(String name, CompoundTag tag) {
Modifier m = Modifiers.get(name);
if (m == null) {
return null;
}

return m.fromNBT(tag);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import java.util.List;

import javax.annotation.Nullable;

import dev.marston.randomloot.loot.LootUtils;
import dev.marston.randomloot.loot.LootItem.ToolType;
import dev.marston.randomloot.loot.modifiers.BlockBreakModifier;
Expand Down Expand Up @@ -95,7 +97,7 @@ public void writeToLore(List<Component> list, boolean shift) {


@Override
public Component writeDetailsToLore() {
public Component writeDetailsToLore(@Nullable Level level) {

return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import java.util.List;

import javax.annotation.Nullable;

import dev.marston.randomloot.loot.LootUtils;
import dev.marston.randomloot.loot.LootItem.ToolType;
import dev.marston.randomloot.loot.modifiers.BlockBreakModifier;
Expand Down Expand Up @@ -105,7 +107,7 @@ public void writeToLore(List<Component> list, boolean shift) {
}

@Override
public Component writeDetailsToLore() {
public Component writeDetailsToLore(@Nullable Level level) {

float amt = ((float) count) / ((float) max) * 100;
String perc = String.format("%.0f%% Learned", amt);
Expand Down
Loading

0 comments on commit 9a5a7a7

Please sign in to comment.