Initial commit

This commit is contained in:
Jess 2023-08-26 15:19:12 +01:00
commit 84d782c18b
70 changed files with 2668 additions and 0 deletions

3
.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
# Project exclude paths
/.gradle/
/build/

3
.idea/.gitignore generated vendored Normal file
View file

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

1
.idea/.name generated Normal file
View file

@ -0,0 +1 @@
BaseBand

16
.idea/compiler.xml generated Normal file
View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Gradle Imported" enabled="true">
<outputRelativeToContentRoot value="true" />
<processorPath useClasspath="false">
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.spongepowered/mixin/0.8.5/6d1c8bf4c28e697f472a83bd6add76ec4951734/mixin-0.8.5-processor.jar" />
</processorPath>
<module name="BaseBand.Client.main" />
<module name="BaseBand.Loader.main" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel target="1.8" />
</component>
</project>

7
.idea/discord.xml generated Normal file
View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DiscordProjectSettings">
<option name="show" value="PROJECT_FILES" />
<option name="description" value="" />
</component>
</project>

21
.idea/gradle.xml generated Normal file
View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="17" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/Client" />
<option value="$PROJECT_DIR$/Installer" />
<option value="$PROJECT_DIR$/Loader" />
<option value="$PROJECT_DIR$/Server" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>

50
.idea/jarRepositories.xml generated Normal file
View file

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="MavenRepo" />
<option name="name" value="MavenRepo" />
<option name="url" value="https://repo.maven.apache.org/maven2/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven2" />
<option name="name" value="maven2" />
<option name="url" value="https://libraries.minecraft.net/" />
</remote-repository>
<remote-repository>
<option name="id" value="spongepowered-repo" />
<option name="name" value="spongepowered-repo" />
<option name="url" value="https://repo.spongepowered.org/maven" />
</remote-repository>
<remote-repository>
<option name="id" value="jitpack.io" />
<option name="name" value="jitpack.io" />
<option name="url" value="https://jitpack.io" />
</remote-repository>
<remote-repository>
<option name="id" value="maven" />
<option name="name" value="maven" />
<option name="url" value="https://maven.minecraftforge.net/" />
</remote-repository>
<remote-repository>
<option name="id" value="BintrayJCenter" />
<option name="name" value="BintrayJCenter" />
<option name="url" value="https://jcenter.bintray.com/" />
</remote-repository>
<remote-repository>
<option name="id" value="Google" />
<option name="name" value="Google" />
<option name="url" value="https://dl.google.com/dl/android/maven2/" />
</remote-repository>
</component>
</project>

13
.idea/misc.xml generated Normal file
View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="EntryPointsManager">
<list size="4">
<item index="0" class="java.lang.String" itemvalue="net.minecraftforge.fml.common.Mod" />
<item index="1" class="java.lang.String" itemvalue="net.minecraftforge.fml.common.Mod.EventHandler" />
<item index="2" class="java.lang.String" itemvalue="net.minecraftforge.fml.common.eventhandler.SubscribeEvent" />
<item index="3" class="java.lang.String" itemvalue="net.minecraftforge.eventbus.api.SubscribeEvent" />
</list>
</component>
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="zulu-1.8" project-jdk-type="JavaSDK" />
</project>

11
.idea/modules.xml generated Normal file
View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/modules/Client/BaseBand.Client.main.iml" filepath="$PROJECT_DIR$/.idea/modules/Client/BaseBand.Client.main.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/Client/BaseBand.Client.test.iml" filepath="$PROJECT_DIR$/.idea/modules/Client/BaseBand.Client.test.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/Loader/BaseBand.Loader.main.iml" filepath="$PROJECT_DIR$/.idea/modules/Loader/BaseBand.Loader.main.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/Loader/BaseBand.Loader.test.iml" filepath="$PROJECT_DIR$/.idea/modules/Loader/BaseBand.Loader.test.iml" />
</modules>
</component>
</project>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="AdditionalModuleElements">
<content url="file://$MODULE_DIR$/../../../Client/build/generated/sources/annotationProcessor/java/main">
<sourceFolder url="file://$MODULE_DIR$/../../../Client/build/generated/sources/annotationProcessor/java/main" isTestSource="false" generated="true" />
</content>
</component>
<component name="FacetManager">
<facet type="minecraft" name="Minecraft">
<configuration>
<autoDetectTypes>
<platformType>MIXIN</platformType>
</autoDetectTypes>
</configuration>
</facet>
</component>
<component name="McpModuleSettings">
<option name="mappingFile" value="$MODULE_DIR$/../../../Client/build/createMcpToSrg/output.tsrg" />
<option name="mcpVersion" value="stable_39-1.12" />
<option name="minecraftVersion" value="1.12.2" />
<option name="platformVersion" value="14.23.5.2860" />
<option name="srgType" value="TSRG" />
</component>
</module>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="FacetManager">
<facet type="minecraft" name="Minecraft">
<configuration>
<autoDetectTypes>
<platformType>MIXIN</platformType>
</autoDetectTypes>
</configuration>
</facet>
</component>
<component name="McpModuleSettings">
<option name="mappingFile" value="$MODULE_DIR$/../../../Client/build/createMcpToSrg/output.tsrg" />
<option name="mcpVersion" value="stable_39-1.12" />
<option name="minecraftVersion" value="1.12.2" />
<option name="platformVersion" value="14.23.5.2860" />
<option name="srgType" value="TSRG" />
</component>
</module>

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="AdditionalModuleElements">
<content url="file://$MODULE_DIR$/../../../Loader/build/generated/sources/annotationProcessor/java/main">
<sourceFolder url="file://$MODULE_DIR$/../../../Loader/build/generated/sources/annotationProcessor/java/main" isTestSource="false" generated="true" />
</content>
</component>
<component name="FacetManager">
<facet type="minecraft" name="Minecraft">
<configuration>
<autoDetectTypes>
<platformType>FORGE</platformType>
<platformType>MIXIN</platformType>
<platformType>MCP</platformType>
</autoDetectTypes>
</configuration>
</facet>
</component>
<component name="McpModuleSettings">
<option name="mappingFile" value="$MODULE_DIR$/../../../Loader/build/createMcpToSrg/output.tsrg" />
<option name="mcpVersion" value="stable_39-1.12" />
<option name="minecraftVersion" value="1.12.2" />
<option name="platformVersion" value="14.23.5.2860" />
<option name="srgType" value="TSRG" />
</component>
</module>

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="FacetManager">
<facet type="minecraft" name="Minecraft">
<configuration>
<autoDetectTypes>
<platformType>FORGE</platformType>
<platformType>MIXIN</platformType>
<platformType>MCP</platformType>
</autoDetectTypes>
</configuration>
</facet>
</component>
<component name="McpModuleSettings">
<option name="mappingFile" value="$MODULE_DIR$/../../../Loader/build/createMcpToSrg/output.tsrg" />
<option name="mcpVersion" value="stable_39-1.12" />
<option name="minecraftVersion" value="1.12.2" />
<option name="platformVersion" value="14.23.5.2860" />
<option name="srgType" value="TSRG" />
</component>
</module>

