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
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ public static Modifier getModifier(String name) {
public static Modifier LIVING = register(new Healing());
public static Modifier HUNTER = register(new Hunter());
public static Modifier CHAOTIC = register(new Chaotic());
public static Modifier LIGHTWEIGHT = register(new Lightweight());

public static Modifier BUSTED = register(new Busted());
public static Modifier FIERCE = register(new Fierce());
Expand All @@ -105,7 +106,7 @@ public static Modifier getModifier(String name) {
public static final Set<Modifier> HURTERS = Set.of(CRITICAL, CHARGING, FLAMING, COMBO, DRAINING, POISONOUS,
WITHERING, BLINDING, BEZERK, NEMESIS, SOULBOUND, SCORCHED, FROZEN, OVERGROWN, FIERCE, FEASTING, EXECUTIONER, CROWD_PLEASER, PUMMELING, HAILEYS_WRATH, MUNCHIES, CHAOTIC, FRAGILE, CLUNKY, EARLY_BIRD);
public static final Set<Modifier> HOLDERS = Set.of(HASTY, ABSORBTION, FILLING, RAINY, ORE_FINDER, SPAWNER_FINDER,
LIVING, REGENERATING, RESISTANT, FIRE_RESISTANT, AQUATIC, HUNTER, FEASTING, NATURALIST, CLUNKY);
LIVING, REGENERATING, RESISTANT, FIRE_RESISTANT, AQUATIC, HUNTER, FEASTING, NATURALIST, CLUNKY, LIGHTWEIGHT);

public static final Set<Modifier> STATS = Set.of(BUSTED, FIERCE, MUNCHIES, CHAOTIC, FRAGILE);

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

import dev.marston.randomloot.loot.LootItem.ToolType;
import dev.marston.randomloot.loot.LootUtils;
import dev.marston.randomloot.loot.modifiers.HoldModifier;
import dev.marston.randomloot.loot.modifiers.Modifier;
import net.minecraft.ChatFormatting;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;

import java.util.List;

public class Lightweight implements HoldModifier {

private String name;
private int power;
private final static String POWER = "power";
private final static String LEVEL = "trait_level";

private int level = 0;

public Lightweight(String name, int power, int level) {
this.name = name;
this.power = power;
this.level = level;
}

public Lightweight() {
this.name = "Lightweight";
this.power = 0;
this.level = 0;
}

public Modifier clone() {
return new Lightweight();
}

@Override
public CompoundTag toNBT() {
CompoundTag tag = new CompoundTag();
tag.putString(NAME, name);
tag.putInt(POWER, power);
tag.putInt(LEVEL, level);
return tag;
}

@Override
public Modifier fromNBT(CompoundTag tag) {
return new Lightweight(tag.getStringOr(NAME, "Lightweight"), tag.getIntOr(POWER, 0), tag.getIntOr(LEVEL, 0));
}

@Override
public String name() {
if (this.level == 0) {
return this.name;
}
return this.name + " " + LootUtils.roman(this.level + 1);
}

@Override
public String tagName() {
return "lightweight";
}

@Override
public String color() {
return ChatFormatting.AQUA.getName();
}

@Override
public String description() {
return "While holding the tool, gain Speed " + LootUtils.roman(this.level + 1) + " effect.";
}

@Override
public void writeToLore(List<Component> list, boolean shift) {
MutableComponent comp = Modifier.makeComp(this.name(), this.color());
list.add(comp);
}

@Override
public boolean forTool(ToolType type) {
return true;
}

@Override
public void hold(ItemStack stack, Level level, Entity holder) {
MobEffectInstance speed = new MobEffectInstance(MobEffects.SPEED, 2, power, true, false);

if (holder instanceof LivingEntity le) {
le.addEffect(speed);
}
}

public boolean canLevel() {
return level < 2;
}

public void levelUp() {
this.level++;
this.power++;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"type": "randomloot:trait_change",
"item": {
"count": 1,
"id": "minecraft:rabbit_hide"
},
"trait": "lightweight"
}
Loading