Merge branch '1.8' into 1.9.4
a804d6bProperly register replay restrictions plugin channel45191daAdd GUI that offers the user to install OpenEye9de63ceAdd gradle tasks for automating the release process2a7542aUpdate jGui
This commit is contained in:
83
build.gradle
83
build.gradle
@@ -1,3 +1,5 @@
|
|||||||
|
import groovy.json.JsonOutput
|
||||||
|
|
||||||
import java.util.zip.ZipInputStream
|
import java.util.zip.ZipInputStream
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
@@ -196,4 +198,85 @@ setupDecompWorkspace.dependsOn copySrg
|
|||||||
setupDevWorkspace.dependsOn copySrg
|
setupDevWorkspace.dependsOn copySrg
|
||||||
project.tasks.idea.dependsOn copySrg
|
project.tasks.idea.dependsOn copySrg
|
||||||
|
|
||||||
|
def generateVersionsJson() {
|
||||||
|
// List all tags
|
||||||
|
def stdout = new ByteArrayOutputStream()
|
||||||
|
project.exec {
|
||||||
|
commandLine 'git', 'for-each-ref', '--sort=taggerdate', '--format=%(refname:short)', 'refs/tags'
|
||||||
|
standardOutput = stdout
|
||||||
|
}
|
||||||
|
def versions = stdout.toString().tokenize('\n').reverse()
|
||||||
|
def mcVersions = versions.collect {it.substring(0, it.indexOf('-'))}.unique().reverse()
|
||||||
|
|
||||||
|
def root = [
|
||||||
|
homepage: 'https://www.replaymod.com/download/',
|
||||||
|
promos: [:]
|
||||||
|
]
|
||||||
|
mcVersions.forEach { mcVersion ->
|
||||||
|
def mcVersionRoot = [:]
|
||||||
|
def latest
|
||||||
|
def recommended
|
||||||
|
versions.forEach {
|
||||||
|
def (thisMcVersion, modVersion, preVersion) = it.tokenize('-')
|
||||||
|
if (thisMcVersion == mcVersion) {
|
||||||
|
mcVersionRoot[it] = "See https://github.com/ReplayMod/ReplayMod/releases/$it"
|
||||||
|
if (latest == null) latest = it
|
||||||
|
if (preVersion == null) {
|
||||||
|
if (recommended == null) recommended = it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
root[mcVersion] = mcVersionRoot
|
||||||
|
root.promos[mcVersion + '-latest'] = latest
|
||||||
|
if (recommended != null) {
|
||||||
|
root.promos[mcVersion + '-recommended'] = recommended
|
||||||
|
}
|
||||||
|
}
|
||||||
|
root
|
||||||
|
}
|
||||||
|
|
||||||
|
task doRelease() {
|
||||||
|
doLast {
|
||||||
|
// Parse version
|
||||||
|
def version = project.releaseVersion as String
|
||||||
|
if (project.version.endsWith('*')) {
|
||||||
|
throw new InvalidUserDataException('Git working tree is dirty. Make sure to commit all changes.')
|
||||||
|
}
|
||||||
|
def (mcVersion, modVersion, preVersion) = version.tokenize('-')
|
||||||
|
preVersion = preVersion != null && preVersion.startsWith('b') ? preVersion.substring(1) : null
|
||||||
|
|
||||||
|
// Create new tag
|
||||||
|
if (preVersion != null) {
|
||||||
|
project.exec {
|
||||||
|
commandLine 'git', 'tag',
|
||||||
|
'-m', "Pre-release $preVersion of $modVersion for Minecraft $mcVersion",
|
||||||
|
"$mcVersion-$modVersion-b$preVersion"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
project.exec {
|
||||||
|
commandLine 'git', 'tag',
|
||||||
|
'-m', "Release $modVersion for Minecraft $mcVersion",
|
||||||
|
"$mcVersion-$modVersion"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Switch to master branch to update versions.json
|
||||||
|
project.exec { commandLine 'git', 'checkout', 'master' }
|
||||||
|
|
||||||
|
// Generate versions.json content
|
||||||
|
def versionsRoot = generateVersionsJson()
|
||||||
|
def versionsJson = JsonOutput.prettyPrint(JsonOutput.toJson(versionsRoot))
|
||||||
|
|
||||||
|
// Write versions.json
|
||||||
|
new File('versions.json').write(versionsJson)
|
||||||
|
|
||||||
|
// Commit changes
|
||||||
|
project.exec { commandLine 'git', 'add', 'versions.json' }
|
||||||
|
project.exec { commandLine 'git', 'commit', '-m', "Update versions.json for $version" }
|
||||||
|
|
||||||
|
// Return to previous branch
|
||||||
|
project.exec { commandLine 'git', 'checkout', '-' }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
defaultTasks 'build'
|
defaultTasks 'build'
|
||||||
|
|||||||
2
jGui
2
jGui
Submodule jGui updated: 87f7f27009...46e47874a4
142
src/main/java/com/replaymod/extras/OpenEyeExtra.java
Normal file
142
src/main/java/com/replaymod/extras/OpenEyeExtra.java
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
package com.replaymod.extras;
|
||||||
|
|
||||||
|
import com.replaymod.core.ReplayMod;
|
||||||
|
import com.replaymod.core.Setting;
|
||||||
|
import de.johni0702.minecraft.gui.container.AbstractGuiScreen;
|
||||||
|
import de.johni0702.minecraft.gui.container.GuiContainer;
|
||||||
|
import de.johni0702.minecraft.gui.container.GuiPanel;
|
||||||
|
import de.johni0702.minecraft.gui.container.GuiScreen;
|
||||||
|
import de.johni0702.minecraft.gui.element.GuiButton;
|
||||||
|
import de.johni0702.minecraft.gui.element.GuiLabel;
|
||||||
|
import de.johni0702.minecraft.gui.function.Tickable;
|
||||||
|
import de.johni0702.minecraft.gui.layout.CustomLayout;
|
||||||
|
import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
||||||
|
import de.johni0702.minecraft.gui.layout.VerticalLayout;
|
||||||
|
import de.johni0702.minecraft.gui.popup.AbstractGuiPopup;
|
||||||
|
import de.johni0702.minecraft.gui.utils.Colors;
|
||||||
|
import net.minecraftforge.fml.common.Loader;
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.channels.Channels;
|
||||||
|
import java.nio.channels.FileChannel;
|
||||||
|
import java.nio.channels.ReadableByteChannel;
|
||||||
|
|
||||||
|
public class OpenEyeExtra implements Extra {
|
||||||
|
private static final String DOWNLOAD_URL = "https://www.replaymod.com/dl/openeye/" + Loader.MC_VERSION;
|
||||||
|
private static final Setting<Boolean> ASK_FOR_OPEN_EYE = new Setting<>("advanced", "askForOpenEye", null, true);
|
||||||
|
|
||||||
|
private ReplayMod mod;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void register(ReplayMod mod) throws Exception {
|
||||||
|
this.mod = mod;
|
||||||
|
mod.getSettingsRegistry().register(ASK_FOR_OPEN_EYE);
|
||||||
|
|
||||||
|
if (!Loader.isModLoaded("OpenEye") && mod.getSettingsRegistry().get(ASK_FOR_OPEN_EYE)) {
|
||||||
|
mod.runLater(() -> new OfferGui(GuiScreen.wrap(mod.getMinecraft().currentScreen)).display());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class OfferGui extends AbstractGuiScreen<OfferGui> {
|
||||||
|
public final GuiScreen parent;
|
||||||
|
public final GuiPanel textPanel = new GuiPanel().setLayout(new VerticalLayout().setSpacing(3))
|
||||||
|
.addElements(new VerticalLayout.Data(0.5),
|
||||||
|
new GuiLabel().setI18nText("replaymod.gui.offeropeneye1"),
|
||||||
|
new GuiLabel().setI18nText("replaymod.gui.offeropeneye2"),
|
||||||
|
new GuiLabel().setI18nText("replaymod.gui.offeropeneye3"),
|
||||||
|
new GuiLabel().setI18nText("replaymod.gui.offeropeneye4"),
|
||||||
|
new GuiLabel().setI18nText("replaymod.gui.offeropeneye5"),
|
||||||
|
new GuiLabel().setI18nText("replaymod.gui.offeropeneye6"),
|
||||||
|
new GuiLabel().setI18nText("replaymod.gui.offeropeneye7"),
|
||||||
|
new GuiLabel().setI18nText("replaymod.gui.offeropeneye8"));
|
||||||
|
public final GuiPanel buttonPanel = new GuiPanel()
|
||||||
|
.setLayout(new HorizontalLayout(HorizontalLayout.Alignment.CENTER).setSpacing(5));
|
||||||
|
public final GuiPanel contentPanel = new GuiPanel(this).setLayout(new VerticalLayout().setSpacing(20))
|
||||||
|
.addElements(new VerticalLayout.Data(0.5), textPanel, buttonPanel);
|
||||||
|
public final GuiButton yesButton = new GuiButton(buttonPanel).setSize(150, 20).setI18nLabel("gui.yes");
|
||||||
|
public final GuiButton noButton = new GuiButton(buttonPanel).setSize(150, 20).setI18nLabel("gui.no");
|
||||||
|
|
||||||
|
public OfferGui(GuiScreen parent) {
|
||||||
|
this.parent = parent;
|
||||||
|
|
||||||
|
yesButton.onClick(() -> {
|
||||||
|
GuiPopup popup = new GuiPopup(OfferGui.this);
|
||||||
|
new Thread(() -> {
|
||||||
|
try {
|
||||||
|
File targetFile = new File("mods/" + Loader.MC_VERSION, "OpenEye.jar");
|
||||||
|
FileUtils.forceMkdir(targetFile.getParentFile());
|
||||||
|
|
||||||
|
ReadableByteChannel in = Channels.newChannel(new URL(DOWNLOAD_URL).openStream());
|
||||||
|
FileChannel out = new FileOutputStream(targetFile).getChannel();
|
||||||
|
out.transferFrom(in, 0, Long.MAX_VALUE);
|
||||||
|
} catch (Throwable e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
mod.runLater(() -> {
|
||||||
|
popup.close();
|
||||||
|
parent.display();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
});
|
||||||
|
noButton.onClick(() -> {
|
||||||
|
mod.getSettingsRegistry().set(ASK_FOR_OPEN_EYE, false);
|
||||||
|
mod.getSettingsRegistry().save();
|
||||||
|
parent.display();
|
||||||
|
});
|
||||||
|
|
||||||
|
setLayout(new CustomLayout<OfferGui>() {
|
||||||
|
@Override
|
||||||
|
protected void layout(OfferGui container, int width, int height) {
|
||||||
|
pos(contentPanel, width / 2 - width(contentPanel) / 2, height / 2 - height(contentPanel) / 2);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected OfferGui getThis() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final class GuiPopup extends AbstractGuiPopup<GuiPopup> {
|
||||||
|
GuiPopup(GuiContainer container) {
|
||||||
|
super(container);
|
||||||
|
popup.addElements(null, new GuiIndicator().setColor(Colors.BLACK));
|
||||||
|
setBackgroundColor(Colors.DARK_TRANSPARENT);
|
||||||
|
open();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() {
|
||||||
|
super.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected GuiPopup getThis() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final class GuiIndicator extends GuiLabel implements Tickable {
|
||||||
|
private int tick;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick() {
|
||||||
|
tick++;
|
||||||
|
setText(new String[]{
|
||||||
|
"Ooooo",
|
||||||
|
"oOooo",
|
||||||
|
"ooOoo",
|
||||||
|
"oooOo",
|
||||||
|
"ooooO",
|
||||||
|
"oooOo",
|
||||||
|
"ooOoo",
|
||||||
|
"oOooo",
|
||||||
|
}[tick / 5 % 8]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -29,6 +29,7 @@ public class ReplayModExtras {
|
|||||||
FullBrightness.class,
|
FullBrightness.class,
|
||||||
HotkeyButtons.class,
|
HotkeyButtons.class,
|
||||||
LocalizationExtra.class,
|
LocalizationExtra.class,
|
||||||
|
OpenEyeExtra.class,
|
||||||
VersionChecker.class
|
VersionChecker.class
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.replaymod.recording;
|
package com.replaymod.recording;
|
||||||
|
|
||||||
import com.replaymod.core.ReplayMod;
|
import com.replaymod.core.ReplayMod;
|
||||||
|
import com.replaymod.core.utils.Restrictions;
|
||||||
import com.replaymod.recording.handler.ConnectionEventHandler;
|
import com.replaymod.recording.handler.ConnectionEventHandler;
|
||||||
import com.replaymod.recording.packet.PacketListener;
|
import com.replaymod.recording.packet.PacketListener;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
@@ -8,6 +9,7 @@ import net.minecraftforge.fml.common.Mod;
|
|||||||
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.eventhandler.EventBus;
|
import net.minecraftforge.fml.common.eventhandler.EventBus;
|
||||||
|
import net.minecraftforge.fml.common.network.NetworkRegistry;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.lwjgl.input.Keyboard;
|
import org.lwjgl.input.Keyboard;
|
||||||
|
|
||||||
@@ -44,5 +46,7 @@ public class ReplayModRecording {
|
|||||||
public void init(FMLInitializationEvent event) {
|
public void init(FMLInitializationEvent event) {
|
||||||
EventBus bus = MinecraftForge.EVENT_BUS;
|
EventBus bus = MinecraftForge.EVENT_BUS;
|
||||||
bus.register(connectionEventHandler = new ConnectionEventHandler(logger, core));
|
bus.register(connectionEventHandler = new ConnectionEventHandler(logger, core));
|
||||||
|
|
||||||
|
NetworkRegistry.INSTANCE.newSimpleChannel(Restrictions.PLUGIN_CHANNEL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -496,4 +496,14 @@ replaymod.gui.modwarning.id=Mod Id:
|
|||||||
replaymod.gui.modwarning.missing=Missing Mods
|
replaymod.gui.modwarning.missing=Missing Mods
|
||||||
replaymod.gui.modwarning.version=Different Mod Versions
|
replaymod.gui.modwarning.version=Different Mod Versions
|
||||||
replaymod.gui.modwarning.version.expected=Expected
|
replaymod.gui.modwarning.version.expected=Expected
|
||||||
replaymod.gui.modwarning.version.found=Found
|
replaymod.gui.modwarning.version.found=Found
|
||||||
|
|
||||||
|
#OpenEye
|
||||||
|
replaymod.gui.offeropeneye1=Do you want to install OpenEye?
|
||||||
|
replaymod.gui.offeropeneye2=OpenEye is a mod that collects anonymous information
|
||||||
|
replaymod.gui.offeropeneye3=about the mods being run and any crashes that happen.
|
||||||
|
replaymod.gui.offeropeneye4=
|
||||||
|
replaymod.gui.offeropeneye5=OpenEye can be disabled at any time and is completely optional.
|
||||||
|
replaymod.gui.offeropeneye6=More information is available at https://openeye.openmods.info/faq
|
||||||
|
replaymod.gui.offeropeneye7=Clicking Yes will download OpenEye and place it in your mods folder.
|
||||||
|
replaymod.gui.offeropeneye8=It will then be active the next time you start Minecraft.
|
||||||
Reference in New Issue
Block a user