mirror of
https://github.com/FalsePattern/FalsePatternLib.git
synced 2026-11-15 11:24:45 +00:00
TOASTED. R O A S T E D.
This commit is contained in:
27 files changed
+787
-23
No files matched your search
@@ -23,6 +23,7 @@ package com.falsepattern.lib.internal;
|
||||
import com.falsepattern.lib.internal.proxy.CommonProxy;
|
||||
|
||||
import cpw.mods.fml.common.*;
|
||||
import cpw.mods.fml.common.event.FMLConstructionEvent;
|
||||
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||
|
||||
@@ -41,7 +42,7 @@ import org.apache.logging.log4j.Logger;
|
||||
name = Tags.MODNAME,
|
||||
version = Tags.VERSION,
|
||||
acceptedMinecraftVersions = "[1.7.10]",
|
||||
guiFactory = Tags.GROUPNAME + ".internal.LibraryGuiFactory",
|
||||
guiFactory = Tags.GROUPNAME + ".internal.config.LibraryGuiFactory",
|
||||
acceptableRemoteVersions = "*")
|
||||
public class FalsePatternLib {
|
||||
public static final String UPDATE_URL = "https://falsepattern.com/mc/versions.json";
|
||||
@@ -58,6 +59,11 @@ public class FalsePatternLib {
|
||||
log.info("Version " + Tags.VERSION + " initialized!");
|
||||
}
|
||||
|
||||
@Mod.EventHandler
|
||||
public void construct(FMLConstructionEvent e) {
|
||||
proxy.construct(e);
|
||||
}
|
||||
|
||||
@Mod.EventHandler
|
||||
public void preInit(FMLPreInitializationEvent e) {
|
||||
proxy.preInit(e);
|
||||
|
||||
+10
-7
@@ -18,21 +18,24 @@
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.falsepattern.lib.internal;
|
||||
package com.falsepattern.lib.internal.config;
|
||||
|
||||
import com.falsepattern.lib.config.Config;
|
||||
import com.falsepattern.lib.internal.Tags;
|
||||
|
||||
@Config(modid = Tags.MODID)
|
||||
public class LibraryConfig {
|
||||
@Config.Comment({"Used to control whether FalsePatternLib should check for outdated mods.",
|
||||
"If you're building a public modpack, you should turn this off so that your users don't " +
|
||||
"get nagged about outdated mods."})
|
||||
"If you're building a public modpack, you should turn this off so that your users don't " +
|
||||
"get nagged about outdated mods."})
|
||||
@Config.LangKey("config.falsepatternlib.updatecheck")
|
||||
public static boolean ENABLE_UPDATE_CHECKER = true;
|
||||
@Config.DefaultBoolean(true)
|
||||
public static boolean ENABLE_UPDATE_CHECKER;
|
||||
|
||||
@Config.Comment({"Used to control whether FalsePatternLib should be allowed to use the internet.",
|
||||
"If this is disabled, library downloads will be blocked.",
|
||||
"Note that if a mod tries to download a library that is not downloaded yet, the game will crash."})
|
||||
"If this is disabled, library downloads will be blocked.",
|
||||
"Note that if a mod tries to download a library that is not downloaded yet, the game will crash."})
|
||||
@Config.LangKey("config.falsepatternlib.disableinternet")
|
||||
public static boolean ENABLE_LIBRARY_DOWNLOADS = true;
|
||||
@Config.DefaultBoolean(true)
|
||||
public static boolean ENABLE_LIBRARY_DOWNLOADS;
|
||||
}
|
||||
+4
-2
@@ -18,10 +18,12 @@
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.falsepattern.lib.internal;
|
||||
package com.falsepattern.lib.internal.config;
|
||||
|
||||
import com.falsepattern.lib.config.ConfigException;
|
||||
import com.falsepattern.lib.config.SimpleGuiConfig;
|
||||
import com.falsepattern.lib.internal.Tags;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
@@ -29,6 +31,6 @@ import net.minecraft.client.gui.GuiScreen;
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class LibraryGuiConfig extends SimpleGuiConfig {
|
||||
public LibraryGuiConfig(GuiScreen parent) throws ConfigException {
|
||||
super(parent, LibraryConfig.class, Tags.MODID, Tags.MODNAME);
|
||||
super(parent, new Class[]{LibraryConfig.class, ToastConfig.class}, Tags.MODID, Tags.MODNAME);
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -18,7 +18,7 @@
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.falsepattern.lib.internal;
|
||||
package com.falsepattern.lib.internal.config;
|
||||
|
||||
import com.falsepattern.lib.config.SimpleGuiFactory;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
@@ -0,0 +1,55 @@
|
||||
/**
|
||||
* Copyright (C) 2022 FalsePattern
|
||||
* All Rights Reserved
|
||||
*
|
||||
* The above copyright notice, this permission notice and the word "SNEED"
|
||||
* shall be included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.falsepattern.lib.internal.config;
|
||||
|
||||
import com.falsepattern.lib.config.Config;
|
||||
import com.falsepattern.lib.internal.Tags;
|
||||
|
||||
@Config(modid = Tags.MODID,
|
||||
category = "toasts")
|
||||
public class ToastConfig {
|
||||
@Config.Comment("The maximum amount of toasts to show on the screen")
|
||||
@Config.LangKey("config.falsepatternlib.maxtoasts")
|
||||
@Config.DefaultInt(5)
|
||||
@Config.RangeInt(min = 1,
|
||||
max = 10)
|
||||
public static int MAX_VISIBLE;
|
||||
|
||||
@Config.Comment("The amount of empty space from the top of the screen in pixels")
|
||||
@Config.LangKey("config.falsepatternlib.toastoffset")
|
||||
@Config.DefaultInt(0)
|
||||
@Config.RangeInt(min = 0,
|
||||
max = 10000)
|
||||
public static int Y_OFFSET;
|
||||
|
||||
@Config.Comment("Which side of the screen should toasts show up on")
|
||||
@Config.LangKey("config.falsepatternlib.toastalign")
|
||||
@Config.DefaultEnum("Right")
|
||||
public static Side ALIGN;
|
||||
|
||||
public static boolean leftAlign() {
|
||||
return ALIGN == Side.Left;
|
||||
}
|
||||
|
||||
public enum Side {
|
||||
Left, Right
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -24,7 +24,7 @@ import com.falsepattern.lib.dependencies.DependencyLoader;
|
||||
import com.falsepattern.lib.dependencies.Version;
|
||||
import com.falsepattern.lib.internal.FalsePatternLib;
|
||||
import com.falsepattern.lib.internal.Internet;
|
||||
import com.falsepattern.lib.internal.LibraryConfig;
|
||||
import com.falsepattern.lib.internal.config.LibraryConfig;
|
||||
import com.falsepattern.lib.internal.Tags;
|
||||
import com.falsepattern.lib.util.FileUtil;
|
||||
import lombok.NonNull;
|
||||
|
||||
@@ -0,0 +1,186 @@
|
||||
/**
|
||||
* Copyright (C) 2022 FalsePattern
|
||||
* All Rights Reserved
|
||||
* <p>
|
||||
* The above copyright notice, this permission notice and the word "SNEED"
|
||||
* shall be included in all copies or substantial portions of the Software.
|
||||
* <p>
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* <p>
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* <p>
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.falsepattern.lib.internal.impl.toast;
|
||||
|
||||
import com.falsepattern.lib.internal.config.LibraryConfig;
|
||||
import com.falsepattern.lib.internal.config.ToastConfig;
|
||||
import com.falsepattern.lib.toasts.IToast;
|
||||
import com.falsepattern.lib.util.MathUtil;
|
||||
import com.google.common.collect.Queues;
|
||||
import lombok.val;
|
||||
import lombok.var;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Gui;
|
||||
import net.minecraft.client.gui.ScaledResolution;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
import cpw.mods.fml.common.gameevent.TickEvent;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Arrays;
|
||||
import java.util.Deque;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class GuiToastImpl extends Gui {
|
||||
private final Minecraft mc;
|
||||
private final Deque<IToast> toastsQueue = Queues.newArrayDeque();
|
||||
private ToastInstance<?>[] visible = new ToastInstance[0];
|
||||
private static GuiToastImpl instance;
|
||||
|
||||
public static void initialize(Minecraft mc) {
|
||||
if (instance != null) {
|
||||
return;
|
||||
}
|
||||
instance = new GuiToastImpl(mc);
|
||||
FMLCommonHandler.instance().bus().register(instance);
|
||||
}
|
||||
|
||||
public static GuiToastImpl getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void updateToasts(TickEvent.RenderTickEvent event) {
|
||||
if ( event.phase != TickEvent.Phase.END) {
|
||||
return;
|
||||
}
|
||||
mc.mcProfiler.startSection("toasts");
|
||||
drawToast(new ScaledResolution(mc, mc.displayWidth, mc.displayHeight));
|
||||
mc.mcProfiler.endSection();
|
||||
}
|
||||
|
||||
|
||||
public GuiToastImpl(Minecraft mcIn) {
|
||||
this.mc = mcIn;
|
||||
}
|
||||
|
||||
public void drawToast(ScaledResolution resolution) {
|
||||
if (!this.mc.gameSettings.hideGUI) {
|
||||
RenderHelper.disableStandardItemLighting();
|
||||
if (ToastConfig.MAX_VISIBLE != visible.length) {
|
||||
visible = Arrays.copyOf(visible, ToastConfig.MAX_VISIBLE);
|
||||
}
|
||||
|
||||
for (int i = 0; i < this.visible.length; ++i) {
|
||||
val toast = this.visible[i];
|
||||
|
||||
if (toast != null && toast.render(ToastConfig.leftAlign() ? 0 : resolution.getScaledWidth(), i)) {
|
||||
this.visible[i] = null;
|
||||
}
|
||||
|
||||
if (this.visible[i] == null && !this.toastsQueue.isEmpty()) {
|
||||
this.visible[i] = new ToastInstance<>(this.toastsQueue.removeFirst());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public <T extends IToast> T getToast(Class<? extends T> toastClass, Object type) {
|
||||
for (val toast : this.visible) {
|
||||
if (toast != null && toastClass.isAssignableFrom(toast.getToast().getClass()) &&
|
||||
toast.getToast().getType().equals(type)) {
|
||||
return toastClass.cast(toast);
|
||||
}
|
||||
}
|
||||
|
||||
for (val toast : this.toastsQueue) {
|
||||
if (toastClass.isAssignableFrom(toast.getClass()) && toast.getType().equals(type)) {
|
||||
return toastClass.cast(toast);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
Arrays.fill(this.visible, null);
|
||||
this.toastsQueue.clear();
|
||||
}
|
||||
|
||||
public void add(IToast toastIn) {
|
||||
this.toastsQueue.add(toastIn);
|
||||
}
|
||||
|
||||
public Minecraft getMinecraft() {
|
||||
return this.mc;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
class ToastInstance<T extends IToast> {
|
||||
private final T toast;
|
||||
private long animationTime;
|
||||
private long visibleTime;
|
||||
private IToast.Visibility visibility;
|
||||
|
||||
private ToastInstance(T toastIn) {
|
||||
this.animationTime = -1L;
|
||||
this.visibleTime = -1L;
|
||||
this.visibility = IToast.Visibility.SHOW;
|
||||
this.toast = toastIn;
|
||||
}
|
||||
|
||||
public T getToast() {
|
||||
return this.toast;
|
||||
}
|
||||
|
||||
private float getVisibility(long currentTime) {
|
||||
var visibility = MathUtil.clamp((float) (currentTime - this.animationTime) / 600.0F, 0.0F, 1.0F);
|
||||
visibility = visibility * visibility;
|
||||
return this.visibility == IToast.Visibility.HIDE ? 1.0F - visibility : visibility;
|
||||
}
|
||||
|
||||
public boolean render(int x, int y) {
|
||||
val sysTime = Minecraft.getSystemTime();
|
||||
|
||||
if (this.animationTime == -1L) {
|
||||
this.animationTime = sysTime;
|
||||
this.visibility.playSound(GuiToastImpl.this.mc.getSoundHandler());
|
||||
}
|
||||
|
||||
if (this.visibility == IToast.Visibility.SHOW && sysTime - this.animationTime <= 600L) {
|
||||
this.visibleTime = sysTime;
|
||||
}
|
||||
|
||||
GL11.glPushMatrix();
|
||||
val shift = toast.width() * getVisibility(sysTime);
|
||||
val X = ToastConfig.leftAlign() ? shift - toast.width() : x - shift;
|
||||
GL11.glTranslatef(X,
|
||||
(float) (y * 32) + ToastConfig.Y_OFFSET,
|
||||
(float) (500 + y));
|
||||
val visibility = this.toast.draw(GuiToastImpl.this, sysTime - this.visibleTime);
|
||||
GL11.glPopMatrix();
|
||||
|
||||
if (visibility != this.visibility) {
|
||||
this.animationTime = sysTime - (long) ((int) ((1.0F - this.getVisibility(sysTime)) * 600.0F));
|
||||
this.visibility = visibility;
|
||||
this.visibility.playSound(GuiToastImpl.this.mc.getSoundHandler());
|
||||
}
|
||||
|
||||
return this.visibility == IToast.Visibility.HIDE && sysTime - this.animationTime > 600L;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,18 +22,21 @@ package com.falsepattern.lib.internal.proxy;
|
||||
|
||||
import com.falsepattern.lib.internal.FalsePatternLib;
|
||||
import com.falsepattern.lib.internal.Tags;
|
||||
import com.falsepattern.lib.internal.impl.toast.GuiToastImpl;
|
||||
import com.falsepattern.lib.updates.UpdateChecker;
|
||||
import cpw.mods.fml.client.IModGuiFactory;
|
||||
import lombok.val;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.entity.EntityPlayerSP;
|
||||
import net.minecraft.util.IChatComponent;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
|
||||
import cpw.mods.fml.common.event.FMLConstructionEvent;
|
||||
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import lombok.val;
|
||||
import net.minecraft.client.entity.EntityPlayerSP;
|
||||
import net.minecraft.util.IChatComponent;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -43,6 +46,12 @@ import java.util.concurrent.CompletableFuture;
|
||||
public class ClientProxy extends CommonProxy {
|
||||
private CompletableFuture<List<IChatComponent>> chatFuture;
|
||||
|
||||
@Override
|
||||
public void construct(FMLConstructionEvent e) {
|
||||
super.construct(e);
|
||||
GuiToastImpl.initialize(Minecraft.getMinecraft());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void preInit(FMLPreInitializationEvent e) {
|
||||
super.preInit(e);
|
||||
|
||||
@@ -23,10 +23,13 @@ package com.falsepattern.lib.internal.proxy;
|
||||
import com.falsepattern.lib.config.ConfigException;
|
||||
import com.falsepattern.lib.config.ConfigurationManager;
|
||||
import com.falsepattern.lib.internal.FalsePatternLib;
|
||||
import com.falsepattern.lib.internal.LibraryConfig;
|
||||
import com.falsepattern.lib.internal.config.LibraryConfig;
|
||||
import com.falsepattern.lib.internal.config.ToastConfig;
|
||||
import com.falsepattern.lib.internal.impl.config.ConfigurationManagerImpl;
|
||||
import com.falsepattern.lib.updates.ModUpdateInfo;
|
||||
import com.falsepattern.lib.updates.UpdateChecker;
|
||||
|
||||
import cpw.mods.fml.common.event.FMLConstructionEvent;
|
||||
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||
import lombok.val;
|
||||
@@ -39,10 +42,14 @@ public class CommonProxy {
|
||||
|
||||
protected CompletableFuture<List<ModUpdateInfo>> updatesFuture;
|
||||
|
||||
public void construct(FMLConstructionEvent e) {
|
||||
}
|
||||
|
||||
public void preInit(FMLPreInitializationEvent e) {
|
||||
ConfigurationManagerImpl.registerBus();
|
||||
try {
|
||||
ConfigurationManager.registerConfig(LibraryConfig.class);
|
||||
ConfigurationManager.registerConfig(ToastConfig.class);
|
||||
} catch (ConfigException ex) {
|
||||
FalsePatternLib.getLog().error("Failed to register config!", ex);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
/**
|
||||
* Copyright (C) 2022 FalsePattern
|
||||
* All Rights Reserved
|
||||
* <p>
|
||||
* The above copyright notice, this permission notice and the word "SNEED"
|
||||
* shall be included in all copies or substantial portions of the Software.
|
||||
* <p>
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* <p>
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* <p>
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.falsepattern.lib.toasts;
|
||||
|
||||
import com.falsepattern.lib.StableAPI;
|
||||
import com.falsepattern.lib.internal.impl.toast.GuiToastImpl;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@StableAPI(since = "0.10.0")
|
||||
public class GuiToast {
|
||||
@StableAPI(since = "0.10.0")
|
||||
@Nullable
|
||||
public static <T extends IToast> T getToast(Class<? extends T> toastClass, Object type) {
|
||||
return GuiToastImpl.getInstance().getToast(toastClass, type);
|
||||
}
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
public static void clear() {
|
||||
GuiToastImpl.getInstance().clear();
|
||||
}
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
public static void add(IToast toastIn) {
|
||||
GuiToastImpl.getInstance().add(toastIn);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
/**
|
||||
* Copyright (C) 2022 FalsePattern
|
||||
* All Rights Reserved
|
||||
* <p>
|
||||
* The above copyright notice, this permission notice and the word "SNEED"
|
||||
* shall be included in all copies or substantial portions of the Software.
|
||||
* <p>
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* <p>
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* <p>
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.falsepattern.lib.toasts;
|
||||
|
||||
import com.falsepattern.lib.StableAPI;
|
||||
import com.falsepattern.lib.internal.Tags;
|
||||
import com.falsepattern.lib.internal.impl.toast.GuiToastImpl;
|
||||
|
||||
import net.minecraft.client.audio.PositionedSoundRecord;
|
||||
import net.minecraft.client.audio.SoundHandler;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@StableAPI(since = "0.10.0")
|
||||
public interface IToast {
|
||||
@StableAPI(since = "0.10.0")
|
||||
Object NO_TOKEN = new Object();
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
Visibility draw(GuiToastImpl toastGui, long delta);
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
int width();
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
int height();
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
default Object getType() {
|
||||
return NO_TOKEN;
|
||||
}
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
@SideOnly(Side.CLIENT)
|
||||
enum Visibility {
|
||||
SHOW(new ResourceLocation(Tags.MODID, "ui.toast.in")),
|
||||
HIDE(new ResourceLocation(Tags.MODID, "ui.toast.out"));
|
||||
|
||||
private final ResourceLocation sound;
|
||||
|
||||
Visibility(ResourceLocation soundIn) {
|
||||
this.sound = soundIn;
|
||||
}
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
public void playSound(SoundHandler handler) {
|
||||
handler.playSound(PositionedSoundRecord.func_147674_a(this.sound, 1.0F));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
/**
|
||||
* Copyright (C) 2022 FalsePattern
|
||||
* All Rights Reserved
|
||||
* <p>
|
||||
* The above copyright notice, this permission notice and the word "SNEED"
|
||||
* shall be included in all copies or substantial portions of the Software.
|
||||
* <p>
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* <p>
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* <p>
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.falsepattern.lib.toasts;
|
||||
|
||||
import com.falsepattern.lib.StableAPI;
|
||||
import com.falsepattern.lib.internal.impl.toast.GuiToastImpl;
|
||||
import com.falsepattern.lib.toasts.icon.ToastBG;
|
||||
import com.falsepattern.lib.toasts.icon.ToastIcon;
|
||||
import com.falsepattern.lib.util.MathUtil;
|
||||
import lombok.NonNull;
|
||||
import lombok.val;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import net.minecraft.client.gui.Gui;
|
||||
import net.minecraft.util.IChatComponent;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@StableAPI(since = "0.10.0")
|
||||
public class SimpleToast implements IToast {
|
||||
private final ToastBG background;
|
||||
private final ToastIcon icon;
|
||||
private final String title;
|
||||
private final String subtitle;
|
||||
private final boolean hasProgressBar;
|
||||
private final long timeout;
|
||||
private IToast.Visibility visibility = IToast.Visibility.SHOW;
|
||||
private long lastDelta;
|
||||
private float displayedProgress;
|
||||
private float currentProgress;
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
public SimpleToast(@NonNull ToastBG background, @Nullable ToastIcon icon,
|
||||
IChatComponent titleComponent, @Nullable IChatComponent subtitleComponent,
|
||||
boolean drawProgressBar, long timeout) {
|
||||
this.background = background;
|
||||
this.icon = icon;
|
||||
this.title = titleComponent.getFormattedText();
|
||||
this.subtitle = subtitleComponent == null ? null : subtitleComponent.getFormattedText();
|
||||
this.hasProgressBar = drawProgressBar;
|
||||
this.timeout = timeout;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IToast.Visibility draw(GuiToastImpl toastGui, long delta) {
|
||||
GL11.glColor3f(1, 1, 1);
|
||||
background.draw(toastGui, 0, 0);
|
||||
if (icon != null) {
|
||||
icon.draw(toastGui, 6, 6);
|
||||
}
|
||||
|
||||
val x = icon == null ? 5 : 5 + icon.getIcon().getIconWidth();
|
||||
val bgHeight = background.getIcon().getIconHeight();
|
||||
val fontRenderer = toastGui.getMinecraft().fontRenderer;
|
||||
if (subtitle == null) {
|
||||
fontRenderer.drawString(title, x, bgHeight / 2 - 5, 0xFFFFFFFF);
|
||||
} else {
|
||||
fontRenderer.drawString(title, x, 7, 0xFFFFFFFF);
|
||||
fontRenderer.drawString(subtitle, x, bgHeight - 14, 0xFFFFFFFF);
|
||||
}
|
||||
|
||||
if (hasProgressBar) {
|
||||
val bgWidth = background.getIcon().getIconWidth();
|
||||
Gui.drawRect(3, bgHeight - 4, bgWidth - 3, bgHeight - 3, 0xFFFFFFFF);
|
||||
float f = (float) MathUtil.clampedLerp(displayedProgress, currentProgress, (float) (delta - lastDelta) / 100.0F);
|
||||
int i;
|
||||
|
||||
if (currentProgress >= displayedProgress) {
|
||||
i = 0xff005500;
|
||||
} else {
|
||||
i = 0xff550000;
|
||||
}
|
||||
val barLength = bgWidth - 6;
|
||||
Gui.drawRect(3, bgHeight - 4, (int) (3.0F + barLength * f), bgHeight - 3, i);
|
||||
displayedProgress = f;
|
||||
lastDelta = delta;
|
||||
}
|
||||
if (timeout > 0) {
|
||||
if (delta >= timeout) {
|
||||
hide();
|
||||
}
|
||||
}
|
||||
return visibility;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int width() {
|
||||
return background.getIcon().getIconWidth();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int height() {
|
||||
return background.getIcon().getIconHeight();
|
||||
}
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
public void hide() {
|
||||
visibility = IToast.Visibility.HIDE;
|
||||
}
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
public void setProgress(float progress) {
|
||||
this.currentProgress = progress;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
/**
|
||||
* Copyright (C) 2022 FalsePattern
|
||||
* All Rights Reserved
|
||||
* <p>
|
||||
* The above copyright notice, this permission notice and the word "SNEED"
|
||||
* shall be included in all copies or substantial portions of the Software.
|
||||
* <p>
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* <p>
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* <p>
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.falsepattern.lib.toasts.icon;
|
||||
|
||||
import com.falsepattern.lib.StableAPI;
|
||||
import com.falsepattern.lib.internal.Tags;
|
||||
import lombok.NonNull;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Gui;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
public class ToastBG extends ToastTexture {
|
||||
@StableAPI(since = "0.10.0")
|
||||
public static final ToastBG TOAST_DARK = new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_dark.png"), 160, 32, 0xFFFFFFFF);
|
||||
@StableAPI(since = "0.10.0")
|
||||
public static final ToastBG TOAST_DARK_ROUNDED = new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_dark_rounded.png"), 160, 32, 0xFFFFFFFF);
|
||||
@StableAPI(since = "0.10.0")
|
||||
public static final ToastBG TOAST_NARRATOR = new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_narrator.png"), 160, 32, 0xFFAAAA00);
|
||||
@StableAPI(since = "0.10.0")
|
||||
public static final ToastBG TOAST_NARRATOR_ROUNDED = new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_narrator_rounded.png"), 160, 32, 0xFFAAAA00);
|
||||
@StableAPI(since = "0.10.0")
|
||||
public static final ToastBG TOAST_WHITE = new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_white.png"), 160, 32, 0xFF500050);
|
||||
@StableAPI(since = "0.10.0")
|
||||
public static final ToastBG TOAST_WHITE_ROUNDED = new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_white_rounded.png"), 160, 32, 0xFF500050);
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
public final int defaultTextColor;
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
public ToastBG(@NonNull ResourceLocation texture, int width, int height, int defaultTextColor) {
|
||||
super(texture, width, height);
|
||||
this.defaultTextColor = defaultTextColor;
|
||||
}
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
public ToastBG(@NonNull ResourceLocation texture, @NonNull IIcon icon, int defaultTextColor) {
|
||||
super(texture, icon);
|
||||
this.defaultTextColor = defaultTextColor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Gui guiIn, int x, int y) {
|
||||
GL11.glPushAttrib(GL11.GL_TEXTURE_BIT);
|
||||
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
|
||||
guiIn.drawTexturedModelRectFromIcon(x, y, icon, icon.getIconWidth(), icon.getIconHeight());
|
||||
GL11.glPopAttrib();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
/**
|
||||
* Copyright (C) 2022 FalsePattern
|
||||
* All Rights Reserved
|
||||
* <p>
|
||||
* The above copyright notice, this permission notice and the word "SNEED"
|
||||
* shall be included in all copies or substantial portions of the Software.
|
||||
* <p>
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* <p>
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* <p>
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.falsepattern.lib.toasts.icon;
|
||||
|
||||
import com.falsepattern.lib.StableAPI;
|
||||
import lombok.NonNull;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Gui;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
public class ToastIcon extends ToastTexture {
|
||||
@StableAPI(since = "0.10.0")
|
||||
public ToastIcon(@NonNull ResourceLocation texture, int width, int height) {
|
||||
super(texture, width, height);
|
||||
}
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
public ToastIcon(@NonNull ResourceLocation texture, @NonNull IIcon icon) {
|
||||
super(texture, icon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Gui guiIn, int x, int y) {
|
||||
GL11.glPushAttrib(GL11.GL_TEXTURE_BIT | GL11.GL_ENABLE_BIT);
|
||||
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
|
||||
GL11.glEnable(GL11.GL_BLEND);
|
||||
guiIn.drawTexturedModelRectFromIcon(x, y, icon, icon.getIconWidth(), icon.getIconHeight());
|
||||
GL11.glPopAttrib();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
/**
|
||||
* Copyright (C) 2022 FalsePattern
|
||||
* All Rights Reserved
|
||||
* <p>
|
||||
* The above copyright notice, this permission notice and the word "SNEED"
|
||||
* shall be included in all copies or substantial portions of the Software.
|
||||
* <p>
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* <p>
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* <p>
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.falsepattern.lib.toasts.icon;
|
||||
|
||||
import com.falsepattern.lib.StableAPI;
|
||||
import com.falsepattern.lib.util.RenderUtil;
|
||||
import lombok.Getter;
|
||||
import lombok.NonNull;
|
||||
|
||||
import net.minecraft.client.gui.Gui;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
public abstract class ToastTexture {
|
||||
@Getter(onMethod_={@StableAPI(since = "0.10.0")})
|
||||
protected final IIcon icon;
|
||||
@Getter(onMethod_={@StableAPI(since = "0.10.0")})
|
||||
protected final ResourceLocation texture;
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
public ToastTexture(@NonNull ResourceLocation texture, int width, int height) {
|
||||
this(texture, RenderUtil.getFullTextureIcon(texture.toString(), width, height));
|
||||
}
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
public ToastTexture(@NonNull ResourceLocation texture, @NonNull IIcon icon) {
|
||||
this.icon = icon;
|
||||
this.texture = texture;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the icon at the specified position in the specified Gui
|
||||
*/
|
||||
@StableAPI(since = "0.10.0")
|
||||
public abstract void draw(Gui guiIn, int x, int y);
|
||||
}
|
||||
@@ -25,7 +25,7 @@ import com.falsepattern.lib.StableAPI;
|
||||
import com.falsepattern.lib.dependencies.DependencyLoader;
|
||||
import com.falsepattern.lib.dependencies.SemanticVersion;
|
||||
import com.falsepattern.lib.internal.Internet;
|
||||
import com.falsepattern.lib.internal.LibraryConfig;
|
||||
import com.falsepattern.lib.internal.config.LibraryConfig;
|
||||
import com.falsepattern.lib.internal.Tags;
|
||||
import com.falsepattern.lib.text.FormattedText;
|
||||
import cpw.mods.fml.common.Loader;
|
||||
|
||||
@@ -21,11 +21,15 @@
|
||||
package com.falsepattern.lib.util;
|
||||
|
||||
import com.falsepattern.lib.StableAPI;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.val;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.util.Timer;
|
||||
import cpw.mods.fml.relauncher.ReflectionHelper;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import lombok.*;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.util.Timer;
|
||||
|
||||
import static cpw.mods.fml.relauncher.Side.CLIENT;
|
||||
import static lombok.AccessLevel.PRIVATE;
|
||||
@@ -44,6 +48,56 @@ public final class RenderUtil {
|
||||
return (Timer) timerField.get(getMinecraft());
|
||||
}
|
||||
|
||||
@StableAPI(since = "0.10.0")
|
||||
public static IIcon getFullTextureIcon(String iconName, int width, int height) {
|
||||
return new IIcon() {
|
||||
@Override
|
||||
public int getIconWidth() {
|
||||
return width;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIconHeight() {
|
||||
return height;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMinU() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMaxU() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getInterpolatedU(double u) {
|
||||
return (float) (u / 16D);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMinV() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMaxV() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getInterpolatedV(double v) {
|
||||
return (float) (v / 16D);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getIconName() {
|
||||
return iconName;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static float partialTick() {
|
||||
return MINECRAFT_TIMER.renderPartialTicks;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user