Compare commits
5 commits
dev
...
feature/ma
Author | SHA1 | Date | |
---|---|---|---|
1b3881ed1f | |||
881cbd9bdb | |||
5076e2b37c | |||
2e26856016 | |||
067b2e537d |
36 changed files with 451 additions and 252 deletions
|
@ -4,10 +4,4 @@ end_of_line = lf
|
|||
insert_final_newline = true
|
||||
charset = utf-8
|
||||
indent_style = tab
|
||||
indent_size = 4
|
||||
|
||||
[*.java]
|
||||
indent_size = 2
|
||||
|
||||
[*.gradle]
|
||||
indent_size = 4
|
||||
indent_size = 2
|
35
build.gradle
35
build.gradle
|
@ -4,13 +4,14 @@ plugins {
|
|||
alias libs.plugins.forgeGradle
|
||||
alias libs.plugins.gitVersion
|
||||
alias libs.plugins.checkerFramework
|
||||
alias libs.plugins.shadow
|
||||
}
|
||||
|
||||
version = gitVersion()
|
||||
group = 'ftbsc'
|
||||
archivesBaseName = 'bscv'
|
||||
|
||||
def shortVersion = version.split('-')[0].replaceAll(".dirty", "") // necessary when there are no extra commits on tags, and thus no dash
|
||||
def shortVersion = (version as String).split('-')[0].replaceAll(".dirty", "")
|
||||
|
||||
project.ext {
|
||||
deployJarDo = getProjectProperty("deployJar.do", "false")
|
||||
|
@ -61,6 +62,9 @@ dependencies {
|
|||
implementation libs.lillero
|
||||
implementation libs.lilleroProcessor
|
||||
implementation libs.autoServiceAnnotations
|
||||
implementation libs.luaJava
|
||||
implementation libs.luaJit
|
||||
runtimeOnly libs.luaNatives.get().toString() + ":natives-desktop" //lol
|
||||
annotationProcessor libs.lilleroProcessor
|
||||
annotationProcessor libs.autoService
|
||||
}
|
||||
|
@ -69,8 +73,26 @@ compileJava { //mappings for lillero-processor
|
|||
options.compilerArgs << '-AmappingsFile=https://data.fantabos.co/1.16.5.tsrg'
|
||||
}
|
||||
|
||||
def simpleFileName = "${jar.archiveBaseName.get()}-${shortVersion}.${jar.archiveExtension.get()}"
|
||||
|
||||
jar {
|
||||
archiveFileName = "${jar.archiveBaseName.get()}-${shortVersion}.${jar.archiveExtension.get()}"
|
||||
archiveFileName = simpleFileName
|
||||
}
|
||||
|
||||
shadowJar {
|
||||
archiveFileName = simpleFileName
|
||||
relocate('com.badlogicgames.gdx', 'b') { //needed for luajava
|
||||
include 'com.badlogicgames.gdx.utils.SharedLibraryLoad*'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
include(
|
||||
dependency {
|
||||
it.moduleGroup == 'party.iroiro.luajava'
|
||||
|| it.moduleGroup == 'com.badlogicgames.gdx'
|
||||
}
|
||||
)
|
||||
}
|
||||
manifest {
|
||||
attributes([
|
||||
"Specification-Title": "bscv",
|
||||
|
@ -84,7 +106,14 @@ jar {
|
|||
}
|
||||
}
|
||||
|
||||
jar.finalizedBy('reobfJar')
|
||||
reobf {
|
||||
jar {
|
||||
dependsOn shadowJar
|
||||
}
|
||||
shadowJar {
|
||||
dependsOn jar
|
||||
}
|
||||
}
|
||||
|
||||
//copy jar from build/libs to the forge mod folder
|
||||
tasks.register('deployJar', Copy) {
|
||||
|
|
|
@ -7,11 +7,14 @@ autoService = "1.0.1"
|
|||
lillero = "0.4.1"
|
||||
lilleroProcessor = "0.5.2"
|
||||
checkerFramework = "0.6.24"
|
||||
shadow = "7.1.2"
|
||||
luaJava = "3.5.0"
|
||||
|
||||
[plugins]
|
||||
forgeGradle = { id = "net.minecraftforge.gradle", version.ref = "forgeGradle" }
|
||||
gitVersion = { id = "com.palantir.git-version", version.ref = "gitVersion" }
|
||||
checkerFramework = { id = "org.checkerframework", version.ref = "checkerFramework"}
|
||||
checkerFramework = { id = "org.checkerframework", version.ref = "checkerFramework" }
|
||||
shadow = { id = "com.github.johnrengelman.shadow", version.ref = "shadow" }
|
||||
|
||||
[libraries]
|
||||
minecraftForge = { group = "net.minecraftforge", name = "forge", version.ref = "forge" }
|
||||
|
@ -19,3 +22,6 @@ autoService = { group = "com.google.auto.service", name = "auto-service", versio
|
|||
autoServiceAnnotations = { group = "com.google.auto.service", name = "auto-service-annotations", version.ref = "autoService" }
|
||||
lillero = { group = "ftbsc", name = "lll", version.ref = "lillero" }
|
||||
lilleroProcessor = { group = "ftbsc.lll", name = "processor", version.ref = "lilleroProcessor" }
|
||||
luaJava = { group = "party.iroiro.luajava", name = "luajava", version.ref = "luaJava" }
|
||||
luaJit = { group = "party.iroiro.luajava", name = "luajit", version.ref = "luaJava" }
|
||||
luaNatives = { group = "party.iroiro.luajava", name = "luajit-platform", version.ref = "luaJava" }
|
||||
|
|
|
@ -6,9 +6,7 @@ import com.mojang.brigadier.tree.CommandNode;
|
|||
|
||||
import ftbsc.bscv.api.IModule;
|
||||
import ftbsc.bscv.patches.CommandsPatch.CommandsBuiltEvent;
|
||||
import ftbsc.bscv.system.Friends;
|
||||
import ftbsc.bscv.system.ModManager;
|
||||
import ftbsc.bscv.system.Ruler;
|
||||
import ftbsc.bscv.system.*;
|
||||
import net.minecraft.client.gui.screen.IngameMenuScreen;
|
||||
import net.minecraft.client.gui.widget.button.Button;
|
||||
import net.minecraft.command.CommandSource;
|
||||
|
@ -27,49 +25,82 @@ import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
|||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
|
||||
@Mod("bscv")
|
||||
@Mod(Boscovicino.MOD_ID)
|
||||
public class Boscovicino implements ICommons {
|
||||
public static String MOD_ID = "bscv";
|
||||
public static final String MOD_ID = "bscv";
|
||||
|
||||
public static final Logger LOGGER = LogManager.getLogger();
|
||||
|
||||
public static ModManager modManager; //todo this should not be static
|
||||
|
||||
private final CommandDispatcher<CommandSource> dispatcher = new CommandDispatcher<>();
|
||||
|
||||
public static ForgeConfigSpec spec;
|
||||
public final ForgeConfigSpec spec;
|
||||
|
||||
private static Friends friends;
|
||||
public static Friends friends() { return Boscovicino.friends; }
|
||||
public final Modules modules;
|
||||
public final Friends friends;
|
||||
public final Bindings bindings;
|
||||
public final Macros macros;
|
||||
|
||||
@SuppressWarnings("unused") // it just needs to exist to be used by player
|
||||
private static Ruler ruler;
|
||||
@SuppressWarnings({"unused", "FieldCanBeLocal"}) // it just needs to exist to be used by player
|
||||
private final Ruler ruler; //TODO remove
|
||||
|
||||
public Boscovicino() {
|
||||
public Boscovicino() throws IOException, ReflectiveOperationException {
|
||||
// add listener
|
||||
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onSetupComplete);
|
||||
|
||||
// initialise config
|
||||
ForgeConfigSpec.Builder cfg = new ForgeConfigSpec.Builder();
|
||||
CommandDispatcher<CommandSource> dp = this.dispatcher;
|
||||
|
||||
Boscovicino.modManager = new ModManager(cfg, dp);
|
||||
Boscovicino.modManager.load();
|
||||
// load modules
|
||||
this.modules = new Modules(cfg, dp);
|
||||
this.modules.load();
|
||||
this.modules.finish();
|
||||
|
||||
Boscovicino.modManager.finish();
|
||||
this.ruler = new Ruler(); //TODO remove
|
||||
|
||||
Boscovicino.ruler = new Ruler();
|
||||
|
||||
Boscovicino.spec = cfg.build();
|
||||
// macros and bindings
|
||||
ForgeConfigSpec.Builder bindingSpec = new ForgeConfigSpec.Builder();
|
||||
this.bindings = new Bindings(bindingSpec);
|
||||
this.macros = new Macros(this);
|
||||
|
||||
//friends
|
||||
ForgeConfigSpec.Builder friendSpec = new ForgeConfigSpec.Builder();
|
||||
Boscovicino.friends = new Friends(friendSpec, dp);
|
||||
this.friends = new Friends(friendSpec, dp);
|
||||
|
||||
// register config handler
|
||||
ModLoadingContext.get().registerConfig(Type.CLIENT, spec, "bscv.toml");
|
||||
// register config handlers
|
||||
this.spec = cfg.build();
|
||||
ModLoadingContext.get().registerConfig(Type.CLIENT, this.spec, "bscv.toml");
|
||||
ModLoadingContext.get().registerConfig(Type.CLIENT, friendSpec.build(), "friends.toml");
|
||||
ModLoadingContext.get().registerConfig(Type.CLIENT, bindingSpec.build(), "bindings.toml");
|
||||
|
||||
// Register ourselves for server and other game events we are interested in
|
||||
// register ourselves for server and other game events we are interested in
|
||||
MinecraftForge.EVENT_BUS.register(this);
|
||||
|
||||
// set the ICommons instance with reflection magic
|
||||
// should go without saying, but don't access BSCV's members before loading is complete
|
||||
Field instance = ICommons.class.getDeclaredField("BSCV");
|
||||
Field modifiersField = Field.class.getDeclaredField("modifiers");
|
||||
modifiersField.setInt(instance, instance.getModifiers() & ~Modifier.FINAL); //make non final
|
||||
instance.set(null, this); //set instance
|
||||
modifiersField.setInt(instance, instance.getModifiers() & Modifier.FINAL); //make it final again
|
||||
}
|
||||
|
||||
/**
|
||||
* Fake constructor, only used to set the temporary value of {@link ICommons#BSCV}.
|
||||
* The sole purpose of this is to make the language server shut up about null pointer exceptions.
|
||||
* @param ignored dummy parameter to distinguish from real constructor.
|
||||
*/
|
||||
Boscovicino(boolean ignored) {
|
||||
this.modules = null;
|
||||
this.ruler = null;
|
||||
this.bindings = null;
|
||||
this.macros = null;
|
||||
this.friends = null;
|
||||
this.spec = null;
|
||||
}
|
||||
|
||||
public static void log(String message, Object... args) {
|
||||
|
@ -86,7 +117,7 @@ public class Boscovicino implements ICommons {
|
|||
private void onSetupComplete(final FMLLoadCompleteEvent event) {
|
||||
LOGGER.info("Initializing modules");
|
||||
|
||||
for (IModule m : modManager.mods) {
|
||||
for (IModule m : modules.mods) {
|
||||
if (m.isEnabled()) {
|
||||
m.enable(); // re-run enable() to register on the event bus and run enabled callbacks
|
||||
}
|
||||
|
@ -102,8 +133,8 @@ public class Boscovicino implements ICommons {
|
|||
|
||||
@SubscribeEvent
|
||||
public void onClientChatEvent(ClientChatEvent event) {
|
||||
if (event.getMessage().startsWith("/")) {
|
||||
CommandSource source = MC.player.createCommandSourceStack(); // TODO player could be NULL
|
||||
if (MC.player != null && event.getMessage().startsWith("/")) {
|
||||
CommandSource source = MC.player.createCommandSourceStack();
|
||||
try {
|
||||
LOGGER.info(String.format("Running command %s", event.getMessage()));
|
||||
this.dispatcher.execute(event.getMessage().substring(1), source);
|
||||
|
@ -116,14 +147,15 @@ public class Boscovicino implements ICommons {
|
|||
}
|
||||
|
||||
@SubscribeEvent
|
||||
// TODO de-jank this, maybe by extending IngameMenuScreen
|
||||
public void onPauseMenu(InitGuiEvent.Post event) {
|
||||
if (event.getGui() instanceof IngameMenuScreen) { // TODO de-jank this, maybe by extending IngameMenuScreen
|
||||
if (event.getGui() instanceof IngameMenuScreen) {
|
||||
IngameMenuScreen screen = (IngameMenuScreen) event.getGui();
|
||||
screen.buttons.remove(3);
|
||||
screen.buttons.remove(3);
|
||||
screen.children.remove(3);
|
||||
screen.children.remove(3);
|
||||
Button mods_btn = new Button(
|
||||
Button modsBtn = new Button(
|
||||
screen.width / 2 + 4,
|
||||
screen.height / 4 + 72 + -16, 98, 20,
|
||||
new TranslationTextComponent("fml.menu.mods"),
|
||||
|
@ -132,10 +164,10 @@ public class Boscovicino implements ICommons {
|
|||
}
|
||||
);
|
||||
// need to add it twice for it to work once...
|
||||
screen.buttons.add(3, mods_btn);
|
||||
screen.buttons.add(3, mods_btn);
|
||||
screen.children.add(3, mods_btn);
|
||||
screen.children.add(3, mods_btn);
|
||||
screen.buttons.add(3, modsBtn);
|
||||
screen.buttons.add(3, modsBtn);
|
||||
screen.children.add(3, modsBtn);
|
||||
screen.children.add(3, modsBtn);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,5 +3,6 @@ package ftbsc.bscv;
|
|||
import net.minecraft.client.Minecraft;
|
||||
|
||||
public interface ICommons {
|
||||
public static final Minecraft MC = Minecraft.getInstance();
|
||||
Minecraft MC = Minecraft.getInstance();
|
||||
Boscovicino BSCV = new Boscovicino(true); //actually overwritten via reflection with the real instance
|
||||
}
|
||||
|
|
|
@ -6,7 +6,6 @@ import java.util.List;
|
|||
import com.mojang.brigadier.CommandDispatcher;
|
||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||
|
||||
import ftbsc.bscv.Boscovicino;
|
||||
import ftbsc.bscv.ICommons;
|
||||
import ftbsc.bscv.api.ICommand;
|
||||
import net.minecraft.command.CommandSource;
|
||||
|
@ -19,7 +18,7 @@ public abstract class AbstractCommand implements ICommand, ICommons {
|
|||
}
|
||||
|
||||
public CommandDispatcher<CommandSource> getDispatcher() {
|
||||
return Boscovicino.modManager.getDispatcher();
|
||||
return BSCV.modules.getDispatcher();
|
||||
}
|
||||
|
||||
public List<LiteralArgumentBuilder<CommandSource>> subcommands() {
|
||||
|
|
|
@ -21,6 +21,8 @@ public class Cursor extends AbstractCommand {
|
|||
.then(
|
||||
Commands.literal("info")
|
||||
.executes(ctx -> {
|
||||
if (MC.level == null || MC.hitResult == null)
|
||||
return 0;
|
||||
switch (MC.hitResult.getType()) {
|
||||
case BLOCK:
|
||||
BlockRayTraceResult result = (BlockRayTraceResult) MC.hitResult;
|
||||
|
|
|
@ -24,6 +24,8 @@ public class ItemCommand extends AbstractCommand {
|
|||
.then(
|
||||
Commands.literal("damage")
|
||||
.executes(ctx -> {
|
||||
if(MC.player == null)
|
||||
return 0;
|
||||
Slot slot = Inventory.hotbar(MC.player).get(MC.player.inventory.selected);
|
||||
if (!slot.hasItem()) return 0;
|
||||
log(
|
||||
|
@ -49,6 +51,8 @@ public class ItemCommand extends AbstractCommand {
|
|||
)
|
||||
)
|
||||
.executes(ctx -> {
|
||||
if(MC.player == null)
|
||||
return 0;
|
||||
Slot slot = Inventory.hotbar(MC.player).get(MC.player.inventory.selected);
|
||||
if (!slot.hasItem()) return 0;
|
||||
log(slot.getItem().toString());
|
||||
|
|
|
@ -22,7 +22,7 @@ public class ModCommands extends AbstractCommand {
|
|||
.then(
|
||||
Commands.literal("off")
|
||||
.executes(ctx -> {
|
||||
for (IModule mod : Boscovicino.modManager.mods) {
|
||||
for (IModule mod : BSCV.modules.mods) {
|
||||
if (mod.isEnabled()) {
|
||||
mod.disable();
|
||||
}
|
||||
|
@ -33,7 +33,7 @@ public class ModCommands extends AbstractCommand {
|
|||
.then(
|
||||
Commands.literal("re-enable") // this is to fix some jankyness in event subscriptions
|
||||
.executes(ctx -> {
|
||||
for (IModule mod : Boscovicino.modManager.mods) {
|
||||
for (IModule mod : BSCV.modules.mods) {
|
||||
if (mod.isEnabled()) {
|
||||
mod.disable();
|
||||
mod.enable();
|
||||
|
@ -43,8 +43,8 @@ public class ModCommands extends AbstractCommand {
|
|||
})
|
||||
)
|
||||
.executes(ctx -> {
|
||||
String mods = Boscovicino.modManager.mods.stream()
|
||||
.map(x -> x.getName())
|
||||
String mods = BSCV.modules.mods.stream()
|
||||
.map(ILoadable::getName)
|
||||
.collect(Collectors.joining(","));
|
||||
Boscovicino.log("[ %s ]", mods);
|
||||
return 1;
|
||||
|
|
|
@ -23,6 +23,8 @@ public class Teleport extends AbstractCommand {
|
|||
.then(
|
||||
Commands.argument("distance", DoubleArgumentType.doubleArg())
|
||||
.executes( ctx -> {
|
||||
if(MC.player == null)
|
||||
return 0;
|
||||
double distance = ctx.getArgument("distance", Double.class);
|
||||
MC.player.setPos(
|
||||
MC.player.position().x,
|
||||
|
@ -41,6 +43,8 @@ public class Teleport extends AbstractCommand {
|
|||
.then(
|
||||
Commands.argument("z", DoubleArgumentType.doubleArg())
|
||||
.executes( ctx -> {
|
||||
if(MC.player == null)
|
||||
return 0;
|
||||
double x = ctx.getArgument("x", Double.class);
|
||||
double y = ctx.getArgument("y", Double.class);
|
||||
double z = ctx.getArgument("z", Double.class);
|
||||
|
|
|
@ -2,7 +2,6 @@ package ftbsc.bscv.modules;
|
|||
|
||||
import com.mojang.brigadier.CommandDispatcher;
|
||||
import com.mojang.brigadier.arguments.BoolArgumentType;
|
||||
import ftbsc.bscv.Boscovicino;
|
||||
import ftbsc.bscv.ICommons;
|
||||
import ftbsc.bscv.api.IModule;
|
||||
import net.minecraft.command.CommandSource;
|
||||
|
@ -27,12 +26,12 @@ public abstract class AbstractModule implements IModule, ICommons {
|
|||
|
||||
@Override
|
||||
public ForgeConfigSpec.Builder getConfigBuilder() {
|
||||
return Boscovicino.modManager.getCfgBuilder();
|
||||
return BSCV.modules.getCfgBuilder();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandDispatcher<CommandSource> getDispatcher() {
|
||||
return Boscovicino.modManager.getDispatcher();
|
||||
return BSCV.modules.getDispatcher();
|
||||
}
|
||||
|
||||
public AbstractModule() {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package ftbsc.bscv.modules;
|
||||
|
||||
import ftbsc.bscv.Boscovicino;
|
||||
import ftbsc.bscv.tools.Keybind;
|
||||
import net.minecraft.client.settings.KeyBinding;
|
||||
import net.minecraft.client.util.InputMappings;
|
||||
|
@ -14,7 +13,7 @@ public abstract class QuickModule extends AbstractModule {
|
|||
|
||||
public static final int UNBOUND = InputMappings.UNKNOWN.getValue();
|
||||
|
||||
private class ToggleHook {
|
||||
private static class ToggleHook {
|
||||
private final KeyBinding key;
|
||||
private final QuickModule mod;
|
||||
private boolean debounce;
|
||||
|
|
|
@ -2,7 +2,6 @@ package ftbsc.bscv.modules.defense;
|
|||
|
||||
import com.google.auto.service.AutoService;
|
||||
|
||||
import ftbsc.bscv.Boscovicino;
|
||||
import ftbsc.bscv.api.ILoadable;
|
||||
import ftbsc.bscv.modules.QuickModule;
|
||||
import ftbsc.bscv.modules.self.AutoTool;
|
||||
|
@ -24,18 +23,13 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|||
@AutoService(ILoadable.class)
|
||||
public class Aura extends QuickModule {
|
||||
|
||||
private enum LookType {
|
||||
public enum LookType {
|
||||
NONE,
|
||||
PACKET,
|
||||
ONCE,
|
||||
// RESET
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getDefaultKey() {
|
||||
return UNBOUND;
|
||||
}
|
||||
|
||||
public final ForgeConfigSpec.ConfigValue<Double> reach;
|
||||
public final ForgeConfigSpec.ConfigValue<Double> strenght;
|
||||
public final ForgeConfigSpec.ConfigValue<Boolean> tool;
|
||||
|
@ -105,7 +99,7 @@ public class Aura extends QuickModule {
|
|||
@Override
|
||||
public void enable() {
|
||||
super.enable();
|
||||
this.autotool = (AutoTool) Boscovicino.modManager.get(AutoTool.class);
|
||||
this.autotool = (AutoTool) BSCV.modules.get(AutoTool.class);
|
||||
}
|
||||
|
||||
private void lookAtHidden(EntityAnchorArgument.Type anchor, Vector3d target) {
|
||||
|
@ -139,7 +133,7 @@ public class Aura extends QuickModule {
|
|||
if (!this.neutral.get() && e.getClassification(false).isFriendly()) continue;
|
||||
if (e instanceof PlayerEntity) {
|
||||
PlayerEntity player = (PlayerEntity) e;
|
||||
if (Boscovicino.friends().isFriend(player.getGameProfile().getId())) {
|
||||
if (BSCV.friends.isFriend(player.getGameProfile().getId())) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package ftbsc.bscv.modules.hud;
|
||||
|
||||
import com.google.auto.service.AutoService;
|
||||
import ftbsc.bscv.Boscovicino;
|
||||
import ftbsc.bscv.api.ILoadable;
|
||||
import ftbsc.bscv.api.IModule;
|
||||
import ftbsc.bscv.modules.HudModule;
|
||||
|
@ -18,7 +17,7 @@ public class ActiveModules extends HudModule {
|
|||
if (event.getType() != ElementType.TEXT) return;
|
||||
if (this.shouldHide()) return;
|
||||
int offset = 0;
|
||||
for (IModule m : Boscovicino.modManager.mods) {
|
||||
for (IModule m : BSCV.modules.mods) {
|
||||
if (m.isEnabled() && !m.getGroup().equalsIgnoreCase("HUD")) {
|
||||
TextBuilder()
|
||||
.txt(this.affixed(m.getName()))
|
||||
|
|
|
@ -26,7 +26,7 @@ public class Coordinates extends HudModule {
|
|||
@SubscribeEvent
|
||||
public void onTick(TickEvent.ClientTickEvent event) {
|
||||
if (event.phase == Phase.START) return;
|
||||
if (MC.player == null) return;
|
||||
if (MC.player == null || MC.level == null) return;
|
||||
|
||||
this.posX = MC.player.getX();
|
||||
this.posY = MC.player.getY();
|
||||
|
|
|
@ -38,6 +38,7 @@ public class EntityList extends HudModule {
|
|||
@SubscribeEvent
|
||||
public void onRenderOverlay(RenderGameOverlayEvent event) {
|
||||
if (event.getType() != ElementType.TEXT) return;
|
||||
if (MC.level == null) return;
|
||||
if (this.shouldHide()) return;
|
||||
|
||||
List<String> entities = new ArrayList<>();
|
||||
|
@ -65,7 +66,7 @@ public class EntityList extends HudModule {
|
|||
.y(this.y.get() + offset)
|
||||
.scale(this.scale.get())
|
||||
.style(
|
||||
this.search.get().length() > 0 && u.toLowerCase().contains(this.search.get().toLowerCase())
|
||||
this.search.get().isEmpty() && u.toLowerCase().contains(this.search.get().toLowerCase())
|
||||
? Style.EMPTY.withBold(true).withColor(Color.fromLegacyFormat(TextFormatting.GOLD))
|
||||
: Style.EMPTY.withColor(Color.fromLegacyFormat(TextFormatting.WHITE))
|
||||
)
|
||||
|
|
|
@ -1,30 +1,22 @@
|
|||
package ftbsc.bscv.modules.hud;
|
||||
|
||||
import com.google.auto.service.AutoService;
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
|
||||
import ftbsc.bscv.api.ILoadable;
|
||||
import ftbsc.bscv.modules.AbstractModule;
|
||||
import ftbsc.bscv.tools.Inventory;
|
||||
import ftbsc.bscv.tools.Setting;
|
||||
import net.minecraft.client.gui.screen.inventory.ContainerScreen;
|
||||
import net.minecraft.inventory.container.Slot;
|
||||
import net.minecraft.item.EnchantedBookItem;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.nbt.ListNBT;
|
||||
import net.minecraftforge.client.event.GuiContainerEvent;
|
||||
import net.minecraftforge.common.ForgeConfigSpec;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.client.gui.GuiUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import ftbsc.bscv.api.ILoadable;
|
||||
import com.google.auto.service.AutoService;
|
||||
|
||||
@AutoService(ILoadable.class)
|
||||
public class Highlighter extends AbstractModule {
|
||||
|
||||
|
|
|
@ -25,13 +25,13 @@ import static ftbsc.bscv.tools.Text.TextBuilder;
|
|||
@AutoService(ILoadable.class)
|
||||
public class InfoDisplay extends HudModule {
|
||||
|
||||
private Vector3d last_position = new Vector3d(0.0, 0.0, 0.0);
|
||||
private double instant_speed = 0.0;
|
||||
private double average_speed = 0.0;
|
||||
private double instant_tps = 0.0;
|
||||
private int instant_ping = 0;
|
||||
private Queue<Double> speed_history = new LinkedList<>();
|
||||
private Queue<Long> tps_history = new LinkedList<>();
|
||||
private Vector3d lastPosition = new Vector3d(0.0, 0.0, 0.0);
|
||||
private double instantSpeed = 0.0;
|
||||
private double averageSpeed = 0.0;
|
||||
private double instantTps = 0.0;
|
||||
private int instantPing = 0;
|
||||
private final Queue<Double> speedHistory = new LinkedList<>();
|
||||
private final Queue<Long> tpsHistory = new LinkedList<>();
|
||||
|
||||
public final ForgeConfigSpec.ConfigValue<Boolean> logo;
|
||||
public final ForgeConfigSpec.ConfigValue<Boolean> speed;
|
||||
|
@ -43,16 +43,16 @@ public class InfoDisplay extends HudModule {
|
|||
// public final ForgeConfigSpec.ConfigValue<Boolean> biome;
|
||||
// public final ForgeConfigSpec.ConfigValue<Boolean> light;
|
||||
// public final ForgeConfigSpec.ConfigValue<Boolean> saturation;
|
||||
// public final ForgeConfigSpec.ConfigValue<Boolean> system_time;
|
||||
// public final ForgeConfigSpec.ConfigValue<Boolean> damage_value;
|
||||
// public final ForgeConfigSpec.ConfigValue<Boolean> effects_list;
|
||||
// public final ForgeConfigSpec.ConfigValue<Boolean> item_quantity;
|
||||
// public final ForgeConfigSpec.ConfigValue<Boolean> client_chunk_size;
|
||||
// public final ForgeConfigSpec.ConfigValue<Boolean> systemTime;
|
||||
// public final ForgeConfigSpec.ConfigValue<Boolean> damageValue;
|
||||
// public final ForgeConfigSpec.ConfigValue<Boolean> effectsList;
|
||||
// public final ForgeConfigSpec.ConfigValue<Boolean> itemQuantity;
|
||||
// public final ForgeConfigSpec.ConfigValue<Boolean> clientChunkSize;
|
||||
|
||||
public final ForgeConfigSpec.ConfigValue<Boolean> hide_effects;
|
||||
public final ForgeConfigSpec.ConfigValue<Boolean> hideEffects;
|
||||
|
||||
public final ForgeConfigSpec.ConfigValue<Integer> tps_sample_size;
|
||||
public final ForgeConfigSpec.ConfigValue<Integer> speed_sample_size;
|
||||
public final ForgeConfigSpec.ConfigValue<Integer> tpsSampleSize;
|
||||
public final ForgeConfigSpec.ConfigValue<Integer> speedSampleSize;
|
||||
|
||||
public InfoDisplay() {
|
||||
super();
|
||||
|
@ -99,20 +99,20 @@ public class InfoDisplay extends HudModule {
|
|||
.fallback(true)
|
||||
.build(this);
|
||||
|
||||
this.hide_effects = Setting.Bool.builder()
|
||||
this.hideEffects = Setting.Bool.builder()
|
||||
.name("hide-effects")
|
||||
.comment("hide effect icons on top right corner")
|
||||
.fallback(false)
|
||||
.build(this);
|
||||
|
||||
this.tps_sample_size = Setting.Number.builder()
|
||||
this.tpsSampleSize = Setting.Number.builder()
|
||||
.min(2)
|
||||
.name("tps-sample-size")
|
||||
.comment("TPS samples to store (1 taken each second)")
|
||||
.fallback(60)
|
||||
.build(this);
|
||||
|
||||
this.speed_sample_size = Setting.Number.builder()
|
||||
this.speedSampleSize = Setting.Number.builder()
|
||||
.min(2)
|
||||
.name("speed-sample-size")
|
||||
.comment("instant speed samples to store (1 taken each tick)")
|
||||
|
@ -124,59 +124,59 @@ public class InfoDisplay extends HudModule {
|
|||
public void onTick(TickEvent.ClientTickEvent event) {
|
||||
if (!this.speed.get()) return;
|
||||
if (event.phase == Phase.START) return;
|
||||
if (MC.player != null) {
|
||||
this.instant_speed = this.last_position.distanceTo(MC.player.position());
|
||||
this.last_position = MC.player.position();
|
||||
if (MC.player != null && MC.getConnection() != null) {
|
||||
this.instantSpeed = this.lastPosition.distanceTo(MC.player.position());
|
||||
this.lastPosition = MC.player.position();
|
||||
NetworkPlayerInfo info = MC.getConnection().getPlayerInfo(
|
||||
MC.player.getGameProfile().getId()
|
||||
);
|
||||
if (info != null) { // bungeecord switching makes this null for a second
|
||||
this.instant_ping = info.getLatency();
|
||||
this.instantPing = info.getLatency();
|
||||
}
|
||||
} else {
|
||||
this.instant_speed = 0.0;
|
||||
this.instant_ping = 0;
|
||||
this.instantSpeed = 0.0;
|
||||
this.instantPing = 0;
|
||||
}
|
||||
|
||||
this.speed_history.offer(this.instant_speed);
|
||||
while (this.speed_history.size() >= this.speed_sample_size.get()) {
|
||||
this.speed_history.poll();
|
||||
this.speedHistory.offer(this.instantSpeed);
|
||||
while (this.speedHistory.size() >= this.speedSampleSize.get()) {
|
||||
this.speedHistory.poll();
|
||||
}
|
||||
|
||||
double buf = 0.0;
|
||||
for (double v : this.speed_history) { buf += v; }
|
||||
this.average_speed = buf / this.speed_history.size();
|
||||
for (double v : this.speedHistory) { buf += v; }
|
||||
this.averageSpeed = buf / this.speedHistory.size();
|
||||
|
||||
if (this.last_fps_string != MC.fpsString) {
|
||||
this.last_fps_string = MC.fpsString;
|
||||
this.curr_fps = this.last_fps_string.split(" ")[0];
|
||||
if (this.lastFpsString.equals(MC.fpsString)) {
|
||||
this.lastFpsString = MC.fpsString;
|
||||
this.currFps = this.lastFpsString.split(" ")[0];
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onPacket(PacketEvent.Incoming event) {
|
||||
if (event.packet instanceof SUpdateTimePacket) {
|
||||
this.tps_history.offer(System.currentTimeMillis());
|
||||
while (this.tps_history.size() > this.tps_sample_size.get()) {
|
||||
this.tps_history.poll();
|
||||
this.tpsHistory.offer(System.currentTimeMillis());
|
||||
while (this.tpsHistory.size() > this.tpsSampleSize.get()) {
|
||||
this.tpsHistory.poll();
|
||||
}
|
||||
double positive_time = 0.;
|
||||
double last_time = 0;
|
||||
for (long t : this.tps_history) {
|
||||
if (last_time != 0) {
|
||||
double delta = (double) (t - last_time) / 1000.;
|
||||
positive_time += Math.max(delta, 1.);
|
||||
double positiveTime = 0.;
|
||||
double lastTime = 0;
|
||||
for (long t : this.tpsHistory) {
|
||||
if (lastTime != 0) {
|
||||
double delta = (double) (t - lastTime) / 1000.;
|
||||
positiveTime += Math.max(delta, 1.);
|
||||
}
|
||||
last_time = t;
|
||||
lastTime = t;
|
||||
}
|
||||
this.instant_tps = 20 / (positive_time / (this.tps_history.size() - 1));
|
||||
this.instantTps = 20 / (positiveTime / (this.tpsHistory.size() - 1));
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onRenderOverlay(RenderGameOverlayEvent event) {
|
||||
if (event.getType() == ElementType.POTION_ICONS) {
|
||||
if (this.hide_effects.get() && event.isCancelable()) {
|
||||
if (this.hideEffects.get() && event.isCancelable()) {
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
|
@ -195,7 +195,7 @@ public class InfoDisplay extends HudModule {
|
|||
.style(Style.EMPTY.withColor(Color.fromRgb(12542314)).withBold(true))
|
||||
.scale(scale * 4.0)
|
||||
.render(event.getMatrixStack(), event.getWindow());
|
||||
offset += MC.font.lineHeight * scale * 4.0;
|
||||
offset += (int) (MC.font.lineHeight * scale * 4.0);
|
||||
}
|
||||
|
||||
long day = 0;
|
||||
|
@ -207,46 +207,46 @@ public class InfoDisplay extends HudModule {
|
|||
|
||||
if (this.fps.get()) {
|
||||
TextBuilder()
|
||||
.txt(this.affixed("fps: %s", this.curr_fps))
|
||||
.txt(this.affixed("fps: %s", this.currFps))
|
||||
.anchor(this.anchor.get())
|
||||
.x(this.x.get())
|
||||
.y(this.y.get() + offset)
|
||||
.scale(scale)
|
||||
.render(event.getMatrixStack(), event.getWindow());
|
||||
offset += MC.font.lineHeight * scale;
|
||||
offset += (int) (MC.font.lineHeight * scale);
|
||||
}
|
||||
|
||||
if (this.ping.get()) {
|
||||
TextBuilder()
|
||||
.txt(this.affixed("ping: %d", this.instant_ping))
|
||||
.txt(this.affixed("ping: %d", this.instantPing))
|
||||
.anchor(this.anchor.get())
|
||||
.x(this.x.get())
|
||||
.y(this.y.get() + offset)
|
||||
.scale(scale)
|
||||
.render(event.getMatrixStack(), event.getWindow());
|
||||
offset += MC.font.lineHeight * scale;
|
||||
offset += (int) (MC.font.lineHeight * scale);
|
||||
}
|
||||
|
||||
if (this.tps.get()) {
|
||||
TextBuilder()
|
||||
.txt(this.affixed("tps: %.1f", this.instant_tps))
|
||||
.txt(this.affixed("tps: %.1f", this.instantTps))
|
||||
.anchor(this.anchor.get())
|
||||
.x(this.x.get())
|
||||
.y(this.y.get() + offset)
|
||||
.scale(scale)
|
||||
.render(event.getMatrixStack(), event.getWindow());
|
||||
offset += MC.font.lineHeight * scale;
|
||||
offset += (int) (MC.font.lineHeight * scale);
|
||||
}
|
||||
|
||||
if (this.speed.get()) {
|
||||
TextBuilder()
|
||||
.txt(this.affixed("speed: %.1f [%.1f] m/s", this.instant_speed * 20.0, this.average_speed * 20.0))
|
||||
.txt(this.affixed("speed: %.1f [%.1f] m/s", this.instantSpeed * 20.0, this.averageSpeed * 20.0))
|
||||
.anchor(this.anchor.get())
|
||||
.x(this.x.get())
|
||||
.y(this.y.get() + offset)
|
||||
.scale(scale)
|
||||
.render(event.getMatrixStack(), event.getWindow());
|
||||
offset += MC.font.lineHeight * scale;
|
||||
offset += (int) (MC.font.lineHeight * scale);
|
||||
}
|
||||
|
||||
if (this.age.get()) {
|
||||
|
@ -257,10 +257,11 @@ public class InfoDisplay extends HudModule {
|
|||
.y(this.y.get() + offset)
|
||||
.scale(scale)
|
||||
.render(event.getMatrixStack(), event.getWindow());
|
||||
offset += MC.font.lineHeight * scale;
|
||||
offset += (int) (MC.font.lineHeight * scale);
|
||||
}
|
||||
|
||||
if (this.time.get()) {
|
||||
int TPS = 20;
|
||||
TextBuilder()
|
||||
.txt(this.affixed("time: %d/%d (%s)", (time / TPS), this.getNextStep(time) / TPS, this.getTimePhase(time) ))
|
||||
.anchor(this.anchor.get())
|
||||
|
@ -268,12 +269,12 @@ public class InfoDisplay extends HudModule {
|
|||
.y(this.y.get() + offset)
|
||||
.scale(scale)
|
||||
.render(event.getMatrixStack(), event.getWindow());
|
||||
offset += MC.font.lineHeight * scale;
|
||||
offset += (int) (MC.font.lineHeight * scale);
|
||||
}
|
||||
}
|
||||
|
||||
private String last_fps_string;
|
||||
private String curr_fps = "0";
|
||||
private String lastFpsString;
|
||||
private String currFps = "0";
|
||||
|
||||
// TPS utils
|
||||
|
||||
|
@ -301,5 +302,4 @@ public class InfoDisplay extends HudModule {
|
|||
return 5500;
|
||||
}
|
||||
|
||||
private final int TPS = 20;
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ public class PlayerList extends HudModule {
|
|||
public void onRenderOverlay(RenderGameOverlayEvent event) {
|
||||
if (event.getType() != ElementType.TEXT) return;
|
||||
if (this.shouldHide()) return;
|
||||
if (MC.level == null) return;
|
||||
|
||||
int offset = 0;
|
||||
for (Entity e : MC.level.entitiesForRendering()) {
|
||||
|
|
|
@ -2,7 +2,6 @@ package ftbsc.bscv.modules.motion;
|
|||
|
||||
import com.google.auto.service.AutoService;
|
||||
|
||||
import ftbsc.bscv.Boscovicino;
|
||||
import ftbsc.bscv.api.ILoadable;
|
||||
import ftbsc.bscv.modules.AbstractModule;
|
||||
import ftbsc.bscv.patches.BackgroundPatch.RenderBackgroundEvent;
|
||||
|
@ -30,7 +29,7 @@ public class GuiMove extends AbstractModule {
|
|||
|
||||
public final ForgeConfigSpec.ConfigValue<Boolean> background;
|
||||
|
||||
private AutoWalk autoWalk_mod;
|
||||
private AutoWalk autoWalkMod;
|
||||
|
||||
public GuiMove() {
|
||||
super();
|
||||
|
@ -44,7 +43,7 @@ public class GuiMove extends AbstractModule {
|
|||
|
||||
@Override
|
||||
public void enable() {
|
||||
this.autoWalk_mod = (AutoWalk) Boscovicino.modManager.get(AutoWalk.class);
|
||||
this.autoWalkMod = (AutoWalk) BSCV.modules.get(AutoWalk.class);
|
||||
super.enable();
|
||||
}
|
||||
|
||||
|
@ -72,7 +71,7 @@ public class GuiMove extends AbstractModule {
|
|||
|
||||
private void forceMovementTick(MovementInput input) {
|
||||
// TODO can we patch to make this always happen instead of duplicating code?
|
||||
input.up = this.autoWalk_mod.isEnabled() || this.isKeyDown(MC.options.keyUp);
|
||||
input.up = this.autoWalkMod.isEnabled() || this.isKeyDown(MC.options.keyUp);
|
||||
input.down = this.isKeyDown(MC.options.keyDown);
|
||||
input.left = this.isKeyDown(MC.options.keyLeft);
|
||||
input.right = this.isKeyDown(MC.options.keyRight);
|
||||
|
|
|
@ -16,7 +16,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|||
@AutoService(ILoadable.class)
|
||||
public class VanillaFlight extends QuickModule {
|
||||
|
||||
private enum AntikickMode {
|
||||
public enum AntiKickMode {
|
||||
NONE,
|
||||
PACKET,
|
||||
FORCED
|
||||
|
@ -27,10 +27,10 @@ public class VanillaFlight extends QuickModule {
|
|||
public final ForgeConfigSpec.ConfigValue<Boolean> force;
|
||||
public final ForgeConfigSpec.ConfigValue<Boolean> drift;
|
||||
public final ForgeConfigSpec.ConfigValue<Double> speed;
|
||||
public final ForgeConfigSpec.ConfigValue<AntikickMode> antikick;
|
||||
public final ForgeConfigSpec.ConfigValue<Double> antikick_magnitude;
|
||||
public final ForgeConfigSpec.ConfigValue<Integer> antikick_cycle;
|
||||
public final ForgeConfigSpec.ConfigValue<Integer> antikick_duration;
|
||||
public final ForgeConfigSpec.ConfigValue<AntiKickMode> antikick;
|
||||
public final ForgeConfigSpec.ConfigValue<Double> antikickMagnitude;
|
||||
public final ForgeConfigSpec.ConfigValue<Integer> antikickCycle;
|
||||
public final ForgeConfigSpec.ConfigValue<Integer> antikickDuration;
|
||||
|
||||
private int tick = 0;
|
||||
|
||||
|
@ -56,20 +56,20 @@ public class VanillaFlight extends QuickModule {
|
|||
.comment("flight speed to set")
|
||||
.build(this);
|
||||
|
||||
this.antikick = Setting.Switch.builder(AntikickMode.class)
|
||||
.fallback(AntikickMode.PACKET)
|
||||
this.antikick = Setting.Switch.builder(AntiKickMode.class)
|
||||
.fallback(AntiKickMode.PACKET)
|
||||
.name("antikick")
|
||||
.comment("prevent vanilla flight kick by descending")
|
||||
.build(this);
|
||||
|
||||
this.antikick_magnitude = Setting.Decimal.builder()
|
||||
this.antikickMagnitude = Setting.Decimal.builder()
|
||||
.min(0.)
|
||||
.fallback(0.032)
|
||||
.name("magnitude")
|
||||
.comment("magnitude of antikick push")
|
||||
.build(this);
|
||||
|
||||
this.antikick_cycle = Setting.Number.builder()
|
||||
this.antikickCycle = Setting.Number.builder()
|
||||
.min(1)
|
||||
.max(80)
|
||||
.fallback(70)
|
||||
|
@ -77,7 +77,7 @@ public class VanillaFlight extends QuickModule {
|
|||
.comment("how often to run antikick routine")
|
||||
.build(this);
|
||||
|
||||
this.antikick_duration = Setting.Number.builder()
|
||||
this.antikickDuration = Setting.Number.builder()
|
||||
.min(1)
|
||||
.max(80)
|
||||
.fallback(5)
|
||||
|
@ -86,7 +86,7 @@ public class VanillaFlight extends QuickModule {
|
|||
.build(this);
|
||||
}
|
||||
|
||||
private long last_event = 0;
|
||||
private long lastEvent = 0;
|
||||
|
||||
private boolean couldFlyBefore = false;
|
||||
private float flyingSpeedBefore = 0.05f;
|
||||
|
@ -113,11 +113,11 @@ public class VanillaFlight extends QuickModule {
|
|||
MC.player.setDeltaMovement(Vector3d.ZERO);
|
||||
}
|
||||
|
||||
this.tick = ( this.tick + 1 ) % this.antikick_cycle.get();
|
||||
this.tick = ( this.tick + 1 ) % this.antikickCycle.get();
|
||||
Vector3d pos = MC.player.position();
|
||||
|
||||
if (this.tick == 0 && this.antikick.get() == AntikickMode.PACKET) {
|
||||
MC.player.setPos(pos.x, pos.y - this.antikick_magnitude.get(), pos.z);
|
||||
if (this.tick == 0 && this.antikick.get() == AntiKickMode.PACKET) {
|
||||
MC.player.setPos(pos.x, pos.y - this.antikickMagnitude.get(), pos.z);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -126,11 +126,11 @@ public class VanillaFlight extends QuickModule {
|
|||
long now = System.currentTimeMillis();
|
||||
switch (this.antikickState) {
|
||||
case COOLDOWN:
|
||||
if (now - this.last_event < this.antikick_cycle.get() * MS_PER_TICK) break;
|
||||
this.last_event = now;
|
||||
if (now - this.lastEvent < this.antikickCycle.get() * MS_PER_TICK) break;
|
||||
this.lastEvent = now;
|
||||
this.antikickState = AntikickState.ACTIVE; // don't break and also run ACTIVE
|
||||
case ACTIVE:
|
||||
if (now - this.last_event > this.antikick_duration.get() * MS_PER_TICK) {
|
||||
if (now - this.lastEvent > this.antikickDuration.get() * MS_PER_TICK) {
|
||||
this.antikickState = AntikickState.COOLDOWN;
|
||||
break;
|
||||
}
|
||||
|
@ -139,7 +139,7 @@ public class VanillaFlight extends QuickModule {
|
|||
event.packet instanceof CPlayerPacket.PositionRotationPacket
|
||||
) {
|
||||
CPlayerPacket packet = (CPlayerPacket) event.packet;
|
||||
packet.y = packet.y - this.antikick_magnitude.get();
|
||||
packet.y = packet.y - this.antikickMagnitude.get();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@ public class PacketLogger extends QuickModule {
|
|||
@SubscribeEvent
|
||||
public void onPacketOutgoing(PacketEvent.Outgoing event) {
|
||||
try {
|
||||
this.capture.add(this.packet_to_json(event.packet, this.pretty_time())); // get send time here
|
||||
this.capture.add(this.packetToJson(event.packet, this.prettyTime())); // get send time here
|
||||
} catch (IllegalAccessException e) {
|
||||
Boscovicino.LOGGER.warn("Could not process fields of packet {}", event.packet.toString());
|
||||
}
|
||||
|
@ -68,7 +68,7 @@ public class PacketLogger extends QuickModule {
|
|||
@SubscribeEvent
|
||||
public void onPacketIncoming(PacketEvent.Incoming event) {
|
||||
try {
|
||||
this.capture.add(this.packet_to_json(event.packet, this.pretty_time())); // get recv time here
|
||||
this.capture.add(this.packetToJson(event.packet, this.prettyTime())); // get recv time here
|
||||
} catch (IllegalAccessException e) {
|
||||
Boscovicino.LOGGER.warn("Could not process fields of packet {}", event.packet.toString());
|
||||
}
|
||||
|
@ -88,7 +88,7 @@ public class PacketLogger extends QuickModule {
|
|||
}
|
||||
}
|
||||
|
||||
private JsonElement packet_to_json(IPacket<?> packet, double time) throws IllegalAccessException {
|
||||
private JsonElement packetToJson(IPacket<?> packet, double time) throws IllegalAccessException {
|
||||
Class<?> clazz = packet.getClass();
|
||||
List<String> classNames = new ArrayList<>();
|
||||
JsonObject fields = new JsonObject();
|
||||
|
@ -97,7 +97,7 @@ public class PacketLogger extends QuickModule {
|
|||
for (Field field : clazz.getDeclaredFields()) {
|
||||
if (!Modifier.isStatic(field.getModifiers())) {
|
||||
field.setAccessible(true);
|
||||
fields.add(field.getName(), this.format_value(field.get(packet))); // TODO deobfuscate field.getName()
|
||||
fields.add(field.getName(), this.formatValue(field.get(packet))); // TODO deobfuscate field.getName()
|
||||
}
|
||||
}
|
||||
clazz = clazz.getSuperclass();
|
||||
|
@ -105,12 +105,12 @@ public class PacketLogger extends QuickModule {
|
|||
|
||||
JsonObject json = new JsonObject();
|
||||
json.addProperty("time", time);
|
||||
json.addProperty("name", this.compose_packet_name(classNames));
|
||||
json.addProperty("name", this.composePacketName(classNames));
|
||||
json.add("fields", fields);
|
||||
return json;
|
||||
}
|
||||
|
||||
private JsonElement format_value(Object value) {
|
||||
private JsonElement formatValue(Object value) {
|
||||
if (value == null) return null;
|
||||
if (value instanceof ITextComponent) {
|
||||
ITextComponent component = (ITextComponent) value;
|
||||
|
@ -119,7 +119,7 @@ public class PacketLogger extends QuickModule {
|
|||
return obj;
|
||||
}
|
||||
if (value.getClass().isArray()) {
|
||||
return this.array_to_string(value);
|
||||
return this.arrayToString(value);
|
||||
}
|
||||
if (value instanceof Number) {
|
||||
return new JsonPrimitive((Number) value);
|
||||
|
@ -135,17 +135,17 @@ public class PacketLogger extends QuickModule {
|
|||
}
|
||||
if (value instanceof Vector3d) {
|
||||
Vector3d vec = (Vector3d) value;
|
||||
return this.array_to_string(new double[] { vec.x(), vec.y(), vec.z() });
|
||||
return this.arrayToString(new double[] { vec.x(), vec.y(), vec.z() });
|
||||
}
|
||||
if (value instanceof Vector2f) {
|
||||
Vector2f vec = (Vector2f) value;
|
||||
return this.array_to_string(new float[] { vec.x, vec.y });
|
||||
return this.arrayToString(new float[] { vec.x, vec.y });
|
||||
}
|
||||
// TODO pretty print some very noisy toStrings
|
||||
return new JsonPrimitive(value.toString());
|
||||
}
|
||||
|
||||
private JsonArray array_to_string(Object value) {
|
||||
private JsonArray arrayToString(Object value) {
|
||||
JsonArray out = new JsonArray();
|
||||
if (value instanceof byte[]) {
|
||||
byte[] arr = (byte[]) value;
|
||||
|
@ -192,7 +192,7 @@ public class PacketLogger extends QuickModule {
|
|||
return out;
|
||||
}
|
||||
|
||||
private String compose_packet_name(List<String> classNames) {
|
||||
private String composePacketName(List<String> classNames) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
for (int i = classNames.size() - 1; i >= 0; i--) {
|
||||
builder.append(classNames.get(i));
|
||||
|
@ -201,7 +201,7 @@ public class PacketLogger extends QuickModule {
|
|||
return builder.toString();
|
||||
}
|
||||
|
||||
private double pretty_time() {
|
||||
private double prettyTime() {
|
||||
return (double) System.nanoTime() / 1000000000.;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,6 +49,7 @@ public class AntiHunger extends AbstractModule {
|
|||
this.hover.get()
|
||||
&& event.packet instanceof CPlayerPacket
|
||||
&& MC.player != null
|
||||
&& MC.gameMode != null
|
||||
&& MC.player.fallDistance <= 0.f
|
||||
&& !MC.gameMode.isDestroying()
|
||||
) {
|
||||
|
|
|
@ -28,6 +28,7 @@ public class AutoDisconnect extends AbstractModule {
|
|||
|
||||
@SubscribeEvent
|
||||
public void onPacket(PacketEvent.Incoming event) {
|
||||
if(MC.player == null) return;
|
||||
if (event.packet instanceof SUpdateHealthPacket) {
|
||||
SUpdateHealthPacket packet = (SUpdateHealthPacket) event.packet;
|
||||
if (packet.getHealth() < this.threshold.get()) {
|
||||
|
|
|
@ -5,7 +5,6 @@ import ftbsc.bscv.api.ILoadable;
|
|||
import ftbsc.bscv.modules.AbstractModule;
|
||||
import ftbsc.bscv.patches.PacketPatch.PacketEvent;
|
||||
import ftbsc.bscv.tools.Setting;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.network.play.server.SPlaySoundEffectPacket;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.util.SoundEvents;
|
||||
|
@ -37,22 +36,23 @@ public class AutoFish extends AbstractModule {
|
|||
|
||||
@SubscribeEvent
|
||||
public void onPacket(PacketEvent.Incoming event) {
|
||||
if (MC.gameMode == null || MC.player == null || MC.level == null)
|
||||
return;
|
||||
|
||||
if (event.packet instanceof SPlaySoundEffectPacket) {
|
||||
SPlaySoundEffectPacket packet = (SPlaySoundEffectPacket) event.packet;
|
||||
if (packet.getSound().equals(SoundEvents.FISHING_BOBBER_SPLASH)) {
|
||||
MC.gameMode.useItem(MC.player, MC.level, Hand.MAIN_HAND);
|
||||
if (this.recast.get()) {
|
||||
new RecastThread(MC, this.delay.get()).start();
|
||||
new RecastThread(this.delay.get()).start();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class RecastThread extends Thread {
|
||||
private long delay;
|
||||
private Minecraft mc;
|
||||
public RecastThread(Minecraft mc, long delay) {
|
||||
this.mc = mc;
|
||||
private static class RecastThread extends Thread {
|
||||
private final long delay;
|
||||
public RecastThread(long delay) {
|
||||
this.delay = delay;
|
||||
this.setDaemon(true);
|
||||
}
|
||||
|
@ -60,8 +60,10 @@ public class AutoFish extends AbstractModule {
|
|||
public void run() {
|
||||
try {
|
||||
Thread.sleep(this.delay);
|
||||
} catch (InterruptedException e) {} // ignore
|
||||
this.mc.gameMode.useItem(this.mc.player, this.mc.level, Hand.MAIN_HAND);
|
||||
} catch (InterruptedException ignored) {} // ignore
|
||||
if (MC.gameMode == null || MC.player == null || MC.level == null)
|
||||
return;
|
||||
MC.gameMode.useItem(MC.player, MC.level, Hand.MAIN_HAND);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@ package ftbsc.bscv.modules.self;
|
|||
|
||||
import com.google.auto.service.AutoService;
|
||||
|
||||
import ftbsc.bscv.Boscovicino;
|
||||
import ftbsc.bscv.api.ILoadable;
|
||||
import ftbsc.bscv.modules.AbstractModule;
|
||||
import ftbsc.bscv.tools.Inventory;
|
||||
|
@ -22,7 +21,7 @@ import java.util.List;
|
|||
public class AutoTool extends AbstractModule {
|
||||
|
||||
public final ForgeConfigSpec.ConfigValue<Integer> limit;
|
||||
public final ForgeConfigSpec.ConfigValue<Boolean> prefer_looting;
|
||||
public final ForgeConfigSpec.ConfigValue<Boolean> preferLooting;
|
||||
|
||||
public AutoTool() {
|
||||
super();
|
||||
|
@ -33,7 +32,7 @@ public class AutoTool extends AbstractModule {
|
|||
.fallback(1)
|
||||
.build(this);
|
||||
|
||||
this.prefer_looting = Setting.Bool.builder()
|
||||
this.preferLooting = Setting.Bool.builder()
|
||||
.name("prefer-looting")
|
||||
.comment("when picking best weapon, prefer looting over slight more DPS")
|
||||
.fallback(true)
|
||||
|
@ -46,10 +45,11 @@ public class AutoTool extends AbstractModule {
|
|||
&& item.getMaxDamage() - item.getDamageValue() <= this.limit.get();
|
||||
}
|
||||
|
||||
public boolean selectBestWeapon() {
|
||||
public void selectBestWeapon() {
|
||||
if(MC.player == null || MC.gameMode == null) return;
|
||||
List<Slot> hotbar = Inventory.hotbar(MC.player);
|
||||
int current_slot = MC.player.inventory.selected;
|
||||
double current_damage = Inventory.itemDPS(hotbar.get(current_slot).getItem());
|
||||
int currentSlot = MC.player.inventory.selected;
|
||||
double currentDamage = Inventory.itemDPS(hotbar.get(currentSlot).getItem());
|
||||
for (int i = 0; i < Inventory.HOTBAR_SIZE; i++) {
|
||||
ItemStack item = hotbar.get(i).getItem();
|
||||
if (this.itemIsTooDamaged(item)) {
|
||||
|
@ -59,51 +59,48 @@ public class AutoTool extends AbstractModule {
|
|||
double damage = Inventory.itemDPS(item);
|
||||
|
||||
int looting = Inventory.getEnchLevel(item, Enchantments.MOB_LOOTING);
|
||||
if (this.prefer_looting.get() && looting > 0) {
|
||||
if (this.preferLooting.get() && looting > 0) {
|
||||
damage += 0.1 * looting;
|
||||
}
|
||||
|
||||
if (damage > current_damage) {
|
||||
current_slot = i;
|
||||
current_damage = damage;
|
||||
if (damage > currentDamage) {
|
||||
currentSlot = i;
|
||||
currentDamage = damage;
|
||||
}
|
||||
}
|
||||
if (current_slot != MC.player.inventory.selected) {
|
||||
MC.player.inventory.selected = current_slot;
|
||||
if (currentSlot != MC.player.inventory.selected) {
|
||||
MC.player.inventory.selected = currentSlot;
|
||||
MC.gameMode.ensureHasSentCarriedItem(); // ACCESSTRANSFORMER
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean selectBestTool() {
|
||||
public void selectBestTool() {
|
||||
if(MC.player == null || MC.level == null || MC.hitResult == null || MC.gameMode == null) return;
|
||||
List<Slot> hotbar = Inventory.hotbar(MC.player);
|
||||
int current_slot = MC.player.inventory.selected;
|
||||
int currentSlot = MC.player.inventory.selected;
|
||||
BlockRayTraceResult result = (BlockRayTraceResult) MC.hitResult;
|
||||
BlockState state = MC.level.getBlockState(result.getBlockPos());
|
||||
float current_speed = hotbar.get(current_slot).getItem().getDestroySpeed(state);
|
||||
float currentSpeed = hotbar.get(currentSlot).getItem().getDestroySpeed(state);
|
||||
for (int i = 0; i < Inventory.HOTBAR_SIZE; i++) {
|
||||
ItemStack item = hotbar.get(i).getItem();
|
||||
if (this.itemIsTooDamaged(item)) {
|
||||
continue;
|
||||
}
|
||||
float speed = item.getDestroySpeed(state);
|
||||
if (speed > current_speed) {
|
||||
current_slot = i;
|
||||
current_speed = speed;
|
||||
if (speed > currentSpeed) {
|
||||
currentSlot = i;
|
||||
currentSpeed = speed;
|
||||
}
|
||||
}
|
||||
if (current_slot != MC.player.inventory.selected) {
|
||||
MC.player.inventory.selected = current_slot;
|
||||
if (currentSlot != MC.player.inventory.selected) {
|
||||
MC.player.inventory.selected = currentSlot;
|
||||
MC.gameMode.ensureHasSentCarriedItem(); // ACCESSTRANSFORMER
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onClick(InputEvent.ClickInputEvent event) {
|
||||
if (MC.player == null) return;
|
||||
if (MC.player == null || MC.hitResult == null) return;
|
||||
// TODO this is fired many times consecutively, can we filter out
|
||||
// some without putting a dumb time cooldown?;
|
||||
if (event.isAttack()) {
|
||||
|
|
|
@ -9,12 +9,8 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|||
@AutoService(ILoadable.class)
|
||||
public class FastInteract extends QuickModule {
|
||||
|
||||
protected int getDefaultKey() { return UNBOUND; }
|
||||
|
||||
@SubscribeEvent
|
||||
public void onTick(TickEvent.ClientTickEvent event) {
|
||||
if (MC == null) return;
|
||||
|
||||
MC.rightClickDelay = 0; // ACCESSTRANSFORMER
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,14 +7,17 @@ import ftbsc.bscv.modules.QuickModule;
|
|||
import ftbsc.bscv.patches.PacketPatch.PacketEvent;
|
||||
import ftbsc.bscv.tools.Keyboard;
|
||||
import ftbsc.bscv.tools.Setting;
|
||||
import net.minecraft.client.entity.player.ClientPlayerEntity;
|
||||
import net.minecraft.client.entity.player.RemoteClientPlayerEntity;
|
||||
import net.minecraft.client.network.play.NetworkPlayerInfo;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
import net.minecraft.network.play.client.CPlayerPacket;
|
||||
import net.minecraft.util.math.vector.Vector3d;
|
||||
import net.minecraft.world.GameType;
|
||||
import net.minecraftforge.common.ForgeConfigSpec;
|
||||
import net.minecraftforge.event.TickEvent;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
@AutoService(ILoadable.class)
|
||||
public class Freecam extends QuickModule {
|
||||
|
@ -23,15 +26,10 @@ public class Freecam extends QuickModule {
|
|||
public final ForgeConfigSpec.ConfigValue<Double> speed;
|
||||
public final ForgeConfigSpec.ConfigValue<Boolean> drift;
|
||||
|
||||
private Vector3d prev_pos = new Vector3d(0.0, 0.0, 0.0);
|
||||
private float prev_speed = 0.05f;
|
||||
private GameType prev_gamemode = GameType.SURVIVAL;
|
||||
private MockPlayer mock_player;
|
||||
|
||||
@Override
|
||||
protected int getDefaultKey() {
|
||||
return UNBOUND;
|
||||
}
|
||||
private Vector3d prevPos = new Vector3d(0.0, 0.0, 0.0);
|
||||
private float prevSpeed = 0.05f;
|
||||
private GameType prevGamemode = GameType.SURVIVAL;
|
||||
private MockPlayer mockPlayer;
|
||||
|
||||
public Freecam() {
|
||||
super();
|
||||
|
@ -77,52 +75,53 @@ public class Freecam extends QuickModule {
|
|||
|
||||
@Override
|
||||
public void enable() {
|
||||
if (MC.player == null) {
|
||||
if (MC.player == null || MC.gameMode == null || MC.level == null) {
|
||||
Boscovicino.log("[!] Can only enable freecam while in-game");
|
||||
return;
|
||||
}
|
||||
|
||||
this.prev_speed = MC.player.abilities.getFlyingSpeed();
|
||||
this.prev_pos = MC.player.position();
|
||||
this.prev_gamemode = MC.gameMode.getPlayerMode();
|
||||
this.prevSpeed = MC.player.abilities.getFlyingSpeed();
|
||||
this.prevPos = MC.player.position();
|
||||
this.prevGamemode = MC.gameMode.getPlayerMode();
|
||||
MC.gameMode.setLocalMode(GameType.SPECTATOR);
|
||||
MC.player.noCulling = true;
|
||||
if (MC.getConnection() != null) {
|
||||
NetworkPlayerInfo info = MC.getConnection().getPlayerInfo(
|
||||
MC.player.getGameProfile().getId()
|
||||
);
|
||||
if (info == null) return;
|
||||
info.gameMode = GameType.SPECTATOR; // ACCESSTRANSFORMER: public net.minecraft.client.network.play.NetworkPlayerInfo field_178866_b
|
||||
}
|
||||
|
||||
this.mock_player = new MockPlayer();
|
||||
this.mock_player.setPosAndOldPos(this.prev_pos.x, this.prev_pos.y, this.prev_pos.z);
|
||||
this.mock_player.setYBodyRot(MC.player.yBodyRot);
|
||||
MC.level.addPlayer(-666, this.mock_player);
|
||||
this.mockPlayer = new MockPlayer(MC.level, MC.player);
|
||||
this.mockPlayer.setPosAndOldPos(this.prevPos.x, this.prevPos.y, this.prevPos.z);
|
||||
this.mockPlayer.setYBodyRot(MC.player.yBodyRot);
|
||||
MC.level.addPlayer(-666, this.mockPlayer);
|
||||
super.enable();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disable() {
|
||||
super.disable();
|
||||
if (MC.player == null) return;
|
||||
MC.gameMode.setLocalMode(this.prev_gamemode);
|
||||
if (MC.player == null || MC.level == null || MC.gameMode == null) return;
|
||||
MC.gameMode.setLocalMode(this.prevGamemode);
|
||||
MC.player.noCulling = false;
|
||||
MC.player.abilities.setFlyingSpeed(this.prev_speed);
|
||||
MC.player.abilities.setFlyingSpeed(this.prevSpeed);
|
||||
if (MC.getConnection() != null) {
|
||||
NetworkPlayerInfo info = MC.getConnection().getPlayerInfo(
|
||||
MC.player.getGameProfile().getId()
|
||||
);
|
||||
info.gameMode = this.prev_gamemode; // ACCESSTRANSFORMER: public net.minecraft.client.network.play.NetworkPlayerInfo field_178866_b
|
||||
if (info != null) info.gameMode = this.prevGamemode; // ACCESSTRANSFORMER: public net.minecraft.client.network.play.NetworkPlayerInfo field_178866_b
|
||||
}
|
||||
MC.player.setPos(this.prev_pos.x, this.prev_pos.y, this.prev_pos.z);
|
||||
MC.player.setPos(this.prevPos.x, this.prevPos.y, this.prevPos.z);
|
||||
MC.player.setDeltaMovement(Vector3d.ZERO);
|
||||
MC.level.removeEntity(this.mock_player.getId());
|
||||
this.mock_player = null; // get rid of reference
|
||||
MC.level.removeEntity(this.mockPlayer.getId());
|
||||
this.mockPlayer = null; // get rid of reference
|
||||
}
|
||||
|
||||
private class MockPlayer extends RemoteClientPlayerEntity {
|
||||
public MockPlayer() {
|
||||
super(MC.level, MC.player.getGameProfile());
|
||||
private static class MockPlayer extends RemoteClientPlayerEntity {
|
||||
public MockPlayer(@NonNull ClientWorld world, @NonNull ClientPlayerEntity player) {
|
||||
super(world, player.getGameProfile());
|
||||
this.setId(-666); // TODO hax
|
||||
}
|
||||
|
||||
|
|
|
@ -13,8 +13,8 @@ public class HandChanger extends AbstractModule {
|
|||
|
||||
public final ForgeConfigSpec.ConfigValue<Double> main;
|
||||
public final ForgeConfigSpec.ConfigValue<Double> off;
|
||||
public final ForgeConfigSpec.ConfigValue<Boolean> cancel_main;
|
||||
public final ForgeConfigSpec.ConfigValue<Boolean> cancel_off;
|
||||
public final ForgeConfigSpec.ConfigValue<Boolean> cancelMain;
|
||||
public final ForgeConfigSpec.ConfigValue<Boolean> cancelOff;
|
||||
|
||||
public HandChanger() {
|
||||
super();
|
||||
|
@ -35,13 +35,13 @@ public class HandChanger extends AbstractModule {
|
|||
.fallback(1.)
|
||||
.build(this);
|
||||
|
||||
this.cancel_main = Setting.Bool.builder()
|
||||
this.cancelMain = Setting.Bool.builder()
|
||||
.name("cancel-main")
|
||||
.comment("completely prevent main hand rendering")
|
||||
.fallback(false)
|
||||
.build(this);
|
||||
|
||||
this.cancel_off = Setting.Bool.builder()
|
||||
this.cancelOff = Setting.Bool.builder()
|
||||
.name("cancel-off")
|
||||
.comment("completely prevent off hand rendering")
|
||||
.fallback(false)
|
||||
|
@ -52,7 +52,7 @@ public class HandChanger extends AbstractModule {
|
|||
public void onRenderHands(RenderHandEvent event) {
|
||||
switch (event.getHand()) {
|
||||
case MAIN_HAND:
|
||||
if (this.cancel_main.get()) {
|
||||
if (this.cancelMain.get()) {
|
||||
event.setCanceled(true);
|
||||
} else if (this.main.get() != 1.0) {
|
||||
MC.gameRenderer.itemInHandRenderer.mainHandHeight = this.main.get().floatValue(); // ACCESSTRANSFORMER public net.minecraft.client.renderer.FirstPersonRenderer field_187469_f
|
||||
|
@ -60,7 +60,7 @@ public class HandChanger extends AbstractModule {
|
|||
}
|
||||
break;
|
||||
case OFF_HAND:
|
||||
if (this.cancel_off.get()) {
|
||||
if (this.cancelOff.get()) {
|
||||
event.setCanceled(true);
|
||||
} else if (this.off.get() != 1.0) {
|
||||
MC.gameRenderer.itemInHandRenderer.offHandHeight = this.off.get().floatValue(); // ACCESSTRANSFORMER public net.minecraft.client.renderer.FirstPersonRenderer field_187470_g
|
||||
|
|
|
@ -13,8 +13,6 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|||
@AutoService(ILoadable.class)
|
||||
public class Chams extends QuickModule {
|
||||
|
||||
protected int getDefaultKey() { return UNBOUND; }
|
||||
|
||||
@SubscribeEvent
|
||||
public void onRenderLivingPre(RenderLivingEvent.Pre<?, ?> event) {
|
||||
GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL);
|
||||
|
|
|
@ -23,14 +23,19 @@ public class Fullbright extends QuickModule {
|
|||
|
||||
@SubscribeEvent
|
||||
public void onTick(TickEvent.ClientTickEvent event) {
|
||||
if (MC == null) return;
|
||||
if (MC.player == null) return;
|
||||
MC.player.addEffect(new EffectInstance(Effect.byId(NIGHT_VISION_ID), FOUR_MINUTES_TWENTY_SECONDS));
|
||||
Effect nv = Effect.byId(NIGHT_VISION_ID);
|
||||
if(nv != null) {
|
||||
MC.player.addEffect(new EffectInstance(nv, FOUR_MINUTES_TWENTY_SECONDS));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disable() {
|
||||
super.disable();
|
||||
MC.player.removeEffect(Effect.byId(NIGHT_VISION_ID));
|
||||
Effect nv = Effect.byId(NIGHT_VISION_ID);
|
||||
if(MC.player != null && nv != null) {
|
||||
MC.player.removeEffect(nv);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,8 +49,6 @@ public class StorageESP extends QuickModule {
|
|||
private static final Vector3f FURNACE_COLOR = new Vector3f( 85.f/255.f, 85.f/255.f, 85.f/255.f);
|
||||
private static final Vector3f DROPPER_COLOR = new Vector3f( 0.f/255.f, 170.f/255.f, 0.f/255.f);
|
||||
|
||||
protected int getDefaultKey() { return UNBOUND; }
|
||||
|
||||
public final ForgeConfigSpec.ConfigValue<Double> width;
|
||||
public final ForgeConfigSpec.ConfigValue<Double> alpha;
|
||||
|
||||
|
|
87
src/main/java/ftbsc/bscv/system/Bindings.java
Normal file
87
src/main/java/ftbsc/bscv/system/Bindings.java
Normal file
|
@ -0,0 +1,87 @@
|
|||
package ftbsc.bscv.system;
|
||||
|
||||
import ftbsc.bscv.Boscovicino;
|
||||
import ftbsc.bscv.ICommons;
|
||||
import ftbsc.bscv.api.IModule;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.settings.KeyBinding;
|
||||
import net.minecraft.client.util.InputMappings;
|
||||
import net.minecraftforge.client.event.InputEvent;
|
||||
import net.minecraftforge.common.ForgeConfigSpec;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.client.registry.ClientRegistry;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
public class Bindings implements ICommons {
|
||||
public static final int UNBOUND = InputMappings.UNKNOWN.getValue();
|
||||
|
||||
private final HashMap<KeyBinding, Runnable> executorMap;
|
||||
|
||||
private ForgeConfigSpec.ConfigValue<?> store;
|
||||
|
||||
public Bindings(ForgeConfigSpec.Builder spec) {
|
||||
MinecraftForge.EVENT_BUS.register(this);
|
||||
this.executorMap = new HashMap<>();
|
||||
this.store = spec
|
||||
//.comment("actual friend list")
|
||||
.define("lol", () -> null, (u) -> {
|
||||
System.out.println(u.getClass().getName());
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
public KeyBinding registerBinding(String name, int key, IModule module) {
|
||||
KeyBinding kb = this.createBinding(name, key);
|
||||
this.executorMap.put(kb, module::toggle);
|
||||
return kb;
|
||||
}
|
||||
|
||||
public KeyBinding registerBinding(String name, int key, String macroFileName) {
|
||||
KeyBinding kb = this.createBinding(name, key);
|
||||
this.executorMap.put(kb, () -> BSCV.macros.execute(macroFileName));
|
||||
return kb;
|
||||
}
|
||||
|
||||
private KeyBinding createBinding(String name, int key) {
|
||||
KeyBinding kb = new KeyBinding(getBindName(name), UNBOUND, getCategory());
|
||||
InputMappings.Input in = 0 <= key && key <= 7
|
||||
? InputMappings.Type.MOUSE.getOrCreate(key)
|
||||
: InputMappings.Type.KEYSYM.getOrCreate(key);
|
||||
kb.setKey(in);
|
||||
ClientRegistry.registerKeyBinding(kb);
|
||||
return kb;
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onKeyPress(InputEvent.KeyInputEvent event) {
|
||||
this.onKeyPress(event.getKey());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onKeyPress(InputEvent.MouseInputEvent event) {
|
||||
this.onKeyPress(event.getButton());
|
||||
}
|
||||
|
||||
//TODO on keybind change event
|
||||
private void onKeyPress(int key) {
|
||||
long windowId = Minecraft.getInstance().getWindow().getWindow();
|
||||
for(KeyBinding kb : this.executorMap.keySet()) {
|
||||
if(kb.getKey().getValue() == key) {
|
||||
if(InputMappings.isKeyDown(windowId, key)) {
|
||||
MC.execute(this.executorMap.get(kb));
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static String getBindName(String name) {
|
||||
return String.format("key.%s.%s", Boscovicino.MOD_ID, name);
|
||||
}
|
||||
|
||||
private static String getCategory() {
|
||||
return String.format("key.category.%s", Boscovicino.MOD_ID);
|
||||
}
|
||||
}
|
|
@ -33,10 +33,10 @@ public class Friends implements ICommons {
|
|||
return null;
|
||||
}
|
||||
|
||||
private ForgeConfigSpec.ConfigValue<List<? extends String>> store;
|
||||
public final ForgeConfigSpec.ConfigValue<List<? extends String>> store;
|
||||
|
||||
public Friends(ForgeConfigSpec.Builder builder, CommandDispatcher<CommandSource> dispatcher) {
|
||||
this.store = builder.comment("actual friend list").defineList("data", () -> new ArrayList<String>(), u -> {
|
||||
this.store = builder.comment("actual friend list").defineList("data", ArrayList::new, u -> {
|
||||
try{
|
||||
UUID.fromString(u.toString());
|
||||
return true;
|
||||
|
|
50
src/main/java/ftbsc/bscv/system/Macros.java
Normal file
50
src/main/java/ftbsc/bscv/system/Macros.java
Normal file
|
@ -0,0 +1,50 @@
|
|||
package ftbsc.bscv.system;
|
||||
|
||||
import ftbsc.bscv.Boscovicino;
|
||||
import party.iroiro.luajava.Lua;
|
||||
import party.iroiro.luajava.luajit.LuaJit;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.DirectoryStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class Macros {
|
||||
private final Lua lua;
|
||||
private final HashMap<String, String> macroCache;
|
||||
|
||||
public Macros(Boscovicino bscv) throws IOException {
|
||||
this.lua = new LuaJit();
|
||||
this.lua.pushJavaObject(bscv); //TODO use instance
|
||||
this.lua.setGlobal("BSCV");
|
||||
this.macroCache = new HashMap<>();
|
||||
|
||||
// load macros
|
||||
Path path = Paths.get("macros/");
|
||||
if(!Files.isDirectory(path)) {
|
||||
Files.createDirectories(path);
|
||||
}
|
||||
|
||||
//TODO lazy load setting
|
||||
try(DirectoryStream<Path> stream = Files.newDirectoryStream(path, (p) -> p.toFile().isFile())) {
|
||||
for(Path macro : stream) {
|
||||
String name = macro.getFileName().toString();
|
||||
if(name.endsWith(".lua")) {
|
||||
String code = String.join("\n", Files.readAllLines(macro));
|
||||
this.macroCache.put(name, code);
|
||||
bscv.bindings.registerBinding(name, Bindings.UNBOUND, name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean execute(String macroFilePath) {
|
||||
String code = this.macroCache.get(macroFilePath);
|
||||
if(code == null) return false;
|
||||
|
||||
this.lua.execute(code);
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -13,7 +13,7 @@ import java.util.HashSet;
|
|||
import java.util.ServiceLoader;
|
||||
import java.util.Set;
|
||||
|
||||
public class ModManager {
|
||||
public class Modules {
|
||||
private Builder cfgBuilder;
|
||||
private CommandDispatcher<CommandSource> dispatcher;
|
||||
|
||||
|
@ -21,7 +21,7 @@ public class ModManager {
|
|||
public final Set<IModule> mods;
|
||||
public final Set<String> categories;
|
||||
|
||||
public ModManager(Builder cfgBuilder, CommandDispatcher<CommandSource> dispatcher) {
|
||||
public Modules(Builder cfgBuilder, CommandDispatcher<CommandSource> dispatcher) {
|
||||
this.cfgBuilder = cfgBuilder;
|
||||
this.dispatcher = dispatcher;
|
||||
this.mods = new HashSet<>();
|
||||
|
@ -39,6 +39,16 @@ public class ModManager {
|
|||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public IModule get(String name) {
|
||||
for (IModule m : this.mods) {
|
||||
if (m.getName().equals(name)) {
|
||||
return m;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void load() {
|
||||
for (ILoadable module : ServiceLoader.load(ILoadable.class)) {
|
||||
if(module instanceof IModule) {
|
Loading…
Reference in a new issue