Skip to content

Commit

Permalink
DELUX!!!!!!!!!!!!!
Browse files Browse the repository at this point in the history
  • Loading branch information
PseudoDistant committed Dec 28, 2023
1 parent 9a6fa82 commit 3d751be
Show file tree
Hide file tree
Showing 8 changed files with 212 additions and 88 deletions.
3 changes: 2 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,12 @@ repositories {
}

dependencies {
implementation("java.minicraft:minicraft-plus:${project.minicraftplus_version}")
implementation files("libs/minicraft_delux.jar")
implementation 'io.github.pseudodistant:MinicraftGameProvider:1.2.0'
implementation "net.fabricmc:fabric-loader:${project.loader_version}"
implementation "net.fabricmc:sponge-mixin:0.11.0+mixin.0.8.5"
implementation "net.fabricmc:access-widener:2.1.0"
implementation 'org.apache.commons:commons-lang3:3.0'
implementation "com.google.code.gson:gson:2.8.9"
}

Expand Down
3 changes: 1 addition & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
org.gradle.jvmargs=-Xmx1G

minicraftplus_version=2.2.0-local
loader_version=0.15.3

# Mod Properties
mod_version = 1.2.0
mod_version = 1.2.0-delux
maven_group = io.github.minifabric
archives_base_name = minifabric-modmenu

137 changes: 115 additions & 22 deletions src/main/java/io/github/minifabric/minifabric_api/impl/ModsDisplay.java
Original file line number Diff line number Diff line change
@@ -1,31 +1,39 @@
package io.github.minifabric.minifabric_api.impl;

import minicraft.core.Game;
import minicraft.core.io.InputHandler;
import minicraft.core.io.Localization;
import minicraft.gfx.Color;
import minicraft.gfx.Font;
import minicraft.gfx.Screen;
import minicraft.screen.*;
import minicraft.screen.entry.SelectEntry;
import com.mojang.ld22.GameControl;
import com.mojang.ld22.GameState;
import com.mojang.ld22.InputHandler;
import com.mojang.ld22.gfx.Color;
import com.mojang.ld22.gfx.Font;
import com.mojang.ld22.gfx.Screen;
import com.mojang.ld22.gfx.SpriteSheet;
import com.mojang.ld22.screen.controlmenu.*;
import com.mojang.ld22.sound.Sound;
import net.fabricmc.loader.api.FabricLoader;
import net.fabricmc.loader.api.ModContainer;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Objects;

