Skip to content

Commit

Permalink
1.0.0リリース
Browse files Browse the repository at this point in the history
  • Loading branch information
KatatsumuriPan committed Jan 19, 2024
1 parent 7a38d8f commit cd56846
Show file tree
Hide file tree
Showing 18 changed files with 566 additions and 77 deletions.
14 changes: 14 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import javax.print.attribute.standard.JobOriginatingUserName

plugins {
id 'fabric-loom' version '1.5-SNAPSHOT'
id 'maven-publish'
Expand All @@ -16,6 +18,9 @@ repositories {
// Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
// See https://docs.gradle.org/current/userguide/declaring_repositories.html
// for more information about repositories.
maven {
url 'https://cursemaven.com'
}
}

dependencies {
Expand All @@ -31,6 +36,12 @@ dependencies {
// These are included in the Fabric API production distribution and allow you to update your mod to the latest modules at a later more convenient time.

// modImplementation "net.fabricmc.fabric-api:fabric-api-deprecated:${project.fabric_version}"

modImplementation("curse.maven:ftb-quests-fabric-438496:4297998")
modImplementation("curse.maven:item-filters-309674:3769704")
modImplementation("curse.maven:ftb-library-fabric-438495:3553839")
modImplementation("curse.maven:ftb-teams-fabric-438497:3535952")
modImplementation("curse.maven:architectury-api-419699:4521288")
}

processResources {
Expand Down Expand Up @@ -76,4 +87,7 @@ publishing {
// The repositories here will be used for publishing your artifact, not for
// retrieving dependencies.
}
}
runClient{
args("--username=Katatsumuri_pan")
}
21 changes: 0 additions & 21 deletions src/main/java/kapn/bq_popup/BetterQuestPopup.java

This file was deleted.

15 changes: 0 additions & 15 deletions src/main/java/kapn/bq_popup/mixin/ExampleMixin.java

This file was deleted.

16 changes: 16 additions & 0 deletions src/main/java/kpan/bq_popup/ModMain.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package kpan.bq_popup;

import kpan.bq_popup.client.SoundHandler;
import net.fabricmc.api.ModInitializer;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class ModMain implements ModInitializer {
public static final String MOD_ID = "better_quest_popup";
public static final Logger LOGGER = LogManager.getLogger(MOD_ID);

@Override
public void onInitialize() {
SoundHandler.init();
}
}
17 changes: 17 additions & 0 deletions src/main/java/kpan/bq_popup/ModMainClient.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package kpan.bq_popup;

import kpan.bq_popup.client.QuestCompletePopup;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;

public class ModMainClient implements ClientModInitializer {

@Override
public void onInitializeClient() {
HudRenderCallback.EVENT.register((matrixStack, tickDelta) -> {
QuestCompletePopup.render(matrixStack);
});
ClientTickEvents.END_CLIENT_TICK.register(QuestCompletePopup::ticking);
}
}
139 changes: 139 additions & 0 deletions src/main/java/kpan/bq_popup/client/DisplayedPopup.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
package kpan.bq_popup.client;

import dev.ftb.mods.ftbquests.client.ClientQuestFile;
import dev.ftb.mods.ftbquests.gui.ToastQuestObject;
import dev.ftb.mods.ftbquests.quest.Chapter;
import dev.ftb.mods.ftbquests.quest.ChapterGroup;
import dev.ftb.mods.ftbquests.quest.Quest;
import dev.ftb.mods.ftbquests.quest.QuestObject;
import dev.ftb.mods.ftbquests.quest.TeamData;
import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
import it.unimi.dsi.fastutil.longs.LongSet;
import kpan.bq_popup.ModMain;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ServerInfo;
import org.apache.commons.lang3.StringUtils;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;

public class DisplayedPopup {
public static LongSet popupDisplayed = new LongOpenHashSet();
private static final File cacheDir = new File(new File(MinecraftClient.getInstance().runDirectory, ModMain.MOD_ID), "completed-cache");

public static void add(QuestObject object) {
popupDisplayed.add(object.id);
writeToFile();
}
public static void remove(QuestObject object) {
popupDisplayed.remove(object.id);
writeToFile();
}

public static void display(QuestObject object) {
if (popupDisplayed.contains(object.id)) {
if (object instanceof Quest)
MinecraftClient.getInstance().getToastManager().add(new ToastQuestObject(object));
} else {
QuestCompletePopup.add(object);
add(object);
}
}

public static void onLoad() {
ClientQuestFile questFile = ClientQuestFile.INSTANCE;
readFromFile();
if (!popupDisplayed.isEmpty()) {
TeamData teamData = questFile.self;
for (ChapterGroup chapterGroup : questFile.chapterGroups) {
for (Chapter chapter : chapterGroup.chapters) {
for (Quest quest : chapter.quests) {
if (teamData.isCompleted(quest) && !popupDisplayed.contains(quest.id))
QuestCompletePopup.add(quest);
}
if (teamData.isCompleted(chapter) && !popupDisplayed.contains(chapter.id))
QuestCompletePopup.add(chapter);
}
}
if (teamData.isCompleted(questFile) && !popupDisplayed.contains(questFile.id))
QuestCompletePopup.add(questFile);
}
sync(questFile);
}

public static void sync(ClientQuestFile questFile) {
popupDisplayed.clear();
TeamData teamData = questFile.self;
for (ChapterGroup chapterGroup : questFile.chapterGroups) {
for (Chapter chapter : chapterGroup.chapters) {
for (Quest quest : chapter.quests) {
if (teamData.isCompleted(quest))
popupDisplayed.add(quest.id);
}
if (teamData.isCompleted(chapter))
popupDisplayed.add(chapter.id);
}
}
if (teamData.isCompleted(questFile))
popupDisplayed.add(questFile.id);
writeToFile();
}

private static void readFromFile() {
popupDisplayed.clear();
ServerInfo currentServerEntry = MinecraftClient.getInstance().getCurrentServerEntry();
if (currentServerEntry == null)
return;
try {
if (!cacheDir.exists())
return;
for (String line : Files.readAllLines(new File(cacheDir, sanitizeFileName(currentServerEntry.address)).toPath(), StandardCharsets.UTF_8)) {
if (line.isEmpty())
continue;
popupDisplayed.add(Long.parseLong(line));
}
} catch (IOException | NumberFormatException e) {
ModMain.LOGGER.error("Error while reading the cache.", e);
}
}
private static void writeToFile() {
ServerInfo currentServerEntry = MinecraftClient.getInstance().getCurrentServerEntry();
if (currentServerEntry != null) {
File file = new File(cacheDir, sanitizeFileName(currentServerEntry.address));
try {
if (file.getParentFile() != null)
file.getParentFile().mkdirs();

if (!file.exists() && !file.createNewFile()) {
ModMain.LOGGER.error("Cannot create a cache");
return;
}

if (file.canWrite()) {
FileOutputStream fos = new FileOutputStream(file);
BufferedWriter buffer = new BufferedWriter(new OutputStreamWriter(fos, StandardCharsets.UTF_8));

for (Long id : popupDisplayed) {
buffer.write(id + "\n");
}

buffer.close();
fos.close();
} else {
ModMain.LOGGER.error("Cannot write the cache file");
}
} catch (IOException e) {
ModMain.LOGGER.error("Error while saving the cache.", e);
}
}
}

private static String sanitizeFileName(String name) {
return StringUtils.replaceAll(name, "[/\\:*?\"<>|]", "-");
}
}
61 changes: 61 additions & 0 deletions src/main/java/kpan/bq_popup/client/OtherTeamToast.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package kpan.bq_popup.client;


import com.mojang.blaze3d.systems.RenderSystem;
import dev.ftb.mods.ftblibrary.ui.GuiHelper;
import dev.ftb.mods.ftbquests.gui.ToastQuestObject;
import dev.ftb.mods.ftbquests.quest.QuestObject;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.DiffuseLighting;
import net.minecraft.client.toast.Toast;
import net.minecraft.client.toast.ToastManager;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.OrderedText;
import net.minecraft.util.math.MathHelper;

import java.util.List;
import java.util.Objects;

public class OtherTeamToast extends ToastQuestObject {
private final QuestObject object;
private final String team;
public OtherTeamToast(QuestObject questObject, String team) {
super(questObject);
object = questObject;
this.team = team;
}

@Override
public Toast.Visibility draw(MatrixStack matrixStack, ToastManager gui, long delta) {
GuiHelper.setupDrawing();
MinecraftClient mc = gui.getGame();
mc.getTextureManager().bindTexture(TEXTURE);
RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
gui.drawTexture(matrixStack, 0, 0, 0, 0, 160, 32);
List<OrderedText> list = mc.textRenderer.wrapLines(getSubtitle(), 125);
int color = isImportant() ? 0xff88ff : 0xffff00;
int y = 16 - Math.min(list.size() + 1, 3) * mc.textRenderer.fontHeight / 2;
{
if (delta < 1500L) {
int alpha = MathHelper.floor(MathHelper.clamp((float) (1500L - delta) / 300.0F, 0.0F, 1.0F) * 255.0F) << 24 | 0x400_0000;
mc.textRenderer.drawWithShadow(matrixStack, team, 30.0F, y, color | alpha);
y += mc.textRenderer.fontHeight;
mc.textRenderer.drawWithShadow(matrixStack, getTitle(), 30.0F, y, color | alpha);
} else {
int alpha = MathHelper.floor(MathHelper.clamp((float) (delta - 1500L) / 300.0F, 0.0F, 1.0F) * 252.0F) << 24 | 0x400_0000;
Objects.requireNonNull(mc.textRenderer);
for (OrderedText s : list) {
mc.textRenderer.drawWithShadow(matrixStack, s, 30.0F, (float) y, 0xff_ffff | alpha);
Objects.requireNonNull(mc.textRenderer);
y += mc.textRenderer.fontHeight;
}
}
}

GuiHelper.setupDrawing();
DiffuseLighting.enableGuiDepthLighting();
getIcon().draw(matrixStack, 8, 8, 16, 16);
return delta >= 5000L ? Visibility.HIDE : Visibility.SHOW;
}

}
Loading

0 comments on commit cd56846

Please sign in to comment.