This commit is contained in:
NK 2023-02-10 21:42:46 +00:00
commit f710cd083e
17 changed files with 739 additions and 0 deletions

6
.gitignore vendored Normal file
View file

@ -0,0 +1,6 @@
.gradle
.idea
build
gradle
autocopy.bat
run

1
README.md Normal file
View file

@ -0,0 +1 @@
Lilase

99
build.gradle Normal file
View file

@ -0,0 +1,99 @@
plugins {
id 'net.minecraftforge.gradle.forge' version 'FG_2.1-SNAPSHOT'
id 'com.github.johnrengelman.shadow' version '6.1.0'
id 'org.spongepowered.mixin' version '0.6-SNAPSHOT'
}
version = "1.0.0"
group = "me.night0721.lilase"
archivesBaseName = "Lilase"
sourceCompatibility = 1.8
sourceCompatibility = targetCompatibility = JavaVersion.VERSION_1_8
tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8'
}
repositories {
mavenCentral()
maven { url 'https://jitpack.io/' }
maven { url 'https://repo.spongepowered.org/repository/maven-public/' }
maven { url "https://repo.sk1er.club/repository/maven-public" }
maven { url "https://repo.sk1er.club/repository/maven-releases/" }
}
minecraft {
version = '1.8.9-11.15.1.2318-1.8.9'
runDir = 'run'
mappings = 'stable_22'
makeObfSourceJar = false
replace '@VERSION@': project.version
clientRunArgs += ["--tweakClass gg.essential.loader.stage0.EssentialSetupTweaker", "--mixin mixins.night0721.json"]
}
configurations {
packageLib
configurations.implementation.extendsFrom(configurations.packageLib)
}
dependencies {
packageLib("gg.essential:loader-launchwrapper:1.1.3")
implementation("gg.essential:essential-1.8.9-forge:2581")
annotationProcessor('org.spongepowered:mixin:0.7.11-SNAPSHOT')
implementation('org.spongepowered:mixin:0.7.11-SNAPSHOT') {
transitive = false
}
}
mixin {
disableRefMapWarning = true
defaultObfuscationEnv searge
add sourceSets.main, 'mixins.night0721.refmap.json'
}
jar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
manifest.attributes(
'FMLCorePluginContainsFMLMod': true,
"FMLCorePlugin": "me.night0721.lilase.mixins.MixinLoader",
'ForceLoadAsMod': true,
'MixinConfigs': 'mixins.night0721.json',
'ModSide': 'CLIENT',
'TweakClass': 'gg.essential.loader.stage0.EssentialSetupTweaker',
'TweakOrder': '0'
)
enabled = false
}
shadowJar {
archiveFileName = jar.archiveFileName
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
configurations = [project.configurations.packageLib]
}
reobf {
shadowJar {
classpath = sourceSets.main.compileClasspath
}
}
processResources {
inputs.property 'version', project.version
inputs.property 'mcversion', project.minecraft.version
from(sourceSets.main.resources.srcDirs) {
include 'mcmod.info'
expand 'version':project.version, 'mcversion':project.minecraft.version
}
from(sourceSets.main.resources.srcDirs) {
exclude 'mcmod.info'
}
}
sourceSets {
main { output.resourcesDir = java.outputDir }
}
tasks.reobfJar.dependsOn(shadowJar)

169
gradlew vendored Normal file
View file

@ -0,0 +1,169 @@
#!/usr/bin/env bash
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [[ "$(uname)" == "Darwin" ]] && [[ "$HOME" == "$PWD" ]]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"

84
gradlew.bat vendored Normal file
View file

@ -0,0 +1,84 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

28
settings.gradle Normal file
View file

@ -0,0 +1,28 @@
pluginManagement {
repositories {
mavenCentral()
gradlePluginPortal()
maven {
name = "Forge"
url = "https://maven.minecraftforge.net"
}
maven {
name = "Jitpack"
url = "https://jitpack.io/"
}
}
resolutionStrategy {
eachPlugin {
if (requested.id.id == "net.minecraftforge.gradle.forge") {
useModule("com.github.realfork:ForgeGradle:${requested.version}")
}
if (requested.id.id == "org.spongepowered.mixin") {
useModule("com.github.xcfrg:MixinGradle:${requested.version}")
}
}
}
}
rootProject.name = "Lilase"