public class ModsDisplay extends Display {
public class ModsDisplay extends SelectControlMenu {
//private static final String[] defaultOptions = new String[]{"Highscore", "Load game", "Save game", "Start new game", "Resume game", "Respawn"};
private static String[] defaultOptions;
public static final int titleColor = Color.get(0, 8, 131, 551);

private final Collection<ModContainer> modsList = FabricLoader.getInstance().getAllMods();
private static String modName = "";

public static String getModName() { return modName; }

private static ArrayList<String> modNames = null;
private static ArrayList<String> modNames;
private static final ArrayList<String> modVersions = new ArrayList<>();

Display parent;
public ModsDisplay(SelectControlMenu parent) {
super(parent);
this.parent = parent;
}

private static ArrayList<String> getModNames() {
Collection<ModContainer> modsList = FabricLoader.getInstance().getAllMods();
Expand Down Expand Up @@ -64,28 +72,112 @@ private static ArrayList<String> getModNames() {
return modNames;
}

public ModsDisplay() {
super(true, true);
public void init(GameControl gameControl, InputHandler input) {
defaultOptions = getModNames().toArray(new String[0]);
super.init(gameControl, input);
int[] new_selectable = new int[defaultOptions.length];

int amount;
for(amount = 0; amount < defaultOptions.length; ++amount) {
new_selectable[amount] = 1;
}

amount = defaultOptions.length;

this.setOptions(Arrays.copyOf(defaultOptions, amount));
this.selected = this.options.length - 1;
}

@Override
public void tick(InputHandler input) {
super.tick(input);
if (input.getKey("exit").clicked) {
Game.setDisplay(parent);
public void optionSelected(int selected) {
String description = modsList.stream()
.filter(mod -> Objects.equals(mod.getMetadata().getName(), defaultOptions[selected]))
.findFirst().get().getMetadata().getDescription() == null ?
"" : modsList.stream()
.filter(mod -> Objects.equals(mod.getMetadata().getName(), defaultOptions[selected]))
.findFirst().get().getMetadata().getDescription();
this.gameControl.setMenu(new SingleModDisplay(this, defaultOptions[selected], description, modVersions.get(selected)));

}

public void render(Screen screen) {
screen.clear(0);
int h = 2;
int w = 13;
int xo = (screen.w - w * SpriteSheet.spriteSize) / 2;
int yo = 1;
screen.renderSprite(xo, yo * SpriteSheet.spriteSize, 0, 28, titleColor, 0, w * SpriteSheet.spriteSize, h * SpriteSheet.spriteSize);
xo = (screen.w - 4 * SpriteSheet.spriteSize) / 2;
yo += h;
screen.renderSprite(xo, yo * SpriteSheet.spriteSize, 13, 28, titleColor, 0, 4 * SpriteSheet.spriteSize, SpriteSheet.spriteSize);
this.menuTop = yo + h + 1;
super.render(screen, false);
Font.draw(GameControl.VERSION, screen, screen.w - GameControl.VERSION.length() * SpriteSheet.spriteSize, screen.h - SpriteSheet.spriteSize, infoCol);
}
}
/*
private final Collection<ModContainer> modsList = FabricLoader.getInstance().getAllMods();
private static String modName = "";
public static String getModName() { return modName; }
private static ArrayList<String> modNames = null;
private static final ArrayList<String> modVersions = new ArrayList<>();
ControlMenu parent;
private static ArrayList<String> getModNames() {
Collection<ModContainer> modsList = FabricLoader.getInstance().getAllMods();
ArrayList<String> modNames = new ArrayList<>();
if(ModsDisplay.modNames != null) {
modNames.addAll(ModsDisplay.modNames);
return modNames;
}
if(modsList.isEmpty()) {
System.err.println("ERROR: No mods are detected by Fabric Loader somehow...");
return new ArrayList<>();
}
modVersions.clear();
// Iterate between every mod loaded by Fabric.
for (ModContainer container : modsList) {
if (container != null) {
String name = container.getMetadata().getName();
if (!container.getMetadata().getId().equals("java")) {
modNames.add(name);
modVersions.add(container.getMetadata().getVersion().toString());
}
}
}
if(ModsDisplay.modNames == null)
ModsDisplay.modNames = new ArrayList<>();
else
ModsDisplay.modNames.clear();
ModsDisplay.modNames.addAll(modNames);
return modNames;
}
public ModsDisplay(ControlMenu parent) {
super(parent);
this.parent = parent;
}
@Override
public void init(Display parent) {
public void init(GameControl gameControl, InputHandler input) {
super.init(gameControl, input);
modName = "";
this.parent = parent;
ArrayList<String> modNames = getModNames();
ArrayList<String> modNames = getModNames();
SelectEntry[] entries = new SelectEntry[modNames.size()];
int[] entries = new int[modNames.size()];
for(int i = 0; i < entries.length; i++) {
entries[i] = 1;
String name = modNames.get(i);
final String version = modVersions.get(i);
String description = modsList.stream()
Expand Down Expand Up @@ -135,3 +227,4 @@ public void render(Screen screen) {
Font.drawCentered(title, screen, 0, color);
}
}
*/
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package io.github.minifabric.minifabric_api.impl;

import com.mojang.ld22.screen.controlmenu.ControlMenu;
import com.mojang.ld22.screen.controlmenu.TextControlMenu;
import com.mojang.ld22.gfx.Color;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SingleModDisplay extends TextControlMenu {
public SingleModDisplay(ControlMenu parent, String mod_name, String content, String version) {
super(parent);
this.title = mod_name;
List matchList = new ArrayList();
Pattern regex = Pattern.compile("(.{1,24}(?:\\s|$))|(.{0,10})", Pattern.DOTALL);
Matcher regexMatcher = regex.matcher(content);
while (regexMatcher.find()) {
matchList.add(regexMatcher.group());
}
matchList.forEach(phrase -> {
this.addTextLine((String) phrase, Color.get(0, 333, 333, 333));
});

this.addTextLine(version, Color.get(0, 50, 50, 50));
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,54 +1,73 @@
package io.github.minifabric.minifabric_api.mixin;

import com.mojang.ld22.GameState;
import com.mojang.ld22.screen.controlmenu.*;
import com.mojang.ld22.sound.Sound;
import io.github.minifabric.minifabric_api.impl.ModsDisplay;
import minicraft.core.Game;
import minicraft.gfx.Color;
import minicraft.gfx.Point;
import minicraft.gfx.Screen;
import minicraft.screen.*;
import minicraft.screen.entry.BlankEntry;
import minicraft.screen.entry.ListEntry;
import minicraft.screen.entry.SelectEntry;
import minicraft.screen.entry.StringEntry;
import minicraft.util.BookData;
import org.spongepowered.asm.mixin.Mixin;
import org.apache.commons.lang3.ArrayUtils;
import org.spongepowered.asm.mixin.*;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(TitleDisplay.class)
public class TitleDisplayMixin extends Display {
@ModifyArg(method = "<init>", at = @At(value = "INVOKE", target = "Lminicraft/screen/Display;<init>(ZZ[Lminicraft/screen/Menu;)V"), index = 2)
private static Menu[] yes(Menu[] menus) {
return new Menu[]{(new Menu.Builder(false, 2, RelPos.CENTER, new ListEntry[]{new StringEntry("minicraft.displays.title.display.checking", Color.BLUE), new BlankEntry(), new SelectEntry("minicraft.displays.title.play", () -> {
if (WorldSelectDisplay.getWorldNames().size() > 0) {
Game.setDisplay(new Display(true, new Menu[]{(new Menu.Builder(false, 2, RelPos.CENTER, new ListEntry[]{new SelectEntry("minicraft.displays.title.play.load_world", () -> {
Game.setDisplay(new WorldSelectDisplay());
}), new SelectEntry("minicraft.displays.title.play.new_world", () -> {
Game.setDisplay(new WorldGenDisplay());
})})).createMenu()}));
} else {
Game.setDisplay(new WorldGenDisplay());
}

}), new SelectEntry("minicraft.display.options_display", () -> {
Game.setDisplay(new OptionsMainMenuDisplay());
}), new SelectEntry("Mods", () -> Game.setDisplay(new ModsDisplay())),
new SelectEntry("minicraft.displays.skin", () -> {
Game.setDisplay(new SkinDisplay());
}), new SelectEntry("minicraft.displays.achievements", () -> {
Game.setDisplay(new AchievementsDisplay());
}), new SelectEntry("minicraft.displays.title.help", () -> {
Game.setDisplay(new Display(true, new Menu[]{(new Menu.Builder(false, 1, RelPos.CENTER, new ListEntry[]{new BlankEntry(), new SelectEntry("minicraft.displays.title.help.instructions", () -> {
Game.setDisplay(new BookDisplay(BookData.instructions.collect()));
}), new SelectEntry("minicraft.displays.title.help.storyline_guide", () -> {
Game.setDisplay(new BookDisplay(BookData.storylineGuide.collect()));
}), new SelectEntry("minicraft.displays.title.help.about", () -> {
Game.setDisplay(new BookDisplay(BookData.about.collect()));
}), new SelectEntry("minicraft.displays.title.help.credits", () -> {
Game.setDisplay(new BookDisplay(BookData.credits.collect()));
})})).setTitle("minicraft.displays.title.help").createMenu()}));
}), new SelectEntry("minicraft.displays.title.quit", Game::quit)})).setPositioning(new Point(Screen.w / 2, Screen.h * 3 / 5), RelPos.CENTER).createMenu()};
@Mixin(TitleMenu.class)
public class TitleDisplayMixin extends SelectControlMenu {
@Final @Mutable @Shadow private static String[] defaultOptions;

public TitleDisplayMixin(ControlMenu parent) {
super(parent);
}

/**
* @author PseudoDistant
* @reason Fuck it, not like anyone else would edit this.
*/
@Overwrite
public void optionSelected(int selected) {
if (selected == 8) {
this.gameControl.gameState.respawn();
this.gameControl.setMenu((ControlMenu)null);
}

if (selected == 7) {
this.gameControl.setMenu((ControlMenu)null);
}

if (selected == 6) {
Sound.test.play();
this.gameControl.gameState = new GameState(this.gameControl);
this.gameControl.gameState.resetGame();
this.gameControl.setMenu((ControlMenu)null);
}

if (selected == 5) {
this.gameControl.setMenu(new SaveMenu(this));
}

if (selected == 4) {
this.gameControl.setMenu(new LoadMenu(this));
}

if (selected == 3) {
this.gameControl.setMenu(new HighScoreMenu(this));
}

if (selected == 2) {
this.gameControl.setMenu(new InstructionsMenu(this));
}

if (selected == 1) {
this.gameControl.setMenu(new AboutMenu(this));
}

if (selected == 0) {
this.gameControl.setMenu(new ModsDisplay(this));
}

}

static {
defaultOptions = ArrayUtils.add(defaultOptions,0, "Mods");
}
}
4 changes: 2 additions & 2 deletions src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
"modmenu.mixins.json"
],
"depends": {
"minicraftplus": [
"2.2.0-dev3"
"minicraft-delux": [
"1.20"
]
}
}
3 changes: 1 addition & 2 deletions src/main/resources/modmenu.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
"package": "io.github.minifabric.minifabric_api.mixin",
"compatibilityLevel": "JAVA_16",
"mixins": [
"TitleDisplayMixin",
"MenuAccessor"
"TitleDisplayMixin"
],
"client": [

Expand Down

0 comments on commit 3d751be

Please sign in to comment.