Skip to content
Merged
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 @@ -6,6 +6,8 @@
import java.util.Objects;
import com.github.jikoo.planarenchanting.util.EnchantData;
import com.github.jikoo.planarenchanting.util.EnchantmentAccess;
import com.github.jikoo.planarenchanting.util.EnchantDataService;

import org.bukkit.enchantments.Enchantment;
import org.jspecify.annotations.NullMarked;

Expand All @@ -22,7 +24,7 @@ public class CombineEnchants<T> implements AnvilFunction<T> {

protected CombineEnchants(Platform platform, EnchantmentAccess<T> access) {
this.access = access;
this.platform = platform.platform;
this.platform = platform.internalPlatform;
}

@Override
Expand Down Expand Up @@ -110,10 +112,10 @@ public enum Platform {
JAVA(new Java()),
BEDROCK(new Bedrock()),;

private final EnchantingPlatform platform;
private final EnchantingPlatform internalPlatform;

Platform(EnchantingPlatform platform) {
this.platform = platform;
this.internalPlatform = platform;
}
}

Expand All @@ -128,7 +130,7 @@ private sealed interface EnchantingPlatform {
private static final class Java implements EnchantingPlatform {
@Override
public int getAnvilCost(Enchantment enchantment, boolean isFromBook) {
int value = EnchantData.Service.PROVIDER.of(enchantment).getAnvilCost();
int value = EnchantDataService.PROVIDER.of(enchantment).getAnvilCost();
return isFromBook ? Math.max(1, value / 2) : value;
}

Expand All @@ -146,7 +148,7 @@ public int getInapplicableCost() {
private static final class Bedrock implements EnchantingPlatform {
@Override
public int getAnvilCost(Enchantment enchantment, boolean isFromBook) {
EnchantData data = EnchantData.Service.PROVIDER.of(enchantment);
EnchantData data = EnchantDataService.PROVIDER.of(enchantment);

int cost = data.getAnvilCost();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.github.jikoo.planarenchanting.table;

import com.github.jikoo.planarenchanting.util.EnchantData;
import com.github.jikoo.planarenchanting.util.EnchantDataService;
import com.github.jikoo.planarwrappers.util.WeightedRandom;
import java.util.Collection;
import java.util.Collections;
Expand Down Expand Up @@ -104,7 +105,7 @@ public void setMaxLevel(@NotNull ToIntFunction<@NotNull Enchantment> maxLevel) {
Map<Enchantment, Integer> available = new HashMap<>();

for (Enchantment enchantment : this.enchantments) {
EnchantData data = EnchantData.Service.PROVIDER.of(enchantment);
EnchantData data = EnchantDataService.PROVIDER.of(enchantment);
// Find a level appropriate for the finalized enchanting level.
for (int lvl = maxLevel.applyAsInt(enchantment); lvl >= enchantment.getStartLevel(); --lvl) {
if (enchantQuality >= data.getMinModifiedCost(lvl)
Expand Down Expand Up @@ -138,7 +139,7 @@ private void addEnchant(
Enchantment choice = WeightedRandom.choose(
random,
available.keySet(),
enchant -> EnchantData.Service.PROVIDER.of(enchant).getWeight()
enchant -> EnchantDataService.PROVIDER.of(enchant).getWeight()
);

// Add selected enchantment and remove it from the available listings.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.github.jikoo.planarenchanting.util;

import java.util.ServiceLoader;
import org.bukkit.enchantments.Enchantment;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;

/**
Expand Down Expand Up @@ -53,7 +51,7 @@ public interface EnchantData {
/**
* An enchantment data provider.
*
* @see Service#PROVIDER
* @see EnchantDataService#PROVIDER
*/
@NullMarked
interface Provider {
Expand All @@ -62,15 +60,4 @@ interface Provider {

}

@ApiStatus.NonExtendable
interface Service {

/**
* A {@link Provider} loaded from a service.
*/
Provider PROVIDER = ServiceLoader.load(Provider.class, Provider.class.getClassLoader())
.findFirst().orElseThrow();

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.github.jikoo.planarenchanting.util;

import java.util.ServiceLoader;

import org.jetbrains.annotations.ApiStatus;

import com.github.jikoo.planarenchanting.util.EnchantData.Provider;

@ApiStatus.NonExtendable
public class EnchantDataService {

/**
* A {@link Provider} loaded from a service.
*/
public static final Provider PROVIDER = ServiceLoader.load(Provider.class, Provider.class.getClassLoader())
.findFirst().orElseThrow();

private EnchantDataService() {
throw new IllegalStateException("Cannot instantiate static helper container.");
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
import com.github.jikoo.planarenchanting.anvil.CombineEnchants.Platform;
import com.github.jikoo.planarenchanting.util.EnchantData;
import com.github.jikoo.planarenchanting.util.EnchantmentAccess;
import com.github.jikoo.planarenchanting.util.EnchantDataService;

import java.util.Map;
import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey;
Expand Down Expand Up @@ -185,7 +187,7 @@ void getLevelCostMerge(Platform platform, int cost, boolean conflict) {
Map<Enchantment, Integer> base = Map.of(enchantment, 1);
Map<Enchantment, Integer> added = Map.of(enchantment, 1);

EnchantData data = EnchantData.Service.PROVIDER.of(enchantment);
EnchantData data = EnchantDataService.PROVIDER.of(enchantment);
doReturn(5).when(data).getAnvilCost();

CombineEnchants<Void> function = new CombineEnchants<>(platform, access);
Expand Down Expand Up @@ -220,7 +222,7 @@ void getLevelCostUsesHigher(
Map<Enchantment, Integer> base = Map.of(enchantment, baseLevel);
Map<Enchantment, Integer> added = Map.of(enchantment, addedLevel);

EnchantData data = EnchantData.Service.PROVIDER.of(enchantment);
EnchantData data = EnchantDataService.PROVIDER.of(enchantment);
int anvilCost = 5;
doReturn(anvilCost).when(data).getAnvilCost();

Expand Down Expand Up @@ -252,7 +254,7 @@ void getLevelCostCapsToMax(int baseLevel, int addedLevel, int maxLevel) {
Map<Enchantment, Integer> base = Map.of(enchantment, baseLevel);
Map<Enchantment, Integer> added = Map.of(enchantment, addedLevel);

EnchantData data = EnchantData.Service.PROVIDER.of(enchantment);
EnchantData data = EnchantDataService.PROVIDER.of(enchantment);
int anvilCost = 5;
doReturn(anvilCost).when(data).getAnvilCost();

Expand Down Expand Up @@ -284,7 +286,7 @@ void getLevelCostBook(Platform platform) {
Map<Enchantment, Integer> base = Map.of();
Map<Enchantment, Integer> added = Map.of(enchantment, 1);

EnchantData data = EnchantData.Service.PROVIDER.of(enchantment);
EnchantData data = EnchantDataService.PROVIDER.of(enchantment);
int anvilCost = 5;
doReturn(anvilCost).when(data).getAnvilCost();

Expand Down Expand Up @@ -314,7 +316,7 @@ void getLevelCostBedrockTrident() {
Map<Enchantment, Integer> base = Map.of();
Map<Enchantment, Integer> added = Map.of(enchantment, 1);

EnchantData data = EnchantData.Service.PROVIDER.of(enchantment);
EnchantData data = EnchantDataService.PROVIDER.of(enchantment);
int anvilCost = 5;
doReturn(anvilCost).when(data).getAnvilCost();
doReturn(true).when(data).isTridentEnchant();
Expand Down Expand Up @@ -352,7 +354,7 @@ void getResult() {
doReturn(1).when(behavior).getEnchantMaxLevel(any());

Enchantment enchantment = mock();
EnchantData data = EnchantData.Service.PROVIDER.of(enchantment);
EnchantData data = EnchantDataService.PROVIDER.of(enchantment);
doReturn(5).when(data).getAnvilCost();
doReturn(Map.of()).doReturn(Map.of(enchantment, 1)).when(access).getEnchantments(any());

Expand Down Expand Up @@ -381,7 +383,7 @@ void getResultNegative() {
doReturn(view).when(state).getAnvilView();

Enchantment enchantment = mock();
EnchantData data = EnchantData.Service.PROVIDER.of(enchantment);
EnchantData data = EnchantDataService.PROVIDER.of(enchantment);
doReturn(5).when(data).getAnvilCost();
doReturn(Map.of(enchantment, -2)).when(access).getEnchantments(any());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ void beforeEach() {
functions = mock(Mockito.RETURNS_MOCKS);
forgeResult = mock();
anvil = new PlanarForge<>(
view -> {
localView -> {
WorkPiece<Void> piece = mock();
doReturn(forgeResult).when(piece).temper();
doAnswer(invocation -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
import static org.mockito.Mockito.mockStatic;

import com.github.jikoo.planarenchanting.util.EnchantData;
import com.github.jikoo.planarenchanting.util.EnchantDataService;

import java.util.Arrays;
import java.util.Collection;
import java.util.List;
Expand Down Expand Up @@ -96,7 +98,7 @@ void setUpEach() {
}

static void setUpToolEnchants() {
EnchantData data = EnchantData.Service.PROVIDER.of(Enchantment.EFFICIENCY);
EnchantData data = EnchantDataService.PROVIDER.of(Enchantment.EFFICIENCY);
doReturn(10).when(data).getWeight();
doAnswer(invocation -> {
int level = invocation.getArgument(0);
Expand All @@ -108,7 +110,7 @@ static void setUpToolEnchants() {
}).when(data).getMaxModifiedCost(anyInt());
doReturn(5).when(Enchantment.EFFICIENCY).getMaxLevel();

data = EnchantData.Service.PROVIDER.of(Enchantment.UNBREAKING);
data = EnchantDataService.PROVIDER.of(Enchantment.UNBREAKING);
doReturn(5).when(data).getWeight();
doAnswer(invocation -> {
int level = invocation.getArgument(0);
Expand All @@ -120,7 +122,7 @@ static void setUpToolEnchants() {
}).when(data).getMaxModifiedCost(anyInt());
doReturn(3).when(Enchantment.UNBREAKING).getMaxLevel();

data = EnchantData.Service.PROVIDER.of(Enchantment.FORTUNE);
data = EnchantDataService.PROVIDER.of(Enchantment.FORTUNE);
doReturn(2).when(data).getWeight();
doAnswer(invocation -> {
int level = invocation.getArgument(0);
Expand All @@ -132,7 +134,7 @@ static void setUpToolEnchants() {
}).when(data).getMaxModifiedCost(anyInt());
doReturn(3).when(Enchantment.FORTUNE).getMaxLevel();

data = EnchantData.Service.PROVIDER.of(Enchantment.SILK_TOUCH);
data = EnchantDataService.PROVIDER.of(Enchantment.SILK_TOUCH);
doReturn(1).when(data).getWeight();
doReturn(15).when(data).getMinModifiedCost(anyInt());
doReturn(65).when(data).getMaxModifiedCost(anyInt());
Expand Down Expand Up @@ -231,7 +233,7 @@ private boolean conflicts(Enchantment enchantment1, Enchantment enchantment2) {
@ParameterizedTest
@CsvSource({"1,0", "10,0", "15,0", "1,12348", "10,98124", "15,23479"})
void testGetButtonLevels(int shelves, int seed) {
Random random = new Random(seed);
random.setSeed(seed);
int[] buttonLevels1 = EnchantingTable.getButtonLevels(random, shelves);
random.setSeed(seed);
int[] buttonLevels2 = EnchantingTable.getButtonLevels(random, shelves);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@
class TableEnchantListenerTest {

private MockedStatic<Bukkit> bukkit;
private final Material ENCHANTABLE_MATERIAL = Material.COAL_ORE;
private final Material UNENCHANTABLE_MATERIAL = Material.DIRT;
private final Material enchantableMaterial = Material.COAL_ORE;
private final Material unenchantableMaterial = Material.DIRT;
private Enchantment validEnchant;
private Collection<Enchantment> toolEnchants;

Expand All @@ -77,9 +77,9 @@ void setUpAll() {
bukkit.when(() -> Bukkit.getRegistry(any())).thenAnswer(inv -> {
Registry<Enchantment> registry = mock();
doAnswer(invocation -> {
NamespacedKey key = invocation.getArgument(0);
NamespacedKey invocationKey = invocation.getArgument(0);
Enchantment enchant = mock();
doReturn(key).when(enchant).getKey();
doReturn(invocationKey).when(enchant).getKey();
return enchant;
}).when(registry).getOrThrow(any());
return registry;
Expand Down Expand Up @@ -114,7 +114,7 @@ void setUp() {

@Override
protected boolean isIneligible(Player player, ItemStack enchanted) {
return itemStack.getType() != ENCHANTABLE_MATERIAL;
return itemStack.getType() != enchantableMaterial;
}

@Override
Expand Down Expand Up @@ -148,7 +148,7 @@ protected EnchantingTable getTable(Player player, ItemStack enchanted) {
}).when(player).setEnchantmentSeed(anyInt());

itemStack = mock();
doReturn(ENCHANTABLE_MATERIAL).when(itemStack).getType();
doReturn(enchantableMaterial).when(itemStack).getType();
doReturn(1).when(itemStack).getAmount();
key = new NamespacedKey(plugin, "enchanting_table_seed");
}
Expand All @@ -167,7 +167,7 @@ void testCanNotEnchantStack() {

@Test
void testCanNotEnchantWrongMaterial() {
doReturn(UNENCHANTABLE_MATERIAL).when(itemStack).getType();
doReturn(unenchantableMaterial).when(itemStack).getType();
assertThat(
"Material with no enchants cannot be enchanted",
listener.canNotEnchant(player, itemStack));
Expand All @@ -183,7 +183,7 @@ void testCanEnchant() {

@Test
void testPrepareItemEnchantInvalid() {
doReturn(UNENCHANTABLE_MATERIAL).when(itemStack).getType();
doReturn(unenchantableMaterial).when(itemStack).getType();
var event = prepareEvent(15);
assertDoesNotThrow(() -> listener.onPrepareItemEnchant(event));
assertThat(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ public void modifyResult(ItemStack modified) {
public static final AnvilFunction<ItemStack> COMBINE_ENCHANTMENTS_JAVA;
public static final AnvilFunction<ItemStack> COMBINE_ENCHANTMENTS_BEDROCK;

public static ComponentAnvilFunctions INSTANCE = new ComponentAnvilFunctions();
public static final ComponentAnvilFunctions INSTANCE = new ComponentAnvilFunctions();

static {
ComponentEnchantmentAccess access = new ComponentEnchantmentAccess();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public abstract class Generator {
protected final ClassName generatedClass;
protected TypeSpec.@UnknownNullability Builder builder;

public Generator(String pkg, String name) {
protected Generator(String pkg, String name) {
this.generatedClass = ClassName.get(pkg, name);
}

Expand Down Expand Up @@ -105,7 +105,7 @@ protected String tweakFormatting(String content) {
/**
* Lenient annotation declaration. This is a bit hairy, because annotations may have values set.
*/
private static final @RegExp String ANNOTATION = "@[\\w.]+(?:\\(.*?\\))?";
private static final @RegExp String ANNOTATION = "@[\\w.]+(?:\\([^\\)]*+\\))?";
/** Lenient generic type declaration. */
private static final @RegExp String GENERIC = "<(?:(?:" + ANNOTATION + " )*?[\\w<>, ]+)+>";
/**
Expand Down Expand Up @@ -157,7 +157,7 @@ protected String tweakFormatting(String content) {
// Javadoc comments. Multi-line only, because JavaPoet only generates multi-line Javadocs.
+ "(?: {2}/\\*\\*\n(?:.*\n)*?\\s*\\*/\n)?"
// Regular comments in case of comment hack fields.
+ "(?: {2}//.*?\n)?"
+ "(?: {2}//[^\\n]*+\n)?"
// Any annotations.
+ "(?: {2}" + ANNOTATION + "\n)*?"
// Matching indent.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
@NullMarked
public abstract class ItemConsumingGenerator extends Generator {

public ItemConsumingGenerator(String pkg, String name) {
protected ItemConsumingGenerator(String pkg, String name) {
super(pkg, "Baked" + name + "Data");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public final class FieldAccessor {
constructor.setAccessible(true);
COMMENT = constructor.newInstance("//");
} catch (ReflectiveOperationException e) {
throw new RuntimeException(e);
throw new IllegalStateException(e);
}
}

Expand All @@ -31,7 +31,7 @@ public static <T> void consumeFieldsOfType(Class<?> holder, Class<T> type, BiCon
try {
consumer.accept(field.getName(), type.cast(field.get(null)));
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
throw new IllegalStateException(e);
}
}
}
Expand Down