Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
e4d017e
migrate health talisman to inventory ticker
OhmV-IR Oct 7, 2025
034df8e
try fix bug
OhmV-IR Oct 8, 2025
4a8abdf
actually fix
OhmV-IR Oct 8, 2025
27c763f
use weak to not leak mem
OhmV-IR Oct 8, 2025
4aab043
generify talisman code
OhmV-IR Oct 9, 2025
63ddf2c
fix name scheme of methods
OhmV-IR Oct 9, 2025
bbb0283
add hunger talisman
OhmV-IR Oct 11, 2025
961ae83
hunger talisman
OhmV-IR Oct 13, 2025
1d9d964
pr comments
OhmV-IR Oct 13, 2025
f9e0881
adapt to changes in inv ticker
OhmV-IR Oct 13, 2025
f69cbb4
Merge branch 'master' into generify-talisman-code
OhmV-IR Oct 13, 2025
92b5c8f
Merge branch 'generify-talisman-code' into add-talismans
OhmV-IR Oct 13, 2025
0caa2cd
add research
OhmV-IR Oct 13, 2025
707295a
fix compile
OhmV-IR Oct 13, 2025
695e496
surely this time
OhmV-IR Oct 13, 2025
9a95fdd
make talisman tick interval configurable
OhmV-IR Oct 13, 2025
0caaa8f
stop using weak hash map where it's not needed
OhmV-IR Oct 13, 2025
deb19b0
stop using weak hash map where it's not needed
OhmV-IR Oct 13, 2025
daade82
farmer talisman
OhmV-IR Oct 14, 2025
a714c50
bartering talisman (not tested)
OhmV-IR Oct 14, 2025
ecc1425
water breathing talisman (also not tested yet)
OhmV-IR Oct 14, 2025
7720c6d
fix bug and balance water breathing talisman
OhmV-IR Oct 14, 2025
4cb746d
fixup bartering talisman
OhmV-IR Oct 14, 2025
75cf366
add luck talisman
OhmV-IR Oct 15, 2025
2f08666
generify attribute talismans
OhmV-IR Oct 15, 2025
71e39be
breeding talisman add
OhmV-IR Oct 15, 2025
792c09a
Merge branch 'master' into generify-talisman-code
OhmV-IR Oct 28, 2025
73e481f
Merge branch 'generify-talisman-code' into add-talismans
OhmV-IR Oct 28, 2025
76bea7e
cleanup
OhmV-IR Oct 28, 2025
1863a08
jdoc
OhmV-IR Oct 28, 2025
acd0edd
Merge branch 'generify-talisman-code' into add-talismans
OhmV-IR Oct 28, 2025
5ad6d82
enchanting talisman
OhmV-IR Nov 3, 2025
c3088e2
whoopsie
OhmV-IR Nov 3, 2025
595e62f
fix placeholders
OhmV-IR Nov 3, 2025
e93ab46
mv decimal place
OhmV-IR Nov 3, 2025
63b8c14
Merge branch 'master' into generify-talisman-code
OhmV-IR Nov 3, 2025
9286712
Merge branch 'generify-talisman-code' into add-talismans
OhmV-IR Nov 3, 2025
53838d8
hunting talisman
OhmV-IR Nov 3, 2025
e67b0c5
finish farmer talisman
OhmV-IR Nov 9, 2025
b975bd6
adjust langfiles and names
OhmV-IR Nov 9, 2025
3c6f7e7
thy recipes
OhmV-IR Nov 10, 2025
fb475b5
mv talisman class to talismans/base
OhmV-IR Nov 10, 2025
e799ac9
refactorrrr
OhmV-IR Nov 10, 2025
634d1af
some pr comments
OhmV-IR Nov 14, 2025
a352843
Update src/main/resources/lang/en.yml
OhmV-IR Nov 14, 2025
3005045
camelcase pdc talisman
OhmV-IR Nov 14, 2025
9c2e1b7
Update src/main/java/io/github/pylonmc/pylon/base/content/talismans/E…
OhmV-IR Nov 14, 2025
0cfda02
Merge branch 'add-talismans' of https://github.com/pylonmc/pylon-base…
OhmV-IR Nov 14, 2025
35d7f1b
fix seggan's bad code smh
OhmV-IR Nov 14, 2025
96420f2
add category and change material types
OhmV-IR Nov 19, 2025
5c1605b
add <white> tag to water breathing talismans
OhmV-IR Nov 19, 2025
75d91ff
same material for all health talismans
OhmV-IR Nov 19, 2025
db57307
balancing and langfile fixes
OhmV-IR Nov 19, 2025
7b5e0fe
avoid percent floating point error in lore
OhmV-IR Nov 19, 2025
1569dfa
Merge branch 'master' into add-talismans
OhmV-IR Nov 19, 2025
751326d
omg im dumb
OhmV-IR Nov 19, 2025
7d89daa
fix build
OhmV-IR Nov 19, 2025
da47d9f
Merge branch 'master' into add-talismans
OhmV-IR Jan 1, 2026
df78289
fix enchanting talisman
OhmV-IR Jan 1, 2026
84a1716
fix hunger talisman and mega nerf it
OhmV-IR Jan 1, 2026
14fcdf4
new NamespacedKey(PylonBase.getInstance() -> BaseUtils.baseKey()
OhmV-IR Jan 4, 2026
a5b3601
hunger talisman clay ball -> gapple
OhmV-IR Jan 4, 2026
c826a88
talismans after combat in guide
OhmV-IR Jan 4, 2026
4571769
more comments on etable class
OhmV-IR Jan 4, 2026
1af1830
langfile changes
OhmV-IR Jan 4, 2026
22a9f32
change luck talisman text
OhmV-IR Jan 4, 2026
ae68f8b
add langfile key for talisman guide page
OhmV-IR Jan 4, 2026
0d87cf7
yeet pdc talisman class
OhmV-IR Jan 4, 2026
b1fe579
write a comment for the talisman tick interval config
OhmV-IR Jan 4, 2026
9270f29
reword breeding talisman
OhmV-IR Jan 4, 2026
7e02fff
use success rate conv
OhmV-IR Jan 4, 2026
1e9c868
white names for enchanting talismans
OhmV-IR Jan 8, 2026
2e1b5b9
white names for hunting talismans(i swear im not racist)
OhmV-IR Jan 8, 2026
b469f47
works when inventory line b4 attrs
OhmV-IR Jan 8, 2026
a0dd7e6
Merge branch 'master' into add-talismans
LordIdra Jan 9, 2026
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
2 changes: 1 addition & 1 deletion src/main/java/io/github/pylonmc/pylon/base/BaseConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ public final class BaseConfig {

private static final Config config = new Config(PylonBase.getInstance(), "config.yml");
public static final double RUNE_CHECK_RANGE = config.getOrThrow("rune-check-range", ConfigAdapter.DOUBLE);
public static final int HEALTH_TALISMAN_CHECK_INTERVAL = config.getOrThrow("health-talisman-check-interval", ConfigAdapter.INT);
public static final long DEFAULT_TALISMAN_TICK_INTERVAL = config.getOrThrow("default-talisman-tick-interval", ConfigAdapter.LONG);

private BaseConfig() {}
}
181 changes: 179 additions & 2 deletions src/main/java/io/github/pylonmc/pylon/base/BaseItems.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import io.github.pylonmc.pylon.base.content.resources.IronBloom;
import io.github.pylonmc.pylon.base.content.science.Loupe;
import io.github.pylonmc.pylon.base.content.science.ResearchPack;
import io.github.pylonmc.pylon.base.content.talismans.*;
import io.github.pylonmc.pylon.base.content.tools.*;
import io.github.pylonmc.pylon.core.config.Settings;
import io.github.pylonmc.pylon.core.config.adapter.ConfigAdapter;
Expand All @@ -42,6 +43,8 @@
import org.bukkit.inventory.recipe.CraftingBookCategory;
import org.bukkit.potion.PotionType;

import java.util.Objects;

@SuppressWarnings({"UnstableApiUsage", "OverlyComplexClass"})
public final class BaseItems {

Expand Down Expand Up @@ -798,15 +801,15 @@ private BaseItems() {
BasePages.COMBAT.addItem(HEALTH_TALISMAN_SIMPLE);
}

public static final ItemStack HEALTH_TALISMAN_ADVANCED = ItemStackBuilder.pylon(Material.AMETHYST_CLUSTER, BaseKeys.HEALTH_TALISMAN_ADVANCED)
public static final ItemStack HEALTH_TALISMAN_ADVANCED = ItemStackBuilder.pylon(Material.AMETHYST_SHARD, BaseKeys.HEALTH_TALISMAN_ADVANCED)
.set(DataComponentTypes.MAX_STACK_SIZE, 1)
.build();
static {
PylonItem.register(HealthTalisman.class, HEALTH_TALISMAN_ADVANCED);
BasePages.COMBAT.addItem(HEALTH_TALISMAN_ADVANCED);
}

public static final ItemStack HEALTH_TALISMAN_ULTIMATE = ItemStackBuilder.pylon(Material.BUDDING_AMETHYST, BaseKeys.HEALTH_TALISMAN_ULTIMATE)
public static final ItemStack HEALTH_TALISMAN_ULTIMATE = ItemStackBuilder.pylon(Material.AMETHYST_SHARD, BaseKeys.HEALTH_TALISMAN_ULTIMATE)
.set(DataComponentTypes.MAX_STACK_SIZE, 1)
.build();
static {
Expand Down Expand Up @@ -1886,6 +1889,180 @@ private BaseItems() {
BasePages.CARGO.addItem(CARGO_INSERTER);
}

public static final ItemStack HUNGER_TALISMAN_SIMPLE = ItemStackBuilder.pylon(Material.CLAY_BALL, BaseKeys.HUNGER_TALISMAN_SIMPLE)
.set(DataComponentTypes.ITEM_MODEL, Objects.requireNonNull(Material.GOLDEN_APPLE.getDefaultData(DataComponentTypes.ITEM_MODEL)))
.build();
static {
PylonItem.register(HungerTalisman.class, HUNGER_TALISMAN_SIMPLE);
BasePages.TALISMANS.addItem(HUNGER_TALISMAN_SIMPLE);
}

public static final ItemStack HUNGER_TALISMAN_ADVANCED = ItemStackBuilder.pylon(Material.CLAY_BALL, BaseKeys.HUNGER_TALISMAN_ADVANCED)
.set(DataComponentTypes.ITEM_MODEL, Objects.requireNonNull(Material.GOLDEN_APPLE.getDefaultData(DataComponentTypes.ITEM_MODEL)))
.build();
static {
PylonItem.register(HungerTalisman.class, HUNGER_TALISMAN_ADVANCED);
BasePages.TALISMANS.addItem(HUNGER_TALISMAN_ADVANCED);
}

public static final ItemStack HUNGER_TALISMAN_ULTIMATE = ItemStackBuilder.pylon(Material.CLAY_BALL, BaseKeys.HUNGER_TALISMAN_ULTIMATE)
.set(DataComponentTypes.ITEM_MODEL, Objects.requireNonNull(Material.GOLDEN_APPLE.getDefaultData(DataComponentTypes.ITEM_MODEL)))
.build();
static {
PylonItem.register(HungerTalisman.class, HUNGER_TALISMAN_ULTIMATE);
BasePages.TALISMANS.addItem(HUNGER_TALISMAN_ULTIMATE);
}

public static final ItemStack FARMER_TALISMAN_SIMPLE = ItemStackBuilder.pylon(Material.BOWL, BaseKeys.FARMER_TALISMAN_SIMPLE)
.build();
static {
PylonItem.register(FarmerTalisman.class, FARMER_TALISMAN_SIMPLE);
BasePages.TALISMANS.addItem(FARMER_TALISMAN_SIMPLE);
}

public static final ItemStack FARMER_TALISMAN_ADVANCED = ItemStackBuilder.pylon(Material.BOWL, BaseKeys.FARMER_TALISMAN_ADVANCED)
.build();
static {
PylonItem.register(FarmerTalisman.class, FARMER_TALISMAN_ADVANCED);
BasePages.TALISMANS.addItem(FARMER_TALISMAN_ADVANCED);
}

public static final ItemStack FARMER_TALISMAN_ULTIMATE = ItemStackBuilder.pylon(Material.BOWL, BaseKeys.FARMER_TALISMAN_ULTIMATE)
.build();
static {
PylonItem.register(FarmerTalisman.class, FARMER_TALISMAN_ULTIMATE);
BasePages.TALISMANS.addItem(FARMER_TALISMAN_ULTIMATE);
}

public static final ItemStack BARTERING_TALISMAN_SIMPLE = ItemStackBuilder.pylon(Material.GOLD_INGOT, BaseKeys.BARTERING_TALISMAN_SIMPLE)
.build();
static {
PylonItem.register(BarteringTalisman.class, BARTERING_TALISMAN_SIMPLE);
BasePages.TALISMANS.addItem(BARTERING_TALISMAN_SIMPLE);
}

public static final ItemStack BARTERING_TALISMAN_ADVANCED = ItemStackBuilder.pylon(Material.GOLD_INGOT, BaseKeys.BARTERING_TALISMAN_ADVANCED)
.build();
static {
PylonItem.register(BarteringTalisman.class, BARTERING_TALISMAN_ADVANCED);
BasePages.TALISMANS.addItem(BARTERING_TALISMAN_ADVANCED);
}

public static final ItemStack BARTERING_TALISMAN_ULTIMATE = ItemStackBuilder.pylon(Material.GOLD_INGOT, BaseKeys.BARTERING_TALISMAN_ULTIMATE)
.build();
static {
PylonItem.register(BarteringTalisman.class, BARTERING_TALISMAN_ULTIMATE);
BasePages.TALISMANS.addItem(BARTERING_TALISMAN_ULTIMATE);
}

public static final ItemStack WATER_BREATHING_TALISMAN_SIMPLE = ItemStackBuilder.pylon(Material.NAUTILUS_SHELL, BaseKeys.WATER_BREATHING_TALISMAN_SIMPLE)
.build();
static {
PylonItem.register(WaterBreathingTalisman.class, WATER_BREATHING_TALISMAN_SIMPLE);
BasePages.TALISMANS.addItem(WATER_BREATHING_TALISMAN_SIMPLE);
}

public static final ItemStack WATER_BREATHING_TALISMAN_ADVANCED = ItemStackBuilder.pylon(Material.NAUTILUS_SHELL, BaseKeys.WATER_BREATHING_TALISMAN_ADVANCED)
.build();
static {
PylonItem.register(WaterBreathingTalisman.class, WATER_BREATHING_TALISMAN_ADVANCED);
BasePages.TALISMANS.addItem(WATER_BREATHING_TALISMAN_ADVANCED);
}

public static final ItemStack WATER_BREATHING_TALISMAN_ULTIMATE = ItemStackBuilder.pylon(Material.NAUTILUS_SHELL, BaseKeys.WATER_BREATHING_TALISMAN_ULTIMATE)
.build();
static {
PylonItem.register(WaterBreathingTalisman.class, WATER_BREATHING_TALISMAN_ULTIMATE);
BasePages.TALISMANS.addItem(WATER_BREATHING_TALISMAN_ULTIMATE);
}

public static final ItemStack LUCK_TALISMAN_SIMPLE = ItemStackBuilder.pylon(Material.RABBIT_FOOT, BaseKeys.LUCK_TALISMAN_SIMPLE)
.build();
static {
PylonItem.register(LuckTalisman.class, LUCK_TALISMAN_SIMPLE);
BasePages.TALISMANS.addItem(LUCK_TALISMAN_SIMPLE);
}

public static final ItemStack LUCK_TALISMAN_ADVANCED = ItemStackBuilder.pylon(Material.RABBIT_FOOT, BaseKeys.LUCK_TALISMAN_ADVANCED)
.build();
static {
PylonItem.register(LuckTalisman.class, LUCK_TALISMAN_ADVANCED);
BasePages.TALISMANS.addItem(LUCK_TALISMAN_ADVANCED);
}

public static final ItemStack LUCK_TALISMAN_ULTIMATE = ItemStackBuilder.pylon(Material.RABBIT_FOOT, BaseKeys.LUCK_TALISMAN_ULTIMATE)
.build();
static {
PylonItem.register(LuckTalisman.class, LUCK_TALISMAN_ULTIMATE);
BasePages.TALISMANS.addItem(LUCK_TALISMAN_ULTIMATE);
}

public static final ItemStack BREEDING_TALISMAN_SIMPLE = ItemStackBuilder.pylon(Material.APPLE, BaseKeys.BREEDING_TALISMAN_SIMPLE)
.build();
static {
PylonItem.register(BreedingTalisman.class, BREEDING_TALISMAN_SIMPLE);
BasePages.TALISMANS.addItem(BREEDING_TALISMAN_SIMPLE);
}

public static final ItemStack BREEDING_TALISMAN_ADVANCED = ItemStackBuilder.pylon(Material.APPLE, BaseKeys.BREEDING_TALISMAN_ADVANCED)
.build();
static {
PylonItem.register(BreedingTalisman.class, BREEDING_TALISMAN_ADVANCED);
BasePages.TALISMANS.addItem(BREEDING_TALISMAN_ADVANCED);
}

public static final ItemStack BREEDING_TALISMAN_ULTIMATE = ItemStackBuilder.pylon(Material.APPLE, BaseKeys.BREEDING_TALISMAN_ULTIMATE)
.build();
static {
PylonItem.register(BreedingTalisman.class, BREEDING_TALISMAN_ULTIMATE);
BasePages.TALISMANS.addItem(BREEDING_TALISMAN_ULTIMATE);
}

public static final ItemStack ENCHANTING_TALISMAN_SIMPLE = ItemStackBuilder.pylon(Material.ENCHANTED_BOOK, BaseKeys.ENCHANTING_TALISMAN_SIMPLE)
.set(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, false)
.build();
static {
PylonItem.register(EnchantingTalisman.class, ENCHANTING_TALISMAN_SIMPLE);
BasePages.TALISMANS.addItem(ENCHANTING_TALISMAN_SIMPLE);
}

public static final ItemStack ENCHANTING_TALISMAN_ADVANCED = ItemStackBuilder.pylon(Material.ENCHANTED_BOOK, BaseKeys.ENCHANTING_TALISMAN_ADVANCED)
.set(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, false)
.build();
static {
PylonItem.register(EnchantingTalisman.class, ENCHANTING_TALISMAN_ADVANCED);
BasePages.TALISMANS.addItem(ENCHANTING_TALISMAN_ADVANCED);
}

public static final ItemStack ENCHANTING_TALISMAN_ULTIMATE = ItemStackBuilder.pylon(Material.ENCHANTED_BOOK, BaseKeys.ENCHANTING_TALISMAN_ULTIMATE)
.set(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, false)
.build();
static {
PylonItem.register(EnchantingTalisman.class, ENCHANTING_TALISMAN_ULTIMATE);
BasePages.TALISMANS.addItem(ENCHANTING_TALISMAN_ULTIMATE);
}

public static final ItemStack HUNTING_TALISMAN_SIMPLE = ItemStackBuilder.pylon(Material.SKELETON_SKULL, BaseKeys.HUNTING_TALISMAN_SIMPLE)
.build();
static {
PylonItem.register(HuntingTalisman.class, HUNTING_TALISMAN_SIMPLE);
BasePages.TALISMANS.addItem(HUNTING_TALISMAN_SIMPLE);
}

public static final ItemStack HUNTING_TALISMAN_ADVANCED = ItemStackBuilder.pylon(Material.SKELETON_SKULL, BaseKeys.HUNTING_TALISMAN_ADVANCED)
.build();
static {
PylonItem.register(HuntingTalisman.class, HUNTING_TALISMAN_ADVANCED);
BasePages.TALISMANS.addItem(HUNTING_TALISMAN_ADVANCED);
}

public static final ItemStack HUNTING_TALISMAN_ULTIMATE = ItemStackBuilder.pylon(Material.SKELETON_SKULL, BaseKeys.HUNTING_TALISMAN_ULTIMATE)
.build();
static {
PylonItem.register(HuntingTalisman.class, HUNTING_TALISMAN_ULTIMATE);
BasePages.TALISMANS.addItem(HUNTING_TALISMAN_ULTIMATE);
}

// Calling this method forces all the static blocks to run, which initializes our items
public static void initialize() {
}
Expand Down
34 changes: 33 additions & 1 deletion src/main/java/io/github/pylonmc/pylon/base/BaseKeys.java
Original file line number Diff line number Diff line change
Expand Up @@ -302,4 +302,36 @@ public class BaseKeys {
public static final NamespacedKey CARGO_DUCT = baseKey("cargo_duct");
public static final NamespacedKey CARGO_EXTRACTOR = baseKey("cargo_extractor");
public static final NamespacedKey CARGO_INSERTER = baseKey("cargo_inserter");
}

public static final NamespacedKey HUNGER_TALISMAN_SIMPLE = baseKey("hunger_talisman_simple");
public static final NamespacedKey HUNGER_TALISMAN_ADVANCED = baseKey("hunger_talisman_advanced");
public static final NamespacedKey HUNGER_TALISMAN_ULTIMATE = baseKey("hunger_talisman_ultimate");

public static final NamespacedKey FARMER_TALISMAN_SIMPLE = baseKey("farmer_talisman_simple");
public static final NamespacedKey FARMER_TALISMAN_ADVANCED = baseKey("farmer_talisman_advanced");
public static final NamespacedKey FARMER_TALISMAN_ULTIMATE = baseKey("farmer_talisman_ultimate");

public static final NamespacedKey BARTERING_TALISMAN_SIMPLE = baseKey("bartering_talisman_simple");
public static final NamespacedKey BARTERING_TALISMAN_ADVANCED = baseKey("bartering_talisman_advanced");
public static final NamespacedKey BARTERING_TALISMAN_ULTIMATE = baseKey("bartering_talisman_ultimate");

public static final NamespacedKey WATER_BREATHING_TALISMAN_SIMPLE = baseKey("water_breathing_talisman_simple");
public static final NamespacedKey WATER_BREATHING_TALISMAN_ADVANCED = baseKey("water_breathing_talisman_advanced");
public static final NamespacedKey WATER_BREATHING_TALISMAN_ULTIMATE = baseKey("water_breathing_talisman_ultimate");

public static final NamespacedKey LUCK_TALISMAN_SIMPLE = baseKey("luck_talisman_simple");
public static final NamespacedKey LUCK_TALISMAN_ADVANCED = baseKey("luck_talisman_advanced");
public static final NamespacedKey LUCK_TALISMAN_ULTIMATE = baseKey("luck_talisman_ultimate");

public static final NamespacedKey BREEDING_TALISMAN_SIMPLE = baseKey("breeding_talisman_simple");
public static final NamespacedKey BREEDING_TALISMAN_ADVANCED = baseKey("breeding_talisman_advanced");
public static final NamespacedKey BREEDING_TALISMAN_ULTIMATE = baseKey("breeding_talisman_ultimate");

public static final NamespacedKey ENCHANTING_TALISMAN_SIMPLE = baseKey("enchanting_talisman_simple");
public static final NamespacedKey ENCHANTING_TALISMAN_ADVANCED = baseKey("enchanting_talisman_advanced");
public static final NamespacedKey ENCHANTING_TALISMAN_ULTIMATE = baseKey("enchanting_talisman_ultimate");

public static final NamespacedKey HUNTING_TALISMAN_SIMPLE = baseKey("hunting_talisman_simple");
public static final NamespacedKey HUNTING_TALISMAN_ADVANCED = baseKey("hunting_talisman_advanced");
public static final NamespacedKey HUNTING_TALISMAN_ULTIMATE = baseKey("hunting_talisman_ultimate");
}
3 changes: 3 additions & 0 deletions src/main/java/io/github/pylonmc/pylon/base/BasePages.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,15 @@ public boolean shouldDisplay(@NotNull Player player) {
}
};

public static final SimpleStaticGuidePage TALISMANS = new SimpleStaticGuidePage(baseKey("talismans"), Material.TOTEM_OF_UNDYING);

static {
PylonGuide.getRootPage().addPage(SCIENCE);
PylonGuide.getRootPage().addPage(RESOURCES);
PylonGuide.getRootPage().addPage(COMPONENTS);
PylonGuide.getRootPage().addPage(TOOLS);
PylonGuide.getRootPage().addPage(COMBAT);
PylonGuide.getRootPage().addPage(TALISMANS);
PylonGuide.getRootPage().addPage(ARMOUR);
PylonGuide.getRootPage().addPage(FOOD);

Expand Down
10 changes: 8 additions & 2 deletions src/main/java/io/github/pylonmc/pylon/base/PylonBase.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import io.github.pylonmc.pylon.base.content.machines.fluid.Sprinkler;
import io.github.pylonmc.pylon.base.content.machines.simple.Grindstone;
import io.github.pylonmc.pylon.base.content.machines.smelting.Bloomery;
import io.github.pylonmc.pylon.base.content.tools.HealthTalisman;
import io.github.pylonmc.pylon.base.content.talismans.*;
import io.github.pylonmc.pylon.base.content.tools.ItemMagnet;
import io.github.pylonmc.pylon.base.content.tools.SoulboundRune;
import io.github.pylonmc.pylon.base.content.tools.base.Rune;
Expand Down Expand Up @@ -61,7 +61,13 @@ public void onEnable() {
pm.registerEvents(new Grindstone.PlaceListener(), this);

new ItemMagnet.Ticker().runTaskTimer(this, 0, 10);
new HealthTalisman.HealthTalismanTicker().runTaskTimer(this, 0, BaseConfig.HEALTH_TALISMAN_CHECK_INTERVAL);

pm.registerEvents(new HungerTalisman.JoinListener(), this);
pm.registerEvents(new FarmerTalisman.FarmerTalismanListener(), this);
pm.registerEvents(new BarteringTalisman.BarteringTalismanListener(), this);
pm.registerEvents(new BreedingTalisman.BreedingTalismanListener(), this);
pm.registerEvents(new EnchantingTalisman.EnchantingListener(), this);
pm.registerEvents(new HuntingTalisman.HuntingTalismanListener(), this);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.google.common.base.Preconditions;
import io.github.pylonmc.pylon.base.BaseKeys;
import io.github.pylonmc.pylon.base.PylonBase;
import io.github.pylonmc.pylon.base.util.BaseUtils;
import io.github.pylonmc.pylon.core.block.BlockStorage;
import io.github.pylonmc.pylon.core.config.ConfigSection;
import io.github.pylonmc.pylon.core.config.Settings;
Expand Down Expand Up @@ -38,7 +38,7 @@
@SuppressWarnings("UnstableApiUsage")
public class Loupe extends PylonItem implements PylonInteractor, PylonConsumable {

private static final NamespacedKey CONSUMED_KEY = new NamespacedKey(PylonBase.getInstance(), "consumed");
private static final NamespacedKey CONSUMED_KEY = BaseUtils.baseKey("consumed");
private static final PersistentDataType<PersistentDataContainer, Map<Material, Integer>> CONSUMED_TYPE =
PylonSerializers.MAP.mapTypeFrom(
PylonSerializers.KEYED.keyedTypeFrom(Material.class, Registry.MATERIAL::getOrThrow),
Expand Down Expand Up @@ -142,7 +142,7 @@ public void onConsumed(@NotNull PlayerItemConsumeEvent event) {
org.bukkit.entity.Item entityItem = hasValidItem(toScan, items);
if (entityItem != null) {
ItemStack stack = entityItem.getItemStack();
if(addPoints(stack.getType(), stack.effectiveName(), player)) return;
if (addPoints(stack.getType(), stack.effectiveName(), player)) return;

if (stack.getAmount() == 1) {
entityItem.remove();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package io.github.pylonmc.pylon.base.content.talismans;

import com.google.common.base.Preconditions;
import io.github.pylonmc.pylon.core.config.adapter.ConfigAdapter;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeInstance;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;

public abstract class AttributeTalisman extends Talisman {
public final double attrBonus = getSettings().getOrThrow("attr-bonus", ConfigAdapter.DOUBLE);
private final AttributeModifier modifier = new AttributeModifier(
getTalismanKey(),
attrBonus,
AttributeModifier.Operation.ADD_NUMBER
);

public AttributeTalisman(@NotNull ItemStack stack) {
super(stack);
}

@Override
public void applyEffect(@NotNull Player player) {
super.applyEffect(player);
AttributeInstance attr = player.getAttribute(getAttribute());
Preconditions.checkNotNull(attr);
attr.addModifier(modifier);
}

@Override
public void removeEffect(@NotNull Player player) {
super.removeEffect(player);
AttributeInstance attr = player.getAttribute(getAttribute());
Preconditions.checkNotNull(attr);
attr.removeModifier(getTalismanKey());
}

protected abstract Attribute getAttribute();
}
Loading
Loading