View file

@ -0,0 +1,101 @@
package me.night0721.lilase;
import com.mojang.realmsclient.gui.ChatFormatting;
import me.night0721.lilase.events.PacketReceivedEvent;
import me.night0721.lilase.utils.Utils;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.init.Blocks;
import net.minecraft.network.play.client.C0DPacketCloseWindow;
import net.minecraft.network.play.server.S2DPacketOpenWindow;
import net.minecraft.util.ChatComponentText;
import net.minecraftforge.client.event.ClientChatReceivedEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.client.registry.ClientRegistry;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
import org.lwjgl.input.Keyboard;
import java.util.ArrayList;
import java.util.Arrays;
@Mod(modid = Main.MODID, name = Main.MOD_NAME, version = Main.VERSION, acceptedMinecraftVersions="[1.8.9]")
public class Main {
public static final String MOD_NAME = "Lilase";
public static final String MODID = "Lilase";
public static final String VERSION = "1.0.0";
static int tickAmount;
static Minecraft mc = Minecraft.getMinecraft();
static KeyBinding[] keyBindings = new KeyBinding[2];
static ArrayList<Block> interactables = new ArrayList<>(Arrays.asList(Blocks.acacia_door, Blocks.anvil, Blocks.beacon, Blocks.bed, Blocks.birch_door, Blocks.brewing_stand, Blocks.command_block, Blocks.crafting_table, Blocks.chest, Blocks.dark_oak_door,
Blocks.daylight_detector, Blocks.daylight_detector_inverted, Blocks.dispenser, Blocks.dropper, Blocks.enchanting_table, Blocks.ender_chest, Blocks.furnace, Blocks.hopper, Blocks.jungle_door, Blocks.lever,
Blocks.noteblock, Blocks.powered_comparator, Blocks.unpowered_comparator, Blocks.powered_repeater, Blocks.unpowered_repeater, Blocks.standing_sign, Blocks.wall_sign, Blocks.trapdoor, Blocks.trapped_chest, Blocks.wooden_button,
Blocks.stone_button, Blocks.oak_door, Blocks.skull));
@Mod.EventHandler
public void init(FMLInitializationEvent event) {
MinecraftForge.EVENT_BUS.register(this);
keyBindings[0] = new KeyBinding("Ghost Block Bind", Keyboard.KEY_G, "Lilase");
keyBindings[1] = new KeyBinding("Hub", Keyboard.KEY_DIVIDE, "Lilase");
for (KeyBinding keyBinding : keyBindings) {
ClientRegistry.registerKeyBinding(keyBinding);
}
}
@SubscribeEvent
public void onTick(TickEvent.ClientTickEvent event) {
if (mc.thePlayer == null || event.phase != TickEvent.Phase.START) return;
tickAmount++;
if (keyBindings[0].isKeyDown()) {
if (mc.objectMouseOver.getBlockPos() == null) return;
Block block = mc.theWorld.getBlockState(mc.objectMouseOver.getBlockPos()).getBlock();
if (!interactables.contains(block)) {
mc.theWorld.setBlockToAir(mc.objectMouseOver.getBlockPos());
}
}
if (keyBindings[1].isKeyDown()) {
mc.thePlayer.sendChatMessage("/hub");
}
if (tickAmount % 20 == 0) {
Utils.checkForDungeon();
}
}
@SubscribeEvent
public void onChat(ClientChatReceivedEvent event) {
String message = event.message.getUnformattedText();
if (!message.contains(":")) {
if (message.equals("Myrap opened a WITHER door!")) {
Utils.addTitle("&aMyr opened a door");
} else if (message.equals("SpideySb opened a WITHER door!")) {
Utils.addTitle("&aSpidey opened a door");
} else if (message.endsWith("Myrap has obtained Wither Key!")) {
Utils.addTitle("&aMyr has picked up the key");
} else if (message.endsWith("SpideySb has obtained Wither Key!")) {
Utils.addTitle("&aSpidey has picked up the key");
} else if (message.endsWith("Myrap has obtained Blood Key!")) {
Utils.addTitle("&aMyr has picked up the key");
} else if (message.endsWith("SpideySb has obtained Blood Key!")) {
Utils.addTitle("&aSpidey has picked up the key");
}
}
event.message = new ChatComponentText(event.message.getFormattedText().replace("§bCo-op > ", "§zCo-op > "));
}
@SubscribeEvent
public void onPacket(PacketReceivedEvent event) {
if (Utils.inDungeon && event.packet instanceof S2DPacketOpenWindow && ChatFormatting.stripFormatting(((S2DPacketOpenWindow) event.packet).getWindowTitle().getFormattedText()).equals("Chest")) {
event.setCanceled(true);
mc.getNetHandler().getNetworkManager().sendPacket(new C0DPacketCloseWindow(((S2DPacketOpenWindow) event.packet).getWindowId()));
}
}
}

