Лучшая структура данных для хранения 2048 тегов предметов Minecraft?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Лучшая структура данных для хранения 2048 тегов предметов Minecraft?

Сообщение Anonymous »

Контекст, я работаю над модом Minecraft (1.21, поэтому Java 21), цель которого:
  • Использовать данные max_stack_size компонент для управления очевидным максимальным размером стека элементов по умолчанию для упрощения настройки. Чтобы элементы отображались по умолчанию с максимальным размером стека N, просто добавьте элемент в max_stack_size_N.json, и логика тега элемента сделает все остальное.
  • Tear the Hard -coded 99 разбить максимальный размер стека на части и заменить его чем-то более удобным.
Я достиг этих двух целей для N=2ˣ путем индивидуального определения, назначения прослушивателя и проверки каждого тега на каждую степень двойки.

Код: Выделить всё

public class ModTags{
public static final TagKey IS_STACK_SIZE_1 = createTag("stack_size_1" );
public static final TagKey IS_STACK_SIZE_2 = createTag("stack_size_2" );
public static final TagKey IS_STACK_SIZE_2 = createTag("stack_size_4" );
[...]
public static final TagKey IS_STACK_SIZE_2048 = createTag("stack_size_2048");

[...]
addReloadListener("stack_size_1"   );
addReloadListener("stack_size_2"   );
addReloadListener("stack_size_4"   );
[...]
addReloadListener("stack_size_2048");
}}

Код: Выделить всё

@Mixin(ItemStack.class)
public abstract class ItemStack_SizeMixin implements ComponentHolder, FabricItemStack {
[...]
@Inject(method="getMaxCount", at = @At("HEAD"))
private void updateMaxStackSizeWithTag(CallbackInfoReturnable cir){
ItemStack thisAsStack = (ItemStack)(Object) this;

if      ( thisAsStack.isIn(ModTags.Items.IS_STACK_SIZE_2048)) ChangeStackSize(thisAsStack, 2048 );
else if ( thisAsStack.isIn(ModTags.Items.IS_STACK_SIZE_1024)) ChangeStackSize(thisAsStack, 1024 );
[...]
}
}
Стратегия, которая, как я знал, не будет масштабироваться, когда я ее выберу, но наивность которой позволит легко кодировать остальную логику мода, проверьте. Я надеялся, что за то время, которое мне понадобится, чтобы удовлетворительно исправить все остальное, я накопим ноу-хау, чтобы заменить это лучшей системой. Что ж, насколько я могу судить, это время пришло.
А у меня точно нет: мой вопрос:
Как лучше всего систематически определять, хранить и проверять 2048 тегов предметов Minecraft? Ради людей, которые действительно хотят, чтобы max_stack_sizes был равен 372?
Я уже пробовал реализовать его как ArrayList, и это постоянно вызывало stackOverflows. Кроме того, у меня просто нет знаний Java, чтобы иметь представление.

Подробнее здесь: https://stackoverflow.com/questions/787 ... t-itemtags
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»