Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
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 @@ -33,8 +33,8 @@ public final class WidgetUtils {

public static void drawBackground(GuiGraphics graphics, int x, int y, int width, int height) {
RenderSystem.enableBlend();
graphics.blitNineSliced(TEXTURE, x, y, 42, height, 3, 42, 42, 0, 0);
graphics.blitNineSliced(TEXTURE, x + 42, y, width - 42, height, 3, 86, 42, 42, 0);
graphics.blitSprite(ResourceLocation.fromNamespaceAndPath(Heracles.MOD_ID, "widgets/background"), x, y, 42, height);
graphics.blitSprite(ResourceLocation.fromNamespaceAndPath(Heracles.MOD_ID, "widgets/background2"), x + 42, y, width - 42, height);
Comment thread
ThatGravyBoat marked this conversation as resolved.
Outdated
RenderSystem.disableBlend();
}

Expand All @@ -44,17 +44,34 @@ public static void drawSummaryBackground(GuiGraphics graphics, int x, int y, int

public static void drawStatusSummaryBackground(GuiGraphics graphics, int x, int y, int width, int height, ModUtils.QuestStatus status) {
RenderSystem.enableBlend();
graphics.blitNineSliced(TEXTURE, x, y, width, height, 3, 128, 42, 128, 42 * status.ordinal());
switch (status.ordinal()) {
case 0:
graphics.blitSprite(ResourceLocation.fromNamespaceAndPath(Heracles.MOD_ID, "widgets/summary_background_0"), x, y, width, height);
break;
case 1:
graphics.blitSprite(ResourceLocation.fromNamespaceAndPath(Heracles.MOD_ID, "widgets/summary_background_1"), x, y, width, height);
break;
case 2:
graphics.blitSprite(ResourceLocation.fromNamespaceAndPath(Heracles.MOD_ID, "widgets/summary_background_2"), x, y, width, height);
break;
case 3:
graphics.blitSprite(ResourceLocation.fromNamespaceAndPath(Heracles.MOD_ID, "widgets/summary_background_3"), x, y, width, height);
break;
}
RenderSystem.disableBlend();
}

public static <T extends Tag> void drawProgressBar(GuiGraphics graphics, int minX, int minY, int maxX, int maxY, QuestTask<?, T, ?> task, TaskProgress<T> progress) {
RenderSystem.enableBlend();
graphics.blitNineSliced(TEXTURE, minX, minY, maxX - minX, maxY - minY, 3, 128, 8, 0, 168 + (progress.isComplete() ? 8 : 0));
if(progress.isComplete()) {
graphics.blitSprite(ResourceLocation.fromNamespaceAndPath(Heracles.MOD_ID, "widgets/progress_bar_1"), minX, minY, maxX - minX, maxY - minY);
} else {
graphics.blitSprite(ResourceLocation.fromNamespaceAndPath(Heracles.MOD_ID, "widgets/progress_bar_0"), minX, minY, maxX - minX, maxY - minY);
}
float fill = Math.min(1f, task.getProgress(progress.progress()));
if (fill != 0.0 && !progress.isComplete()) {
int progressWidth = (int) ((maxX - minX) * fill);
graphics.blitNineSliced(TEXTURE, minX, minY, progressWidth, maxY - minY, 3, 128, 8, 0, 168 + 8 + 8);
graphics.blitSprite(ResourceLocation.fromNamespaceAndPath(Heracles.MOD_ID, "widgets/progress_bar_2"), minX, minY, progressWidth, maxY - minY);
}
RenderSystem.disableBlend();
}
Expand Down Expand Up @@ -101,7 +118,7 @@ public static void drawEntity(GuiGraphics graphics, int x, int y, int size, Enti
pose.mulPose(Axis.YP.rotationDegrees(rot));
EntityRenderDispatcher entityRenderer = mc.getEntityRenderDispatcher();
MultiBufferSource.BufferSource buffer = mc.renderBuffers().bufferSource();
entityRenderer.render(entity, 0, 0, 0.0D, mc.getFrameTime(), 1, pose, buffer, LightTexture.FULL_BRIGHT);
entityRenderer.render(entity, 0, 0, 0.0D, mc.getTimer().getGameTimeDeltaPartialTick(true), 1, pose, buffer, LightTexture.FULL_BRIGHT);
buffer.endBatch();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import earth.terrarium.heracles.api.tasks.defaults.BlockInteractTask;
import earth.terrarium.heracles.common.utils.RegistryValue;
import net.minecraft.Optionull;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import org.jetbrains.annotations.Nullable;
Expand All @@ -32,7 +33,7 @@ public BlockInteractTask create(String id, @Nullable BlockInteractTask object, D
icon,
data.get("block", RegistryValueSetting.BLOCK).orElse(getDefaultBlock(object)),
Optionull.mapOrDefault(object, BlockInteractTask::state, BlockStatePredicate.ANY),
Optionull.mapOrDefault(object, BlockInteractTask::nbt, NbtPredicate.ANY)
Optionull.mapOrDefault(object, BlockInteractTask::nbt, new NbtPredicate(new CompoundTag()))
Comment thread
MsRandom marked this conversation as resolved.
Outdated
));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import earth.terrarium.heracles.api.client.settings.SettingInitializer;
import earth.terrarium.heracles.api.tasks.defaults.CheckTask;
import net.minecraft.Optionull;
import net.minecraft.nbt.CompoundTag;
import org.jetbrains.annotations.Nullable;

public class CheckTaskSettings implements SettingInitializer<CheckTask>, CustomizableQuestElementSettings<CheckTask> {
Expand All @@ -22,7 +23,7 @@ public CheckTask create(String id, CheckTask object, Data data) {
id,
title,
icon,
Optionull.mapOrDefault(object, CheckTask::nbt, NbtPredicate.ANY)
Optionull.mapOrDefault(object, CheckTask::nbt, new NbtPredicate(new CompoundTag()))
));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import earth.terrarium.heracles.api.tasks.defaults.EntityInteractTask;
import earth.terrarium.heracles.common.utils.RegistryValue;
import net.minecraft.Optionull;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.entity.EntityType;
import org.jetbrains.annotations.Nullable;

Expand All @@ -25,7 +26,7 @@ public CreationData create(@Nullable EntityInteractTask object) {
@Override
public EntityInteractTask create(String id, EntityInteractTask object, Data data) {
RegistryValue<EntityType<?>> entity = data.get("entity", RegistryValueSetting.ENTITY).orElse(getDefaultEntity(object));
NbtPredicate old = Optionull.mapOrDefault(object, EntityInteractTask::nbt, NbtPredicate.ANY);
NbtPredicate old = Optionull.mapOrDefault(object, EntityInteractTask::nbt, new NbtPredicate(new CompoundTag()));
return create(object, data, (title, icon) -> new EntityInteractTask(
id,
title,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import earth.terrarium.heracles.api.client.ItemDisplayWidget;
import earth.terrarium.heracles.api.client.WidgetUtils;
import earth.terrarium.heracles.api.quests.QuestIcon;
import earth.terrarium.heracles.client.widgets.buttons.ThemedButton;
import earth.terrarium.heracles.common.constants.ConstantComponents;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
Expand Down Expand Up @@ -49,8 +50,11 @@ default void render(GuiGraphics graphics, ScissorBoxStack scissor, int x, int y,
if (isInteractive()) {
int buttonY = y + 11;
boolean buttonHovered = mouseX > x + width - 30 && mouseX < x + width - 10 && mouseY > buttonY && mouseY < buttonY + 20;
int v = canClaim() ? (buttonHovered ? 40 : 20) : 0;
graphics.blitNineSliced(BUTTON_TEXTURE, x + width - 30, buttonY, 20, 20, 3, 200, 20, 0, v);
if(canClaim()) {
graphics.blitSprite(buttonHovered ? ThemedButton.SPRITE_COMPLETABLE_HOVERED : ThemedButton.SPRITE_COMPLETABLE, x + width - 30, buttonY, 20, 20);
} else {
graphics.blitSprite(ThemedButton.SPRITE_DISABLED, x + width - 30, buttonY, 20, 20);
}
graphics.blit(LOOTBAG_TEXTURE, x + width - 30 + 2, buttonY + 2, 0, 0, 16, 16, 16, 16);
if (buttonHovered) {
CursorUtils.setCursor(true, canClaim() ? CursorScreen.Cursor.POINTER : CursorScreen.Cursor.DISABLED);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public MapCodec<CommandReward> codec(String id) {
return RecordCodecBuilder.mapCodec(instance -> instance.group(
RecordCodecBuilder.point(id),
Codec.STRING.optionalFieldOf("title", "").forGetter(CommandReward::title),
QuestIcons.CODEC.optionalFieldOf("icon", ItemQuestIcon.AIR).forGetter(CommandReward::icon),
QuestIcons.CODEC.lenientOptionalFieldOf("icon", ItemQuestIcon.AIR).forGetter(CommandReward::icon),
Codec.STRING.fieldOf("command").forGetter(CommandReward::command)
).apply(instance, CommandReward::new));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.teamresourceful.resourcefullib.common.codecs.recipes.ItemStackCodec;
import earth.terrarium.heracles.Heracles;
import earth.terrarium.heracles.api.CustomizableQuestElement;
import earth.terrarium.heracles.api.quests.QuestIcon;
Expand All @@ -12,9 +11,11 @@
import earth.terrarium.heracles.api.rewards.QuestReward;
import earth.terrarium.heracles.api.rewards.QuestRewardType;
import earth.terrarium.heracles.api.rewards.RewardUtils;
import earth.terrarium.heracles.common.utils.ItemStackCodec;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;

import java.util.stream.Stream;

Expand Down Expand Up @@ -44,9 +45,9 @@ public ResourceLocation id() {
public MapCodec<ItemReward> codec(String id) {
return RecordCodecBuilder.mapCodec(instance -> instance.group(
RecordCodecBuilder.point(id),
Codec.STRING.optionalFieldOf("title", "").forGetter(ItemReward::title),
QuestIcons.CODEC.optionalFieldOf("icon", ItemQuestIcon.AIR).forGetter(ItemReward::icon),
ItemStackCodec.CODEC.fieldOf("item").forGetter(ItemReward::stack)
Codec.STRING.lenientOptionalFieldOf("title", "").forGetter(ItemReward::title),
QuestIcons.CODEC.lenientOptionalFieldOf("icon", ItemQuestIcon.AIR).forGetter(ItemReward::icon),
ItemStackCodec.CODEC.lenientOptionalFieldOf("item", Items.AIR.getDefaultInstance()).forGetter(ItemReward::stack)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this wasnt optional before

).apply(instance, ItemReward::new));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public MapCodec<LootTableReward> codec(String id) {
return RecordCodecBuilder.mapCodec(instance -> instance.group(
RecordCodecBuilder.point(id),
Codec.STRING.optionalFieldOf("title", "").forGetter(LootTableReward::title),
QuestIcons.CODEC.optionalFieldOf("icon", ItemQuestIcon.AIR).forGetter(LootTableReward::icon),
QuestIcons.CODEC.lenientOptionalFieldOf("icon", ItemQuestIcon.AIR).forGetter(LootTableReward::icon),
ResourceLocation.CODEC.fieldOf("loot_table").forGetter(LootTableReward::lootTable)
).apply(instance, LootTableReward::new));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public MapCodec<SelectableReward> codec(String id) {
return RecordCodecBuilder.mapCodec(instance -> instance.group(
RecordCodecBuilder.point(id),
Codec.STRING.optionalFieldOf("title", "").forGetter(SelectableReward::title),
QuestIcons.CODEC.optionalFieldOf("icon", ItemQuestIcon.AIR).forGetter(SelectableReward::icon),
QuestIcons.CODEC.lenientOptionalFieldOf("icon", ItemQuestIcon.AIR).forGetter(SelectableReward::icon),
ExtraCodecs.POSITIVE_INT.fieldOf("amount").orElse(1).forGetter(SelectableReward::amount),
QuestRewards.CODEC.fieldOf("rewards").forGetter(SelectableReward::rewards)
).apply(instance, SelectableReward::new));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ public ResourceLocation id() {
public MapCodec<XpQuestReward> codec(String id) {
return RecordCodecBuilder.mapCodec(instance -> instance.group(
RecordCodecBuilder.point(id),
Codec.STRING.optionalFieldOf("title", "").forGetter(XpQuestReward::title),
QuestIcons.CODEC.optionalFieldOf("icon", ItemQuestIcon.AIR).forGetter(XpQuestReward::icon),
Codec.STRING.lenientOptionalFieldOf("title", "").forGetter(XpQuestReward::title),
QuestIcons.CODEC.lenientOptionalFieldOf("icon", ItemQuestIcon.AIR).forGetter(XpQuestReward::icon),
EnumCodec.of(XpType.class).fieldOf("xptype").orElse(XpType.LEVEL).forGetter(XpQuestReward::xpType),
Codec.INT.fieldOf("amount").orElse(1).forGetter(XpQuestReward::amount)
).apply(instance, XpQuestReward::new));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package earth.terrarium.heracles.api.tasks;

import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import net.minecraft.resources.ResourceLocation;

public interface QuestTaskType<T extends QuestTask<?, ?, T>> {

ResourceLocation id();

Codec<T> codec(String id);
MapCodec<T> codec(String id);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.mojang.serialization.Codec;
import com.mojang.serialization.DataResult;
import com.mojang.serialization.Encoder;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.KeyDispatchCodec;
import com.teamresourceful.bytecodecs.base.ByteCodec;
import com.teamresourceful.resourcefullib.common.codecs.maps.DispatchMapCodec;
Expand All @@ -27,13 +28,8 @@ public final class QuestTasks {

public static final ByteCodec<Map<String, QuestTask<?, ?, ?>>> BYTE_CODEC = ModUtils.toByteCodec(CODEC, "No quest task data found", "Failed to parse quest task data");

public static KeyDispatchCodec<QuestTaskType<?>, QuestTask<?, ?, ?>> of(final String typeKey, final Codec<QuestTaskType<?>> keyCodec, final Function<? super QuestTask<?, ?, ?>, ? extends DataResult<? extends QuestTaskType<?>>> type, final Function<? super QuestTaskType<?>, ? extends DataResult<? extends Codec<? extends QuestTask<?, ?, ?>>>> codec) {
return KeyDispatchCodec.unsafe(typeKey, keyCodec, type, codec, v -> getCodec(type, codec, v));
}

@SuppressWarnings("unchecked")
private static <K, V> DataResult<? extends Encoder<V>> getCodec(final Function<? super V, ? extends DataResult<? extends K>> type, final Function<? super K, ? extends DataResult<? extends Encoder<? extends V>>> encoder, final V input) {
return type.apply(input).<Encoder<? extends V>>flatMap(k -> encoder.apply(k).map(Function.identity())).map(c -> ((Encoder<V>) c));
public static KeyDispatchCodec<QuestTaskType<?>, QuestTask<?, ?, ?>> of(final String typeKey, final Codec<QuestTaskType<?>> keyCodec, final Function<? super QuestTask<?, ?, ?>, ? extends DataResult<? extends QuestTaskType<?>>> type, final Function<? super QuestTaskType<?>, ? extends DataResult<? extends MapCodec<? extends QuestTask<?, ?, ?>>>> codec) {
return new KeyDispatchCodec<>(typeKey, keyCodec, type, codec);
}

private static DataResult<? extends QuestTaskType<?>> decode(ResourceLocation id) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ private static List<Component> getAdvancementTitles(AdvancementTask task) {
titles.add(
Optionull.mapOrDefault(
ClientAdvancementDisplays.get(id),
display -> Optionull.mapOrDefault(display, DisplayInfo::getTitle, getTranslation(id)),
display -> Optionull.mapOrDefault(display.get(), DisplayInfo::getTitle, getTranslation(id)),
getTranslation(id)
)
);
Expand All @@ -157,7 +157,7 @@ private static List<ItemStack> getAdvancementIcons(AdvancementTask task) {
icons.add(
Optionull.map(
ClientAdvancementDisplays.get(id),
display -> Optionull.map(display, DisplayInfo::getIcon)
display -> Optionull.map(display.get(), DisplayInfo::getIcon)
)
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import earth.terrarium.heracles.api.client.theme.QuestScreenTheme;
import earth.terrarium.heracles.api.tasks.client.display.TaskTitleFormatter;
import earth.terrarium.heracles.api.tasks.defaults.CheckTask;
import earth.terrarium.heracles.client.widgets.buttons.ThemedButton;
import earth.terrarium.heracles.common.constants.ConstantComponents;
import earth.terrarium.heracles.common.handlers.progress.TaskProgress;
import earth.terrarium.heracles.common.network.NetworkHandler;
Expand Down Expand Up @@ -54,8 +55,11 @@ public void render(GuiGraphics graphics, ScissorBoxStack scissor, int x, int y,

int buttonY = y + 11;
boolean buttonHovered = mouseX > x + width - 30 && mouseX < x + width - 10 && mouseY > buttonY && mouseY < buttonY + 20;
int v = isCompletable() ? (buttonHovered ? 40 : 20) : 0;
graphics.blitNineSliced(BUTTON_TEXTURE, x + width - 30, buttonY, 20, 20, 3, 200, 20, 0, v);
if (isCompletable()) {
graphics.blitSprite(hovered ? ThemedButton.SPRITE_COMPLETABLE_HOVERED : ThemedButton.SPRITE_COMPLETABLE, x + width - 30, buttonY, 20, 20);
} else {
graphics.blitSprite(ThemedButton.SPRITE_DISABLED, x + width - 30, buttonY, 20, 20);
}

graphics.blit(CHECK_TEXTURE, x + width - 30 + 2, buttonY + 2, 0, 0, 16, 16, 16, 16);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,9 @@ public ItemTaskWidget(String quest, GatherItemTask task, TaskProgress<NumericTag
this.stacks = task.item().getValue().map(
item -> {
ItemStack stack = item.getDefaultInstance();
if (!NbtPredicate.isEmpty(task.components().tag())) stack.getOrCreateTag().merge(task.components().tag());
if (task.components().asPatch() != null) {
stack.applyComponents(task.components().asPatch());
}
return List.of(stack);
},
tag -> ModUtils.getValue(Registries.ITEM, tag).stream().map(ItemStack::new).toList()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package earth.terrarium.heracles.api.tasks.defaults;

import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.teamresourceful.resourcefullib.common.codecs.CodecExtras;
import earth.terrarium.heracles.Heracles;
Expand All @@ -12,7 +13,6 @@
import earth.terrarium.heracles.api.tasks.QuestTaskType;
import earth.terrarium.heracles.api.tasks.storage.defaults.BooleanTaskStorage;
import earth.terrarium.heracles.mixins.common.PlayerAdvancementAccessor;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementHolder;
import net.minecraft.advancements.AdvancementProgress;
import net.minecraft.nbt.NumericTag;
Expand Down Expand Up @@ -74,11 +74,11 @@ public ResourceLocation id() {
}

@Override
public Codec<AdvancementTask> codec(String id) {
return RecordCodecBuilder.create(instance -> instance.group(
public MapCodec<AdvancementTask> codec(String id) {
return RecordCodecBuilder.mapCodec(instance -> instance.group(
RecordCodecBuilder.point(id),
Codec.STRING.optionalFieldOf("title", "").forGetter(AdvancementTask::title),
QuestIcons.CODEC.optionalFieldOf("icon", ItemQuestIcon.AIR).forGetter(AdvancementTask::icon),
Codec.STRING.lenientOptionalFieldOf("title", "").forGetter(AdvancementTask::title),
QuestIcons.CODEC.lenientOptionalFieldOf("icon", ItemQuestIcon.AIR).forGetter(AdvancementTask::icon),
CodecExtras.set(ResourceLocation.CODEC).fieldOf("advancements").forGetter(AdvancementTask::advancements)
).apply(instance, AdvancementTask::new));
}
Expand Down
Loading