124
.idea/uiDesigner.xml generated Normal file
View file

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>

6
.idea/vcs.xml generated Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

42
Client/.gitignore vendored Normal file
View file

@ -0,0 +1,42 @@
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store

107
Client/build.gradle Normal file
View file

@ -0,0 +1,107 @@
buildscript {
repositories {
maven { url = 'https://maven.minecraftforge.net' }
maven { url = 'https://repo.spongepowered.org/repository/maven-public' }
mavenCentral()
}
dependencies {
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.1', changing: true
classpath "org.spongepowered:mixingradle:0.7.+"
}
}
apply plugin: 'net.minecraftforge.gradle'
apply plugin: 'org.spongepowered.mixin'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'java'
group = project.modGroup
version = project.modVersion
sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8'
tasks.withType(JavaCompile) {
configure(options) {
options.compilerArgs.add("-XDignore.symbol.file=true")
options.encoding = 'utf-8'
}
}
minecraft {
mappings channel: 'stable', version: '39-1.12'
accessTransformer = file('src/main/resources/client_at.cfg')
runs {
client {
workingDirectory project.file('run')
property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
property 'forge.logging.console.level', 'debug'
}
}
}
repositories {
maven {
name = 'spongepowered-repo'
url = 'https://repo.spongepowered.org/maven'
}
maven {
name = "jitpack.io"
url = "https://jitpack.io"
}
mavenCentral()
}
dependencies {
minecraft 'net.minecraftforge:forge:1.12.2-14.23.5.2860'
implementation('org.spongepowered:mixin:0.7.11-SNAPSHOT') {
exclude module: 'launchwrapper'
exclude module: 'guava'
exclude module: 'gson'
exclude module: 'commons-io'
exclude module: 'log4j-core'
}
annotationProcessor('org.spongepowered:mixin:0.8.5:processor') {
exclude module: 'gson'
}
}
compileJava {
def targetFile = file("src/main/java/com/baseband/client/Main.java")
def content = targetFile.text
def updatedContent = content.replaceFirst("buildNumber = (\\d+)", { _, value -> "buildNumber = ${value.toInteger() + 1}" })
targetFile.text = updatedContent
}
processResources {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
inputs.property 'version', project.version
inputs.property 'mcversion', '1.12.2'
from(sourceSets.main.resources.srcDirs) {
include 'mcmod.info'
expand 'version': project.version, 'mcversion': '1.12.2'
}
from(sourceSets.main.resources.srcDirs) { exclude 'mcmod.info' }
rename '(.+_at.cfg)', 'META-INF/$1'
}
mixin {
defaultObfuscationEnv 'searge'
add sourceSets.main, 'mixins.baseband.refmap.json'
}
jar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}

7
Client/gradle.properties Normal file
View file

@ -0,0 +1,7 @@
org.gradle.jvmargs=-Xmx4G
org.gradle.daemon=false
modGroup=dev.baseband
modVersion=1.0.0
mcpVersion=snapshot_20180814
forgeVersion=1.12.2-14.23.5.2847

View file

@ -0,0 +1,40 @@
package com.baseband.client;
import com.baseband.client.command.CommandManager;
import com.baseband.client.event.EventManager;
import com.baseband.client.event.events.SafeTickEvent;
import com.baseband.client.module.ModuleRegistry;
import net.minecraft.client.Minecraft;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Main {
public static int buildNumber = 11;
public static EventManager EVENT_MANAGER;
public static final String name = "BaseBand";
public static ModuleRegistry moduleRegistry;
public static CommandManager commandRegistry;
public static final Logger log = LogManager.getLogger("BaseBand");
public static void onInit() {
EVENT_MANAGER = new EventManager();
moduleRegistry = new ModuleRegistry();
commandRegistry = new CommandManager();
log.info("BaseBand Instantiated.");
}
@SubscribeEvent
public void tick(TickEvent.ClientTickEvent e) {
if(isIngame()) {
EVENT_MANAGER.publish(new SafeTickEvent());
}
}
public static boolean isIngame() {
return Minecraft.getMinecraft().world != null && Minecraft.getMinecraft().player != null;
}
}

View file

@ -0,0 +1,17 @@
package com.baseband.client;
import net.minecraft.client.Minecraft;
import net.minecraft.util.text.TextComponentString;
public class Utils {
public static void sendChatMessage(String e) {
if (Main.isIngame()) {
try {
Minecraft.getMinecraft().player.sendMessage(new TextComponentString("[" + "§a" + Main.name + "§r" + "]" + " " + e));
} catch (Exception ee) {
ee.printStackTrace();
}
}
}
}

View file

@ -0,0 +1,21 @@
package com.baseband.client.command;
import net.minecraft.client.Minecraft;
public abstract class Command {
protected static Minecraft mc = Minecraft.getMinecraft();
String commandName;
public Command(String name) {
super();
commandName = name;
}
public String getName() {
return commandName;
}
public abstract String run(String[] args);
}

View file

@ -0,0 +1,62 @@
package com.baseband.client.command;
import com.baseband.client.Utils;
import com.baseband.client.command.commands.CreditsCommand;
import com.baseband.client.command.commands.HelpCommand;
import com.baseband.client.command.commands.ToggleCommand;
import net.minecraftforge.client.event.ClientChatEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import java.util.ArrayList;
import java.util.Arrays;
public class CommandManager {
public String commandPrefix = "=";
public ArrayList<Command> commands = new ArrayList<>();
public CommandManager() {
registerCommands();
MinecraftForge.EVENT_BUS.register(this);
}
public void registerCommands() {
commands.add(new CreditsCommand());
commands.add(new HelpCommand());
commands.add(new ToggleCommand());
}
@SubscribeEvent
public void onChat(ClientChatEvent event) {
String message = event.getOriginalMessage();
if (message.startsWith(commandPrefix)) {
event.setCanceled(true);
String[] split = message.split(" ");
String name = split[0].replace(commandPrefix, "");
String[] args = Arrays.copyOfRange(split, 1, split.length);
Command cmd = null;
for (Command command : commands) {
if (command.getName().equalsIgnoreCase(name)) {
cmd = command;
break;
}
}
if (cmd != null) {
Utils.sendChatMessage(cmd.run(args));
} else {
Utils.sendChatMessage("Incorrect command.");
}
}
}
}

