Skip to content
Merged

Dev #46

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
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [21.11.0]

### Changed
* Ported to Minecraft 1.21.11
* Note: no KubeJS integration (KubeJS not ported)

## [21.1.7]

### Changed
Expand Down
12 changes: 10 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
plugins {
id "architectury-plugin" version "3.4-SNAPSHOT"
id "dev.architectury.loom" version "1.10-SNAPSHOT" apply false
id "me.modmuss50.mod-publish-plugin" version "0.5.1"
id "dev.architectury.loom" version "1.13-SNAPSHOT" apply false
id "me.modmuss50.mod-publish-plugin" version "1.1.0"
}

apply from: 'https://raw.githubusercontent.com/FTBTeam/mods-meta/main/gradle/changelog.gradle'
Expand Down Expand Up @@ -94,6 +94,14 @@ allprojects {
includeGroup "curse.maven"
}
}

maven {
url "https://maven.twelveiterations.com/repository/maven-public/"

content {
includeGroup "net.blay09.mods"
}
}
}

tasks.withType(JavaCompile).configureEach {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package dev.ftb.mods.ftbxmodcompat.config;

import dev.ftb.mods.ftblibrary.config.NameMap;
import dev.ftb.mods.ftblibrary.snbt.config.BooleanValue;
import dev.ftb.mods.ftblibrary.snbt.config.EnumValue;
import dev.ftb.mods.ftblibrary.snbt.config.SNBTConfig;
import dev.ftb.mods.ftblibrary.config.value.BooleanValue;
import dev.ftb.mods.ftblibrary.config.value.Config;
import dev.ftb.mods.ftblibrary.config.value.EnumValue;
import dev.ftb.mods.ftblibrary.util.NameMap;
import dev.ftb.mods.ftbxmodcompat.FTBXModCompat;

import java.util.function.BooleanSupplier;

public interface FTBXModConfig {
SNBTConfig CONFIG = SNBTConfig.create(FTBXModCompat.MOD_ID);
Config CONFIG = Config.create(FTBXModCompat.MOD_ID);

EnumValue<StageSelector> STAGE_SELECTOR = CONFIG.addEnum("stage_selector", NameMap.of(StageSelector.DEFAULT, StageSelector.values()).create())
.comment("Select the game stages implementation to use", "DEFAULT: use KubeJS, Game Stages, vanilla in preference order, depending on mod availability");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package dev.ftb.mods.ftbxmodcompat.ftbchunks.ftbranks;

import com.mojang.authlib.GameProfile;
import dev.ftb.mods.ftbchunks.api.ChunkTeamData;
import dev.ftb.mods.ftbchunks.api.FTBChunksAPI;
import dev.ftb.mods.ftbranks.api.RankManager;
import dev.ftb.mods.ftbranks.api.event.*;
import dev.ftb.mods.ftbteams.api.FTBTeamsAPI;
import dev.ftb.mods.ftbxmodcompat.FTBXModCompat;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.players.NameAndId;

import static dev.ftb.mods.ftbchunks.integration.PermissionsHelper.*;

Expand Down Expand Up @@ -54,10 +54,10 @@ private static void updateAll(RankManager manager) {
}
}

private static void updateForPlayer(RankManager manager, GameProfile profile) {
FTBTeamsAPI.api().getManager().getTeamForPlayerID(profile.getId()).ifPresent(team -> {
private static void updateForPlayer(RankManager manager, NameAndId profile) {
FTBTeamsAPI.api().getManager().getTeamForPlayerID(profile.id()).ifPresent(team -> {
ChunkTeamData teamData = FTBChunksAPI.api().getManager().getOrCreateData(team);
ServerPlayer player = manager.getServer().getPlayerList().getPlayer(profile.getId());
ServerPlayer player = manager.getServer().getPlayerList().getPlayer(profile.id());
if (player != null) {
teamData.checkMemberForceLoading(player.getUUID());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
import net.minecraft.network.chat.Component;

public class WaystoneMapIcon extends StaticMapIcon {
public static final Icon ICON = Icon.getIcon("ftbchunks:textures/waystone.png");
public static final Icon ICON_GLOBAL = ICON.withTint(Color4I.rgb(0xEB78E5));
public static final Icon<?> ICON = Icon.getIcon("ftbchunks:textures/waystone.png");
public static final Icon<?> ICON_GLOBAL = ICON.withTint(Color4I.rgb(0xEB78E5));
public final Component name;
public final boolean global;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.Level;

import java.util.*;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public class WaystonesCommon {
private static final Map<ResourceKey<Level>, Map<UUID,WaystoneMapIcon>> WAYSTONES = new HashMap<>();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,30 @@
package dev.ftb.mods.ftbxmodcompat.ftbquests;

import net.minecraft.core.Holder;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.resources.Identifier;
import net.minecraft.world.item.Item;

public class QuestItems {
private static final ResourceKey<Item> QUEST_BOOK = ResourceKey.create(Registries.ITEM, ResourceLocation.parse("ftbquests:book"));
private static final ResourceKey<Item> LOOT_CRATE = ResourceKey.create(Registries.ITEM, ResourceLocation.parse("ftbquests:lootcrate"));
private static final ResourceKey<Item> QUEST_BOOK = ResourceKey.create(Registries.ITEM, Identifier.parse("ftbquests:book"));
private static final ResourceKey<Item> LOOT_CRATE = ResourceKey.create(Registries.ITEM, Identifier.parse("ftbquests:lootcrate"));

private static Item questBook;
private static Item lootCrate;
private static Holder<Item> questBook;
private static Holder<Item> lootCrate;

public static Item questBook() {
if (questBook == null) {
questBook = BuiltInRegistries.ITEM.getOrThrow(QUEST_BOOK);
}
return questBook;
return questBook.value();
}

public static Item lootCrate() {
if (lootCrate == null) {
lootCrate = BuiltInRegistries.ITEM.getOrThrow(LOOT_CRATE);
}
return lootCrate;
return lootCrate.value();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,33 +3,33 @@
import dev.ftb.mods.ftbquests.api.FTBQuestsAPI;
import dev.ftb.mods.ftbquests.block.entity.BaseBarrierBlockEntity;
import dev.ftb.mods.ftbquests.quest.TeamData;
import net.minecraft.resources.ResourceLocation;
import org.jetbrains.annotations.Nullable;
import net.minecraft.resources.Identifier;
import org.jspecify.annotations.Nullable;
import snownee.jade.api.BlockAccessor;
import snownee.jade.api.IComponentProvider;
import snownee.jade.api.ITooltip;
import snownee.jade.api.config.IPluginConfig;
import snownee.jade.api.ui.IElement;
import snownee.jade.api.ui.IElementHelper;
import snownee.jade.api.ui.Element;
import snownee.jade.api.ui.JadeUI;

public class BarrierComponentProvider implements IComponentProvider<BlockAccessor> {
@Override
public void appendTooltip(ITooltip iTooltip, BlockAccessor blockAccessor, IPluginConfig iPluginConfig) {
}

@Override
public @Nullable IElement getIcon(BlockAccessor accessor, IPluginConfig config, IElement currentIcon) {
public @Nullable Element getIcon(BlockAccessor accessor, IPluginConfig config, @Nullable Element currentIcon) {
if (accessor.getBlockEntity() instanceof BaseBarrierBlockEntity barrier
&& !barrier.getSkin().isEmpty()
&& !TeamData.get(accessor.getPlayer()).getCanEdit(accessor.getPlayer()))
{
return IElementHelper.get().item(barrier.getSkin());
return JadeUI.item(barrier.getSkin());
}
return null;
}

@Override
public ResourceLocation getUid() {
return ResourceLocation.fromNamespaceAndPath(FTBQuestsAPI.MOD_ID, "barrier");
public Identifier getUid() {
return Identifier.fromNamespaceAndPath(FTBQuestsAPI.MOD_ID, "barrier");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@

public class JadeQuestsSetup {
public static void register(IWailaClientRegistration registration) {
registration.usePickedResult(ModBlocks.BARRIER.get());
registration.usePickedResult(ModBlocks.STAGE_BARRIER.get());
// registration.usePickedResult(ModBlocks.BARRIER.get());
// registration.usePickedResult(ModBlocks.STAGE_BARRIER.get());

registration.registerBlockComponent(new BarrierComponentProvider(), QuestBarrierBlock.class);
registration.registerBlockIcon(new BarrierComponentProvider(), QuestBarrierBlock.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,26 +15,26 @@
import mezz.jei.api.registration.IRecipeCategoryRegistration;
import mezz.jei.api.registration.ISubtypeRegistration;
import mezz.jei.api.runtime.IJeiRuntime;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.resources.Identifier;
import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.Nullable;

@JeiPlugin
public class FTBQuestsJEIIntegration implements IModPlugin {
private static final ResourceLocation UID = ResourceLocation.fromNamespaceAndPath(FTBXModCompat.MOD_ID, "ftbquests_jei");
private static final Identifier UID = Identifier.fromNamespaceAndPath(FTBXModCompat.MOD_ID, "ftbquests_jei");
public static IJeiRuntime runtime;

@Override
public void onRuntimeAvailable(IJeiRuntime r) {
runtime = FTBXModCompat.isFTBQuestsLoaded ? r : null;

if (ClientQuestFile.exists()) {
ClientQuestFile.INSTANCE.updateLootCrates();
ClientQuestFile.getInstance().updateLootCrates();
}
}

@Override
public ResourceLocation getPluginUid() {
public Identifier getPluginUid() {
return UID;
}

Expand All @@ -47,20 +47,15 @@ public void registerItemSubtypes(ISubtypeRegistration r) {
public @Nullable Object getSubtypeData(ItemStack ingredient, UidContext context) {
return ingredient.getOrDefault(ModDataComponents.LOOT_CRATE.get(), "");
}

@Override
public String getLegacyStringSubtypeInfo(ItemStack ingredient, UidContext context) {
return "";
}
});
}
}

@Override
public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) {
if (FTBXModCompat.isFTBQuestsLoaded) {
registration.addRecipeCatalyst(new ItemStack(QuestItems.questBook()), JEIRecipeTypes.QUEST);
registration.addRecipeCatalyst(new ItemStack(QuestItems.lootCrate()), JEIRecipeTypes.LOOT_CRATE);
registration.addCraftingStation(JEIRecipeTypes.QUEST, new ItemStack(QuestItems.questBook()));
registration.addCraftingStation(JEIRecipeTypes.LOOT_CRATE, new ItemStack(QuestItems.lootCrate()));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
import dev.ftb.mods.ftbquests.api.FTBQuestsAPI;
import dev.ftb.mods.ftbxmodcompat.ftbquests.recipemod_common.WrappedLootCrate;
import dev.ftb.mods.ftbxmodcompat.ftbquests.recipemod_common.WrappedQuest;
import mezz.jei.api.recipe.RecipeType;
import mezz.jei.api.recipe.types.IRecipeType;

public class JEIRecipeTypes {
public static RecipeType<WrappedQuest> QUEST = RecipeType.create(FTBQuestsAPI.MOD_ID, "quest", WrappedQuest.class);
public static RecipeType<WrappedLootCrate> LOOT_CRATE = RecipeType.create(FTBQuestsAPI.MOD_ID, "loot_crate", WrappedLootCrate.class);
public static IRecipeType<WrappedQuest> QUEST = IRecipeType.create(FTBQuestsAPI.MOD_ID, "quest", WrappedQuest.class);
public static IRecipeType<WrappedLootCrate> LOOT_CRATE = IRecipeType.create(FTBQuestsAPI.MOD_ID, "loot_crate", WrappedLootCrate.class);
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package dev.ftb.mods.ftbxmodcompat.ftbquests.jei;

import com.mojang.blaze3d.vertex.PoseStack;
import dev.ftb.mods.ftblibrary.ui.GuiHelper;
import dev.ftb.mods.ftblibrary.client.gui.GuiHelper;
import dev.ftb.mods.ftbquests.quest.loot.WeightedReward;
import dev.ftb.mods.ftbquests.registry.ModDataComponents;
import dev.ftb.mods.ftbquests.registry.ModItems;
Expand All @@ -14,8 +13,8 @@
import mezz.jei.api.helpers.IGuiHelper;
import mezz.jei.api.recipe.IFocusGroup;
import mezz.jei.api.recipe.RecipeIngredientRole;
import mezz.jei.api.recipe.RecipeType;
import mezz.jei.api.recipe.category.IRecipeCategory;
import mezz.jei.api.recipe.types.IRecipeType;
import net.minecraft.ChatFormatting;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.network.chat.Component;
Expand All @@ -42,25 +41,23 @@ public int getHeight() {

@Override
public void draw(GuiGraphics graphics, int xOffset, int yOffset) {
PoseStack poseStack = graphics.pose();

poseStack.pushPose();
poseStack.translate(xOffset + 8, yOffset + 8, 100);
graphics.pose().pushMatrix();
graphics.pose().translate(xOffset + 8, yOffset + 8);

List<WrappedLootCrate> crates = LootCrateRecipeManagerPlugin.INSTANCE.getWrappedLootCrates();
if (!crates.isEmpty()) {
GuiHelper.drawItem(graphics, crates.get((int) ((System.currentTimeMillis() / 1000L) % crates.size())).crateStack, 0, true, null);
GuiHelper.drawItem(graphics, crates.get((int) ((System.currentTimeMillis() / 1000L) % crates.size())).crateStack, true, null);
} else {
GuiHelper.drawItem(graphics, new ItemStack(ModItems.LOOTCRATE.get()), 0, true, null);
GuiHelper.drawItem(graphics, new ItemStack(ModItems.LOOTCRATE.get()), true, null);
}

poseStack.popPose();
graphics.pose().popMatrix();
}
};
}

@Override
public RecipeType<WrappedLootCrate> getRecipeType() {
public IRecipeType<WrappedLootCrate> getRecipeType() {
return JEIRecipeTypes.LOOT_CRATE;
}

Expand All @@ -70,8 +67,13 @@ public Component getTitle() {
}

@Override
public IDrawable getBackground() {
return background;
public int getWidth() {
return background.getWidth();
}

@Override
public int getHeight() {
return background.getHeight();
}

@Override
Expand All @@ -83,13 +85,13 @@ public IDrawable getIcon() {
public void setRecipe(IRecipeLayoutBuilder builder, WrappedLootCrate recipe, IFocusGroup focuses) {
ItemStack catStack = recipe.crateStack.copy();
catStack.set(ModDataComponents.LOOT_CRATE.get(), recipe.crate.getStringID());
builder.addSlot(RecipeIngredientRole.CATALYST, 30, 11)
.addIngredient(VanillaTypes.ITEM_STACK, catStack);
builder.addSlot(RecipeIngredientRole.CRAFTING_STATION, 30, 11)
.add(VanillaTypes.ITEM_STACK, catStack);

for (int slot = 0; slot < Math.min(WrappedLootCrate.ITEMS, recipe.outputs.size()); slot++) {
int finalSlot = slot;
builder.addSlot(RecipeIngredientRole.OUTPUT, (slot % WrappedLootCrate.ITEMSX) * 18, (slot / WrappedLootCrate.ITEMSX) * 18 + 36)
.addIngredients(recipe.outputIngredients().get(slot))
.add(recipe.outputIngredients().get(slot))
.addRichTooltipCallback((recipeSlotView, tooltip) -> recipeSlotView.getDisplayedIngredient()
.flatMap(ingr -> ingr.getIngredient(VanillaTypes.ITEM_STACK)).ifPresent(stack -> {
if (ItemStack.isSameItemSameComponents(stack, recipe.outputs.get(finalSlot))) {
Expand Down
Loading