View file

@ -0,0 +1,17 @@
package me.night0721.lilase.events;
import io.netty.channel.ChannelHandlerContext;
import net.minecraft.network.Packet;
import net.minecraftforge.fml.common.eventhandler.Cancelable;
import net.minecraftforge.fml.common.eventhandler.Event;
@Cancelable
public class PacketReceivedEvent extends Event {
public final Packet<?> packet;
public final ChannelHandlerContext context;
public PacketReceivedEvent(final Packet<?> packet, final ChannelHandlerContext context) {
this.packet = packet;
this.context = context;
}
}

View file

@ -0,0 +1,14 @@
package me.night0721.lilase.events;
import net.minecraftforge.fml.common.eventhandler.*;
import net.minecraft.network.*;
@Cancelable
public class PacketSentEvent extends Event {
public final Packet<?> packet;
public PacketSentEvent(Packet<?> packet) {
this.packet = packet;
}
}

View file

@ -0,0 +1,32 @@
package me.night0721.lilase.mixins;
import java.util.Map;
import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin;
import org.spongepowered.asm.launch.MixinBootstrap;
import org.spongepowered.asm.mixin.Mixins;
public class MixinLoader implements IFMLLoadingPlugin {
public MixinLoader() {
MixinBootstrap.init();
Mixins.addConfiguration("mixins.night0721.json");
}
public String[] getASMTransformerClass() {
return new String[0];
}
public String getModContainerClass() {
return null;
}
public String getSetupClass() {
return null;
}
public void injectData(Map<String, Object> data) {
}
public String getAccessTransformerClass() {
return null;
}
}

View file

@ -0,0 +1,35 @@
package me.night0721.lilase.mixins;
import me.night0721.lilase.events.PacketReceivedEvent;
import me.night0721.lilase.events.PacketSentEvent;
import me.night0721.lilase.utils.PlayerUtils;
import io.netty.channel.ChannelHandlerContext;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraftforge.common.MinecraftForge;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(value={NetworkManager.class})
public class MixinNetworkManager {
@Inject(method={"channelRead0"}, at={@At(value="HEAD")}, cancellable=true)
private void read(ChannelHandlerContext context, Packet<?> packet, CallbackInfo ci) {
if (MinecraftForge.EVENT_BUS.post(new PacketReceivedEvent(packet, context))) {
ci.cancel();
}
}
@Inject(method={"sendPacket(Lnet/minecraft/network/Packet;)V"}, at={@At(value="HEAD")}, cancellable=true)
private void onSendPacket(Packet<?> packet, CallbackInfo ci) {
if (!PlayerUtils.packets.contains(packet)) {
if (MinecraftForge.EVENT_BUS.post(new PacketSentEvent(packet))) {
ci.cancel();
}
} else {
PlayerUtils.packets.remove(packet);
}
}
}

View file

@ -0,0 +1,4 @@
package me.night0721.lilase.utils;
public class AuctionHouse {
}

View file

@ -0,0 +1,18 @@
package me.night0721.lilase.utils;
import net.minecraft.client.Minecraft;
import net.minecraft.network.Packet;
import java.util.ArrayList;
public class PlayerUtils {
public static final Minecraft mc = Minecraft.getMinecraft();
public static final ArrayList<Packet<?>> packets = new ArrayList<>();
public static void sendPacketWithoutEvent(Packet<?> packet) {
packets.add(packet);
mc.getNetHandler().getNetworkManager().sendPacket(packet);
}
}