View file

@ -0,0 +1,16 @@
package com.baseband.client.command.commands;
import com.baseband.client.Utils;
import com.baseband.client.command.Command;
public class CreditsCommand extends Command {
public CreditsCommand() {
super("credits");
}
@Override
public String run(String[] args) {
Utils.sendChatMessage("Base and most of the loader written by JessSystemV, John200410 helped with the loader.");
return null;
}
}

View file

@ -0,0 +1,14 @@
package com.baseband.client.command.commands;
import com.baseband.client.command.Command;
public class HelpCommand extends Command {
public HelpCommand() {
super("help");
}
@Override
public String run(String[] args) {
return "BaseBand Rewrite Copyright (2023) JessSystemV";
}
}

View file

@ -0,0 +1,24 @@
package com.baseband.client.command.commands;
import com.baseband.client.Main;
import com.baseband.client.command.Command;
import com.baseband.client.module.Module;
public class ToggleCommand extends Command {
public ToggleCommand() {
super("toggle");
}
@Override
public String run(String[] args) {
if (args.length != 1) {
return "Please specify a module name.";
}
Module module = Main.moduleRegistry.getModule(args[0]);
if (module == null) {
return "Cannot find module.";
}
module.setEnabled(!module.isEnabled());
return module.getName() + " toggled. (" + module.isEnabled() + ")";
}
}

View file

@ -0,0 +1,13 @@
package com.baseband.client.event;
public class Event {
boolean isCancelled = false;
public void setCancelled(boolean cancelled) {
isCancelled = cancelled;
}
public boolean isCancelled() {
return isCancelled;
}
}

View file