View file

@ -0,0 +1,67 @@
package me.night0721.lilase.utils;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import net.minecraft.client.Minecraft;
import net.minecraft.scoreboard.Score;
import net.minecraft.scoreboard.ScoreObjective;
import net.minecraft.scoreboard.ScorePlayerTeam;
import net.minecraft.scoreboard.Scoreboard;
import net.minecraft.util.StringUtils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
public class ScoreboardUtils {
public static String cleanSB(String scoreboard) {
char[] nvString = StringUtils.stripControlCodes(scoreboard).toCharArray();
StringBuilder cleaned = new StringBuilder();
for (char c : nvString) {
if ((int) c > 20 && (int) c < 127) {
cleaned.append(c);
}
}
return cleaned.toString();
}
public static boolean hasLine(String str) {
for (String line : getSidebarLines()) {
if (line.contains(str)) return true;
}
return false;
}
public static List<String> getSidebarLines() {
List<String> lines = new ArrayList<>();
if (Minecraft.getMinecraft().theWorld == null) return lines;
Scoreboard scoreboard = Minecraft.getMinecraft().theWorld.getScoreboard();
if (scoreboard == null) return lines;
ScoreObjective objective = scoreboard.getObjectiveInDisplaySlot(1);
if (objective == null) return lines;
Collection<Score> scores = scoreboard.getSortedScores(objective);
List<Score> list = scores.stream()
.filter(input -> input != null && input.getPlayerName() != null && !input.getPlayerName()
.startsWith("#"))
.collect(Collectors.toList());
if (list.size() > 15) {
scores = Lists.newArrayList(Iterables.skip(list, scores.size() - 15));
} else {
scores = list;
}
for (Score score : scores) {
ScorePlayerTeam team = scoreboard.getPlayersTeam(score.getPlayerName());
lines.add(ScorePlayerTeam.formatPlayerName(team, score.getPlayerName()));
}
return lines;
}
}

View file

@ -0,0 +1,44 @@
package me.night0721.lilase.utils;
import net.minecraft.client.Minecraft;
import net.minecraft.network.play.server.S45PacketTitle;
import net.minecraft.util.ChatComponentText;
import java.util.List;
public class Utils {
public static boolean inDungeon;
public static String translateAlternateColorCodes(String text) {
char[] b = text.toCharArray();
for (int i = 0; i < b.length - 1; i++) {
if (b[i] == '&' && "0123456789AaBbCcDdEeFfKkLlMmNnOoRrZz".indexOf(b[i + 1]) > -1) {
b[i] = '§';
b[i + 1] = Character.toLowerCase(b[i + 1]);
}
}
return new String(b);
}
public static void addTitle(String title) {
S45PacketTitle p1 = new S45PacketTitle(0, 20, 0);
S45PacketTitle p2 = new S45PacketTitle(S45PacketTitle.Type.TITLE, new ChatComponentText(Utils.translateAlternateColorCodes(title)));
Minecraft.getMinecraft().thePlayer.sendQueue.handleTitle(p1);
Minecraft.getMinecraft().thePlayer.sendQueue.handleTitle(p2);
Minecraft.getMinecraft().thePlayer.playSound("spidey:sbesound", 1, 1);
}
public static void checkForDungeon() {
List<String> scoreboard = ScoreboardUtils.getSidebarLines();
for (String s : scoreboard) {
String sCleaned = ScoreboardUtils.cleanSB(s);
if (sCleaned.contains("The Catacombs") || (sCleaned.contains("Cleared:") && sCleaned.contains("% ("))) {
inDungeon = true;
return;
}
}
inDungeon = false;
}
}

View file

@ -0,0 +1,11 @@
[
{
"modid": "Lilase",
"name": "Lilase",
"version": "${version}",
"mcversion": "${mcversion}",
"authorList": ["night0721"],
"description": "Lilac",
"url": "https://github.com/night0721"
}
]

View file

@ -0,0 +1,9 @@
{
"required": true,
"package": "me.night0721.lilase.mixins",
"refmap": "mixins.night0721.refmap.json",
"compatibilityLevel": "JAVA_8",
"mixins": [
"MixinNetworkManager"
]
}