@ -0,0 +1,75 @@
package com.baseband.client.event;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class EventManager {
private final Map<Class<? extends Event>, List<SubscriberMethod>> subscribers;
private final Object lock;
public EventManager() {
subscribers = new HashMap<>();
lock = new Object();
}
public void subscribe(Object subscriber) {
Class<?> subscriberClass = subscriber.getClass();
Method[] methods = subscriberClass.getDeclaredMethods();
for (Method method : methods) {
Class<?>[] parameterTypes = method.getParameterTypes();
if (parameterTypes.length == 1 && Event.class.isAssignableFrom(parameterTypes[0])) {
@SuppressWarnings("unchecked")
Class<? extends Event> eventType = (Class<? extends Event>) parameterTypes[0];
SubscriberMethod subscriberMethod = new SubscriberMethod(subscriber, method);
synchronized (lock) {
List<SubscriberMethod> eventSubscribers = subscribers.getOrDefault(eventType, new ArrayList<>());
eventSubscribers.add(subscriberMethod);
subscribers.put(eventType, eventSubscribers);
}
}
}
}
public void unsubscribe(Object subscriber) {
synchronized (lock) {
for (List<SubscriberMethod> eventSubscribers : subscribers.values()) {
eventSubscribers.removeIf(subscriberMethod -> subscriberMethod.subscriber == subscriber);
}
}
}
public void publish(Event event) {
Class<? extends Event> eventType = event.getClass();
List<SubscriberMethod> eventSubscribers;
synchronized (lock) {
eventSubscribers = new ArrayList<>(subscribers.getOrDefault(eventType, new ArrayList<>()));
}
for (SubscriberMethod subscriberMethod : eventSubscribers) {
subscriberMethod.invoke(event);
}
}
private static class SubscriberMethod {
private final Object subscriber;
private final Method method;
private SubscriberMethod(Object subscriber, Method method) {
this.subscriber = subscriber;
this.method = method;
this.method.setAccessible(true);
}
private void invoke(Event event) {
try {
method.invoke(subscriber, event);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

View file

@ -0,0 +1,9 @@
package com.baseband.client.event.events;
import com.baseband.client.event.Event;
public class SafeTickEvent extends Event {
//Stub
}

View file

@ -0,0 +1,46 @@
package com.baseband.client.gui;
public abstract class Button {
private int x, y, width, height;
private boolean hovered;
public Button(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
public abstract void drawButton(int mouseX, int mouseY, float partialTicks);
public void onClick(int mouseX, int mouseY) {}
public boolean isMouseOver(int mouseX, int mouseY) {
return mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height;
}
public void setHovered(boolean hovered) {
this.hovered = hovered;
}
public boolean isHovered() {
return hovered;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public int getWidth() {
return width;
}
public int getHeight() {
return height;
}
}

View file

@ -0,0 +1,32 @@
package com.baseband.client.gui;
import java.util.ArrayList;
import java.util.List;
public class ButtonList {
private List<Button> buttons = new ArrayList<>();
public void addButton(Button button) {
buttons.add(button);
}
public void removeButton(Button button) {
buttons.remove(button);
}
public void drawButtons(int mouseX, int mouseY, float partialTicks) {
for (Button button : buttons) {
button.setHovered(button.isMouseOver(mouseX, mouseY));
button.drawButton(mouseX, mouseY, partialTicks);
}
}
public void onClick(int mouseX, int mouseY) {
for (Button button : buttons) {
if (button.isMouseOver(mouseX, mouseY)) {
button.onClick(mouseX, mouseY);
}
}
}
}

View file

@ -0,0 +1,54 @@
package com.baseband.client.gui;
import com.baseband.client.Main;
import com.baseband.client.module.Module;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiScreen;
import java.awt.*;
import java.io.IOException;
public class ClickGui extends GuiScreen {
private ButtonList buttonList = new ButtonList();
public ClickGui() {
int y=10;
int x=10;
for (Module m : Main.moduleRegistry.getModuleList()) {
Button moduleButton = new Button(x, y, 120, 15) {
@Override
public void drawButton(int mouseX, int mouseY, float partialTicks) {
Gui.drawRect(getX(), getY(), getX() + getWidth(), getY() + getHeight(), Color.GREEN.getRGB());
Minecraft.getMinecraft().fontRenderer.drawStringWithShadow(m.getName()+":"+m.isEnabled(), getX() + 3, getY() + 3, 0xffffffff);
}
@Override
public void onClick(int mouseX, int mouseY) {
m.setEnabled(!m.isEnabled());
}
};
addButton(moduleButton);
y+=moduleButton.getHeight();
}
}
public void addButton(Button button) {
buttonList.addButton(button);
}
@Override
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
drawDefaultBackground();
buttonList.drawButtons(mouseX, mouseY, partialTicks);
super.drawScreen(mouseX, mouseY, partialTicks);
}
@Override
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException {
super.mouseClicked(mouseX, mouseY, mouseButton);
buttonList.onClick(mouseX, mouseY);
}
}

View file

@ -0,0 +1,13 @@
package com.baseband.client.mixins;
import net.minecraftforge.fml.common.eventhandler.EventBus;
import org.apache.logging.log4j.Logger;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(EventBus.class)
public class MixinForgeBus {
@Redirect(remap = false, method = "register(Ljava/lang/Object;)V", at = @At(value = "INVOKE", target = "Lorg/apache/logging/log4j/Logger;error(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V"))
private void registerHook(Logger instance, String s, Object o1, Object o2) {}
}

View file

@ -0,0 +1,19 @@
package com.baseband.client.mixins;
import com.baseband.client.Main;
import net.minecraft.client.Minecraft;
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(Minecraft.class)
public class MixinMinecraft {
@Inject(method = "init", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;checkGLError(Ljava/lang/String;)V", ordinal = 1, shift = At.Shift.AFTER))
private void onInit(CallbackInfo ci) {
Main.onInit();
}
}

View file

@ -0,0 +1,48 @@
package com.baseband.client.module;
import com.baseband.client.Main;
public class Module {
String name;
boolean isEnabled = false;
int key = 0;
public Module(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setEnabled(boolean enabled) {
isEnabled=enabled;
if(isEnabled) {
enable();
Main.EVENT_MANAGER.subscribe(this);
}else {
disable();
Main.EVENT_MANAGER.unsubscribe(this);
}
}
public void setKey(int key) {
this.key = key;
}
public int getKey() {
return key;
}
public boolean isEnabled() {
return isEnabled;
}
public void enable(){
}
public void disable(){
}
}

View file

@ -0,0 +1,64 @@
package com.baseband.client.module;
import com.baseband.client.module.modules.ClickGUI;
import com.baseband.client.module.modules.HUD;
import com.baseband.client.module.modules.Test;
import net.minecraft.client.Minecraft;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.InputEvent;
import org.lwjgl.input.Keyboard;
import java.util.ArrayList;
import java.util.List;
public class ModuleRegistry {
public ModuleRegistry(){
addModules();
MinecraftForge.EVENT_BUS.register(this);
}
void addModules() {
modules.add(new Test());
modules.add(new HUD());
modules.add(new ClickGUI());
}
@SubscribeEvent
public void key(InputEvent.KeyInputEvent e) {
if (Minecraft.getMinecraft().world == null || Minecraft.getMinecraft().player == null)
return;
try {
if (Keyboard.isCreated()) {
if (Keyboard.getEventKeyState()) {
int keyCode = Keyboard.getEventKey();
if (keyCode <= 0)
return;
for (Module m : modules) {
if (m.getKey() == keyCode && keyCode > 0) {
m.setEnabled(!m.isEnabled);
}
}
}
}
} catch (Exception q) {
q.printStackTrace();
}
}
public List<Module> getModuleList() {
return modules;
}
static List<Module> modules = new ArrayList<>();
public static Module getModule(String name) {
for (Module m : modules) {
if (m.getName().equalsIgnoreCase(name)) {
return m;
}
}
return null;
}
}

View file

@ -0,0 +1,19 @@
package com.baseband.client.module.modules;
import com.baseband.client.event.events.SafeTickEvent;
import com.baseband.client.gui.ClickGui;
import com.baseband.client.module.Module;
import net.minecraft.client.Minecraft;
import org.lwjgl.input.Keyboard;
public class ClickGUI extends Module {
public ClickGUI() {
super("ClickGUI");
this.setKey(Keyboard.KEY_PERIOD);
}
public void tick(SafeTickEvent e){
Minecraft.getMinecraft().displayGuiScreen(new ClickGui());
this.setEnabled(false);
}
}

View file

@ -0,0 +1,21 @@
package com.baseband.client.module.modules;
import com.baseband.client.Main;
import com.baseband.client.module.Module;
import net.minecraft.client.Minecraft;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import java.awt.*;
public class HUD extends Module {
public HUD() {
super("HUD");
}
@SubscribeEvent
public void text(RenderGameOverlayEvent.Text e) {
Minecraft.getMinecraft().fontRenderer.drawStringWithShadow("BaseBand Build-" + Main.buildNumber, 2, 2, Color.GREEN.getRGB());
}
}

View file

@ -0,0 +1,24 @@
package com.baseband.client.module.modules;
import com.baseband.client.event.events.SafeTickEvent;
import com.baseband.client.module.Module;
public class Test extends Module {
public Test() {
super("Test");
}
public void tick(SafeTickEvent event) {
}
public void enable() {
super.enable();
}
public void disable() {
}
}

View file

View file

@ -0,0 +1,15 @@
[
{
"modid": "client",
"name": "Client",
"description": "A client side modification",
"version": "1.0",
"mcversion": "[1.12, 1.12.1, 1.12.2]",
"authorList": [
""
],
"credits": "Forge Team for FML, Sponge for Mixin",
"screenshots": [],
"dependencies": []
}
]

View file

@ -0,0 +1,10 @@
{
"required": true,
"compatibilityLevel": "JAVA_8",
"package": "com.baseband.client.mixins",
"minVersion": "0",
"refmap": "mixins.baseband.refmap.json",
"mixins": [
"MixinMinecraft"
]
}

42
Installer/.gitignore vendored Normal file
View file

@ -0,0 +1,42 @@
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store

58
Installer/build.gradle Normal file
View file

@ -0,0 +1,58 @@
buildscript {
repositories {
mavenCentral()
maven {
name = 'SpongePowered'
url = 'https://repo.spongepowered.org/maven'
}
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:4.0.4'
}
}
plugins {
id 'java'
}
apply plugin: 'com.github.johnrengelman.shadow'
group 'com.thnkscj'
repositories {
maven {
name = 'spongepowered-repo'
url = 'https://repo.spongepowered.org/maven'
}
maven {
name = "jitpack.io"
url = "https://jitpack.io"
}
jcenter()
mavenCentral()
google()
}
dependencies {
implementation 'org.json:json:20230227'
}
shadowJar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
dependencies {
include(dependency('org.json:json:20220320'))
}
baseName = "installer"
version = "1.0"
manifest {
attributes(
'Main-Class': 'com.thnkscj.installer.Main'
)
}
}
build.dependsOn(shadowJar)

View file

@ -0,0 +1,19 @@
package com.thnkscj.installer;
import com.thnkscj.installer.util.library.LibraryInstaller;
import com.thnkscj.installer.util.version.VersionInstaller;
import java.net.URL;
import static com.thnkscj.installer.util.library.LibraryInstaller.toUrl;
public class Installer {
public static String mainClassPath = "org.baseband.launcher";
public static String jarPath = "com/thnkscj/loader/1.0.0/Loader-1.0.0.jar";
public static URL jarUrl = toUrl("https://example.com/" + jarPath);
public static void main(String[] args) throws Exception {
LibraryInstaller.download();
VersionInstaller.injectVersionJson();
}
}

View file

@ -0,0 +1,41 @@
package com.thnkscj.installer.util.library;
import com.thnkscj.installer.util.minecraft.MinecraftFiles;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import static com.thnkscj.installer.Installer.jarPath;
import static com.thnkscj.installer.Installer.jarUrl;
public class LibraryInstaller {
public static void download() throws Exception {
File f = new File(MinecraftFiles.getLibraries() + jarPath);
if (!f.exists()) {
try {
ReadableByteChannel rbc = Channels.newChannel(jarUrl.openStream());
FileOutputStream fos = new FileOutputStream(MinecraftFiles.getLibraries() + jarPath);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
System.out.println("Successfully Downloaded Loader Jar");
} catch (FileNotFoundException e) {
System.out.println("The URL Did Not Find A Valid Jar To Download, Skipping");
}
} else {
System.out.println("The Loader Jar Has Already Been Downloaded");
}
}
public static URL toUrl(String s) {
try {
return new URL(s);
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
}

View file

@ -0,0 +1,42 @@
package com.thnkscj.installer.util.minecraft;
import java.io.File;
public class MinecraftFiles {
private static final String os = System.getProperty("os.name").toLowerCase();
private static final String minecraft = getMinecraft();
private static String libraries;
private static String versions;
public static String getMinecraft() {
String minecraft = null;
assert os != null;
if (os.contains("nux")) {
minecraft = System.getProperty("user.home") + "/.minecraft/";
} else if (os.contains("darwin") || os.contains("mac")) {
minecraft = System.getProperty("user.home") + "/Library/Application Support/minecraft/";
} else if (os.contains("win")) {
minecraft = System.getenv("APPDATA") + File.separator + ".minecraft" + File.separator;
}
return minecraft;
}
public static String getVersions() {
if (minecraft != null) {
versions = minecraft + "versions" + File.separator;
}
return versions;
}
public static String getLibraries() {
getMinecraft();
if (minecraft != null) {
libraries = minecraft + "libraries" + File.separator;
}
return libraries;
}
}

View file

@ -0,0 +1,78 @@
package com.thnkscj.installer.util.version;
import com.thnkscj.installer.Installer;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Objects;
import static com.thnkscj.installer.Installer.mainClassPath;
import static com.thnkscj.installer.util.minecraft.MinecraftFiles.getVersions;
public class VersionInstaller {
public static JSONObject parseJSONFile(String filename) throws JSONException, IOException {
String content = new String(Files.readAllBytes(Paths.get(filename)));
return new JSONObject(content);
}
public static void injectVersionJson() throws IOException {
File file2 = new File(getVersions());
if (file2.isDirectory()) {
for (File file1 : Objects.requireNonNull(file2.listFiles())) {
if (!file1.isDirectory()) continue;
for (File file : Objects.requireNonNull(file1.listFiles())) {
if (!file.getName().contains(".json") || !file.getName().contains("1.12.2") || !file.getName().contains("forge"))
continue;
String path = String.valueOf(Paths.get(file.getAbsolutePath()));
editVersionArgs(path);
editVersionLibrarys(path);
}
}
}
}
public static void editVersionArgs(String path) throws IOException {
JSONObject obj = parseJSONFile(path);
String args = (String) obj.get("minecraftArguments");
if (!args.contains("--tweakClass " + mainClassPath)) {
obj.remove("minecraftArguments");
obj.put("minecraftArguments", args + " --tweakClass " + mainClassPath);
Files.write(Paths.get(path), new JSONObject(obj.toString()).toString(2).getBytes());
}
}
public static void editVersionLibrarys(String path) throws IOException {
JSONObject obj = parseJSONFile(path);
JSONArray arr = obj.getJSONArray("libraries");
String args = String.valueOf(obj);
if (!args.contains(convertPath(Installer.jarPath))) {
JSONObject injectorJson = new JSONObject();
injectorJson.put("name", Installer.jarPath);
JSONArray ModifiedArray = arr.put(injectorJson);
JSONObject newJson = obj.put("libraries", ModifiedArray);
Files.write(Paths.get(path), new JSONObject(newJson.toString()).toString(4).getBytes());
System.out.println("Successfully Added Args To The Forge JSON File");
} else {
System.out.println("The Version Json Has Already Been Injected, Skipping");
}
}
public static String convertPath(String path) {
String[] split = path.split("/");
return split[0] + "." + split[1] + ":" + split[2] + ":" + split[3];
}
}

42
Loader/.gitignore vendored Normal file
View file

@ -0,0 +1,42 @@
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store

120
Loader/build.gradle Normal file
View file

@ -0,0 +1,120 @@
buildscript {
repositories {
maven { url = 'https://maven.minecraftforge.net' }
maven { url = 'https://repo.spongepowered.org/repository/maven-public' }
mavenCentral()
}
dependencies {
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.1', changing: true
classpath "org.spongepowered:mixingradle:0.7.+"
}
}
apply plugin: 'net.minecraftforge.gradle'
apply plugin: 'org.spongepowered.mixin'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'java'
group = project.modGroup
version = project.modVersion
sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8'
tasks.withType(JavaCompile) {
configure(options) {
options.compilerArgs.add("-XDignore.symbol.file=true")
options.encoding = 'utf-8'
}
}
minecraft {
mappings channel: 'stable', version: '39-1.12'
runs {
client {
workingDirectory project.file('run')
property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
property 'forge.logging.console.level', 'debug'
}
}
}
repositories {
maven {
name = 'spongepowered-repo'
url = 'https://repo.spongepowered.org/maven'
}
maven {
name = "jitpack.io"
url = "https://jitpack.io"
}
mavenCentral()
}
configurations {
jarLibs
}
dependencies {
implementation project(path: ':Client')
minecraft 'net.minecraftforge:forge:1.12.2-14.23.5.2860'
jarLibs('org.spongepowered:mixin:0.7.11-SNAPSHOT') {
exclude module: 'launchwrapper'
exclude module: 'guava'
exclude module: 'gson'
exclude module: 'commons-io'
exclude module: 'log4j-core'
}
annotationProcessor('org.spongepowered:mixin:0.8.5:processor') {
exclude module: 'gson'
}
implementation configurations.jarLibs
}
processResources {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
inputs.property 'version', project.version
inputs.property 'mcversion', '1.12.2'
from(sourceSets.main.resources.srcDirs) {
include 'mcmod.info'
expand 'version': project.version, 'mcversion': '1.12.2'
}
from(sourceSets.main.resources.srcDirs) { exclude 'mcmod.info' }
rename '(.+_at.cfg)', 'META-INF/$1'
}
mixin {
defaultObfuscationEnv 'searge'
add sourceSets.main, 'mixins.client.refmap.json'
}
jar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
manifest {
attributes(
'tweakClass': 'org.baseband.launcher.Tweaker',
'TweakOrder': 0,
'FMLCorePluginContainsFMLMod': 'true',
'ForceLoadAsMod': 'true'
)
}
from {
configurations.jarLibs.collect {
it.isDirectory() ? it : zipTree(it)
}
}
}

7
Loader/gradle.properties Normal file
View file

@ -0,0 +1,7 @@
org.gradle.jvmargs=-Xmx4G
org.gradle.daemon=false
modGroup=dev.baseband
modVersion=1.0.0
mcpVersion=snapshot_20180814
forgeVersion=1.12.2-14.23.5.2847

View file

@ -0,0 +1,63 @@
package org.baseband.launcher;
import net.minecraft.launchwrapper.ITweaker;
import net.minecraft.launchwrapper.LaunchClassLoader;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.baseband.launcher.launch.Loader;
import org.baseband.launcher.tweaker.Core;
import org.spongepowered.asm.launch.MixinTweaker;
import java.io.File;
import java.util.List;
import java.util.concurrent.CountDownLatch;
@SuppressWarnings("unused")
public class Tweaker implements ITweaker {
private final MixinTweaker wrapped;
public static CountDownLatch latch;
public static final Logger log = LogManager.getLogger("BaseBand-Loader");
public Tweaker() {
wrapped = new MixinTweaker();
}
@Override
public void acceptOptions(List<String> args, File gameDir, File assetsDir, String profile) {
wrapped.acceptOptions(args, gameDir, assetsDir, profile);
}
@Override
public void injectIntoClassLoader(LaunchClassLoader classLoader) {
try {
latch = new CountDownLatch(1);
Loader.initiate(classLoader);
latch.await();
wrapped.injectIntoClassLoader(classLoader);
classLoader.addTransformerExclusion(Core.class.getName());
Class<?> coreClass = Class.forName(Core.class.getName(), true, classLoader);
Core core = (Core) coreClass.newInstance();
core.init(classLoader);
for (String transformer : core.getTransformers()) {
classLoader.registerTransformer(transformer);
}
} catch (ClassNotFoundException | IllegalAccessException | InstantiationException | InterruptedException e) {
throw new IllegalStateException(e);
}
}
@Override
public String getLaunchTarget() {
return wrapped.getLaunchTarget();
}
@Override
public String[] getLaunchArguments() {
return wrapped.getLaunchArguments();
}
}

View file

@ -0,0 +1,127 @@
package org.baseband.launcher.launch;
import net.minecraft.launchwrapper.LaunchClassLoader;
import org.baseband.launcher.Tweaker;
import org.baseband.launcher.util.CustomClassloader;
import org.baseband.launcher.util.HWID;
import java.io.*;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
import java.util.jar.JarOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class Loader {
public static void initiate(LaunchClassLoader classLoader) {
try {
Socket socket = new Socket("127.0.0.1", 31212);
DataInputStream inputF = new DataInputStream(socket.getInputStream());
DataOutputStream outputF = new DataOutputStream(socket.getOutputStream());
outputF.writeUTF("Username");
outputF.writeUTF("Password");
outputF.writeUTF(HWID.generate());
int responseCode = inputF.readInt();
switch (responseCode) {
case -1: {
Tweaker.log.fatal("Invalid Username/Password");
exit();
break;
}
case -2: {
Tweaker.log.warn("HWID Reset.");
break;
}
case -3: {
Tweaker.log.fatal("BaseBand Auth Temporarily Down.");
exit();
break;
}
case -4: {
Tweaker.log.fatal("Invalid HWID, Please request a Reset.");
exit();
break;
}
case -5: {
Tweaker.log.fatal("Your BaseBand account has been banned.");
exit();
break;
}
default: {
Tweaker.log.info("Authenticated.");
break;
}
}
Map<String, byte[]> classCache = new HashMap<>();
Map<String, byte[]> resources = new HashMap<>();
try (ZipInputStream zipStream = new ZipInputStream(inputF)) {
ZipEntry zipEntry;
while ((zipEntry = zipStream.getNextEntry()) != null) {
byte[] buffer = new byte[1024];
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int len;
while ((len = zipStream.read(buffer)) > 0) {
bos.write(buffer, 0, len);
}
bos.close();
if (zipEntry.getName().endsWith(".class")) {
classCache.put(zipEntry.getName().replace(".class", "").replace('/', '.'), bos.toByteArray());
} else {
resources.put(zipEntry.getName(), bos.toByteArray());
}
}
} catch (IOException e) {
e.printStackTrace();
}
new CustomClassloader(classCache);
if (!resources.isEmpty()) {
try {
File tempFile = File.createTempFile("resources"+System.currentTimeMillis(), ".jar");
FileOutputStream fos = new FileOutputStream(tempFile);
JarOutputStream jos = new JarOutputStream(fos);
for (Map.Entry<String, byte[]> entry : resources.entrySet()) {
jos.putNextEntry(new ZipEntry(entry.getKey()));
jos.write(entry.getValue());
jos.closeEntry();
}
jos.close();
fos.close();
tempFile.deleteOnExit();
classLoader.addURL(tempFile.toURI().toURL());
} catch (Exception e) {
e.printStackTrace();
}
}
Tweaker.latch.countDown();
} catch (Exception ignored) {
exit();
}
}
public static void exit() {
while(true);
}
}

View file

@ -0,0 +1,11 @@
package org.baseband.launcher.tweaker;
import net.minecraftforge.fml.common.asm.transformers.AccessTransformer;
import java.io.IOException;
public final class CfgAccessTransformer extends AccessTransformer {
public CfgAccessTransformer() throws IOException {
super("client_at.cfg");
}
}

View file

@ -0,0 +1,26 @@
package org.baseband.launcher.tweaker;
import org.spongepowered.asm.launch.MixinBootstrap;
import org.spongepowered.asm.mixin.MixinEnvironment;
import org.spongepowered.asm.mixin.Mixins;
@SuppressWarnings("unused")
public class Core {
public void init(ClassLoader classLoader) {
MixinBootstrap.init();
MixinEnvironment.getEnvironment(MixinEnvironment.Phase.DEFAULT).setSide(MixinEnvironment.Side.CLIENT);
MixinEnvironment.getEnvironment(MixinEnvironment.Phase.PREINIT).setSide(MixinEnvironment.Side.CLIENT);
MixinEnvironment.getEnvironment(MixinEnvironment.Phase.INIT).setSide(MixinEnvironment.Side.CLIENT);
MixinEnvironment.getEnvironment(MixinEnvironment.Phase.DEFAULT).setSide(MixinEnvironment.Side.CLIENT);
Mixins.addConfiguration("mixins.baseband.json");
MixinEnvironment.getDefaultEnvironment().setObfuscationContext("searge");
}
public String[] getTransformers() {
return new String[]{
//CfgAccessTransformer.class.getName()
};
}
}

View file

@ -0,0 +1,100 @@
package org.baseband.launcher.util;
import net.minecraft.launchwrapper.Launch;
import org.baseband.launcher.launch.Loader;
import org.spongepowered.asm.service.MixinService;
import org.spongepowered.asm.service.mojang.MixinServiceLaunchWrapper;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Map;
public class CustomClassloader extends ClassLoader {
public static CustomClassloader INSTANCE;
private Map<String, byte[]> classes;
public CustomClassloader() {
//lmao no touch my pie and you die
try {
CustomMixinServer customService = new CustomMixinServer();
Class<?> mixinServiceClass = Class.forName("org.spongepowered.asm.service.MixinService");
Method instanceField = mixinServiceClass.getDeclaredMethod("getInstance");
instanceField.setAccessible(true);
Object serviceInstance = instanceField.invoke(null);
Field serviceField = mixinServiceClass.getDeclaredField("service");
serviceField.setAccessible(true);
serviceField.set(serviceInstance, customService);
if (MixinService.getService() != customService) {
throw new IllegalStateException(MixinService.getService().getClass().toString());
}
}catch (Exception e){
Loader.exit();
}
}
public CustomClassloader(Map<String, byte[]> classes) {
INSTANCE = new CustomClassloader();
INSTANCE.classes=classes;
try {
Field parent = ClassLoader.class.getDeclaredField("parent");
parent.setAccessible(true);
parent.set(INSTANCE, parent.get(Launch.classLoader));
parent.set(Launch.classLoader, INSTANCE);
} catch (IllegalAccessException | NoSuchFieldException var6) {
var6.printStackTrace();
}
}
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
if(name.startsWith("com.baseband")) {
byte[] data = classes.get(name);
if (data == null) {
return super.findClass(name);
}
Class<?> clazz = defineClass(name, data, 0, data.length);
if (clazz == null) {
throw new ClassNotFoundException(name);
}
return clazz;
}else {
try {
return Launch.classLoader.findClass(name);
}catch (ClassNotFoundException e) {
return super.findClass(name);
}
}
}
private class CustomMixinServer extends MixinServiceLaunchWrapper {
@Override
public byte[] getClassBytes(String name, String transformedName) throws IOException {
byte[] bytes = classes.get(name);
if (bytes != null) {
return bytes;
}
return super.getClassBytes(name, transformedName);
}
@Override
public byte[] getClassBytes(String name, boolean runTransformers) throws ClassNotFoundException, IOException {
byte[] bytes = classes.get(name);
if (bytes != null) {
return bytes;
}
return super.getClassBytes(name, runTransformers);
}
}
}

View file

@ -0,0 +1,23 @@
package org.baseband.launcher.util;
import java.security.MessageDigest;
public class HWID {
public static String generate() {
try {
return bytesToHex(MessageDigest.getInstance("MD5").digest((System.getenv("PROCESSOR_IDENTIFIER") + System.getenv("COMPUTERNAME") + System.getProperty("user.name")).getBytes()));
} catch (Exception e) {
return "######################";
}
}
private static String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for (int j = 0; j < bytes.length; j++) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = "0123456789ABCDEF".toCharArray()[v >>> 4];
hexChars[j * 2 + 1] = "0123456789ABCDEF".toCharArray()[v & 0x0F];
}
return new String(hexChars);
}
}

49
README.md Normal file
View file

@ -0,0 +1,49 @@
# BaseBand
it's.... NEW! *MS-DOS 5 promotional music begins*
##### Normal launcher
- Just run the installer...
- should work?
- no support if it doesn't this is all for fun
- (no pc should be without it!)
##### MultiMC
- Select the Instance and click `Edit Instance`
- Go to Version
- Hit Add Empty, make the NAME `Loader` and the UID `com.baseband`
- Select the entry and click `Edit`
- Copy and Paste this:
```yml
{
{
"formatVersion": 1,
"+tweakers": [
"com.baseband.launcher.Tweaker"
],
"libraries": [
{
"name": "org.ow2.asm:asm-all:5.0.3"
},
{
"name": "net.minecraft:launchwrapper:1.12"
},
{
"MMC-hint": "local",
"name": "com.baseband:loader:1.0.0"
}
],
"mainClass": "net.minecraft.launchwrapper.Launch",
"name": "Loader",
"uid": "com.baseband",
"version": "1.0"
}
}
```
- Save it
- Click `Open libraries` and place `Loader-1.0.0.jar` in it.
- Launch the instance

42
Server/.gitignore vendored Normal file
View file

@ -0,0 +1,42 @@
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store

18
Server/build.gradle Normal file
View file

@ -0,0 +1,18 @@
plugins {
id 'java'
}
group = 'dev.baseband'
version = '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
jar {
manifest {
attributes(
'Main-Class': 'dev.baseband.server.Main'
)
}
}

View file

@ -0,0 +1,11 @@
package dev.baseband.server;
import dev.baseband.server.socket.Socket;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
Socket.launch(args);
}
}

View file

@ -0,0 +1,59 @@
package dev.baseband.server.socket;
import java.io.*;
public class ClientHandler extends Thread {
final java.net.Socket client;
public ClientHandler(java.net.Socket client) {
this.client = client;
}
@Override
public void run() {
try {
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
DataInputStream dis = new DataInputStream(client.getInputStream());
String username = dis.readUTF();
String hashedPassword = dis.readUTF();
String hwid = dis.readUTF();
System.out.println("========================================");
System.out.println("Client connected: " + client.getInetAddress().getHostAddress());
System.out.println(username);
System.out.println(hashedPassword);
System.out.println(hwid);
int result = UserManager.isUserValid(username, hashedPassword, hwid);
if (result == 0) {
System.out.println("Client is valid");
dos.writeInt(0);
byte[] bytes = new byte[(int) Socket.file.length()];
FileInputStream fis = new FileInputStream(Socket.file);
BufferedInputStream bis = new BufferedInputStream(fis);
bis.read(bytes, 0, bytes.length);
dos.write(bytes, 0, bytes.length);
dos.flush();
System.out.println("Sent File To Client");
System.out.println("========================================");
} else {
System.out.println("Invalid, Error code "+result);
System.out.println("========================================");
dos.writeInt(result);
client.close();
}
} catch (Exception e) {
this.interrupt();
}
}
}

View file

@ -0,0 +1,47 @@
package dev.baseband.server.socket;
import java.io.*;
import java.net.ServerSocket;
public class Socket {
public static byte[] fileData;
public static File file;
public static void launch(String[] args) throws IOException {
if (args.length != 1) {
System.err.println("Usage: java Main <file>.jar");
System.exit(1);
}
file = new File(args[0]);
fileData = readFully(args[0]);
ServerSocket socket = new ServerSocket(31212);
System.out.println("Server started on port 31212");
UserManager.flush();
while (true) {
java.net.Socket client = socket.accept();
new ClientHandler(client).start();
}
}
public static byte[] readFully(String filename) throws IOException {
FileInputStream fis = new FileInputStream(filename);
byte[] buffer = new byte[1024];
int bytesRead;
ByteArrayOutputStream output = new ByteArrayOutputStream();
while ((bytesRead = fis.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
fis.close();
return output.toByteArray();
}
}

View file

@ -0,0 +1,75 @@
package dev.baseband.server.socket;
import java.io.*;
public class UserManager {
public static UserMap users = new UserMap();
public static void flush() {
Runtime.getRuntime().addShutdownHook(new Thread(()->{
try {
PrintStream printStream = new PrintStream("baseband.db");
for (String user : users.getUsernames()) {
//The end result of this is username:hashedpassword:hwid:hwidresetstatus
String userSave = user + ":" +
users.getPassword(user) + ":" +
users.getHwid(user) + ":" +
users.getResetStatus(user);
printStream.println(userSave);
}
printStream.close();
System.out.println("Saved User DB");
}catch (Exception e) {
System.out.println("Jess your garbage fire code caught fire again");
}
}));
try {
File file = new File("baseband.db");
if (!file.exists()) {
file.createNewFile();
}
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line;
while ((line = reader.readLine()) != null) {
String[] serialize = line.split(":");
if(serialize.length==4) {
users.put(serialize[0], serialize[1], serialize[2], serialize[3]);
}
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Loaded " + users.size() + " Users");
}
public static int isUserValid(String user, String hashedPassword, String hwid) {
if(!users.usernameExists(user)){
return -1; //Generic user info mismatch
}
if(!users.getPassword(user).equals(hashedPassword)) {
return -1; //Generic user info mismatch
}
if(users.getResetStatus(user).equals("false")) {
if (!users.getHwid(user).equals(hwid)) {
return -4; //HWID does not match and they are not reset
}
}else {
users.setResetStatus(user,"false");
users.setHwid(user, hwid);
return -2; //HWID does not match but they are reset, set their reset to false and set their hwid to the last sent one
}
return 0;
}
}

View file

@ -0,0 +1,63 @@
package dev.baseband.server.socket;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class UserMap {
private Map<String, Map<String, String>> map = new HashMap<>();
public void put(String username, String password, String hwid, String resetStatus) {
Map<String, String> userMap = map.computeIfAbsent(username, u -> new HashMap<>());
userMap.put("password", password);
userMap.put("hwid", hwid);
userMap.put("resetStatus", resetStatus);
}
public boolean usernameExists(String username) {
return map.getOrDefault(username, null)!=null;
}
public Set<String> getUsernames() {
return map.keySet();
}
public String getPassword(String username) {
return map.getOrDefault(username, new HashMap<>()).get("password");
}
public String getHwid(String username) {
return map.getOrDefault(username, new HashMap<>()).get("hwid");
}
public String getResetStatus(String username) {
return map.getOrDefault(username, new HashMap<>()).getOrDefault("resetStatus", "false");
}
public void setHwid(String username, String newHwid) {
map.computeIfPresent(username, (u, userMap) -> {
userMap.put("hwid", newHwid);
return userMap;
});
}
public void setPassword(String username, String newPassword) {
map.computeIfPresent(username, (u, userMap) -> {
userMap.put("password", newPassword);
return userMap;
});
}
public void setResetStatus(String username, String resetStatus) {
map.computeIfPresent(username, (u, userMap) -> {
userMap.put("resetStatus", resetStatus);
return userMap;
});
}
public int size() {
return map.size();
}
}

14
build.gradle Normal file
View file

@ -0,0 +1,14 @@
plugins {
id 'java'
}
group = 'com.thnkscj'
version = '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
}

BIN
gradle/wrapper/gradle-wrapper.jar vendored Normal file

Binary file not shown.

View file

@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip

234
gradlew vendored Executable file
View file

@ -0,0 +1,234 @@
#!/bin/sh
#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
APP_BASE_NAME=${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='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
warn () {
echo "$*"
} >&2
die () {
echo
echo "$*"
echo
exit 1
} >&2
# 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 ;; #(
MSYS* | 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" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"

89
gradlew.bat vendored Normal file
View file

@ -0,0 +1,89 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@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 Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@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="-Xmx64m" "-Xms64m"
@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 execute
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 execute
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
: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 %*
: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

6
settings.gradle Normal file
View file

@ -0,0 +1,6 @@
rootProject.name = 'BaseBand'
include 'Loader'
include 'Installer'
include 'Client'
include 'Server'