Release 2.6.9

This commit is contained in:
Jonas Herzig
2022-12-07 16:35:51 +01:00
27 changed files with 510 additions and 83 deletions

View File

@@ -250,6 +250,8 @@ dependencies {
11802: '1.18.2', 11802: '1.18.2',
11900: '1.19', 11900: '1.19',
11901: '1.19.1', 11901: '1.19.1',
11902: '1.19.2',
11903: '1.19.3-rc3',
][mcVersion] ][mcVersion]
mappings 'net.fabricmc:yarn:' + [ mappings 'net.fabricmc:yarn:' + [
11404: '1.14.4+build.16', 11404: '1.14.4+build.16',
@@ -264,8 +266,10 @@ dependencies {
11802: '1.18.2+build.1:v2', 11802: '1.18.2+build.1:v2',
11900: '1.19+build.2:v2', 11900: '1.19+build.2:v2',
11901: '1.19.1+build.5:v2', 11901: '1.19.1+build.5:v2',
11902: '1.19.2+build.28:v2',
11903: '1.19.3-rc3+build.1:v2',
][mcVersion] ][mcVersion]
modImplementation 'net.fabricmc:fabric-loader:0.14.6' modImplementation 'net.fabricmc:fabric-loader:0.14.11'
def fabricApiVersion = [ def fabricApiVersion = [
11404: '0.4.3+build.247-1.14', 11404: '0.4.3+build.247-1.14',
11502: '0.5.1+build.294-1.15', 11502: '0.5.1+build.294-1.15',
@@ -279,6 +283,8 @@ dependencies {
11802: '0.47.9+1.18.2', 11802: '0.47.9+1.18.2',
11900: '0.55.3+1.19', 11900: '0.55.3+1.19',
11901: '0.58.5+1.19.1', 11901: '0.58.5+1.19.1',
11902: '0.68.0+1.19.2',
11903: '0.68.1+1.19.3',
][mcVersion] ][mcVersion]
def fabricApiModules = [ def fabricApiModules = [
"api-base", "api-base",
@@ -351,7 +357,7 @@ dependencies {
shadow 'com.github.ReplayMod.JavaBlend:2.79.0:a0696f8' shadow 'com.github.ReplayMod.JavaBlend:2.79.0:a0696f8'
shadow "com.github.ReplayMod:ReplayStudio:b2c999d", shadeExclusions shadow "com.github.ReplayMod:ReplayStudio:21ef505", shadeExclusions
// FIXME this should be pulled in by ReplayStudio, and IntelliJ sees it, but javac for some reason does not // FIXME this should be pulled in by ReplayStudio, and IntelliJ sees it, but javac for some reason does not
implementation 'com.github.viaversion:opennbt:0a02214' // 2.0-SNAPSHOT (ViaVersion Edition) implementation 'com.github.viaversion:opennbt:0a02214' // 2.0-SNAPSHOT (ViaVersion Edition)
@@ -362,7 +368,9 @@ dependencies {
shadow 'com.github.ReplayMod:lwjgl-utils:27dcd66' shadow 'com.github.ReplayMod:lwjgl-utils:27dcd66'
if (FABRIC) { if (FABRIC) {
if (mcVersion >= 11901) { if (mcVersion >= 11903) {
modImplementation 'com.terraformersmc:modmenu:5.0.0-alpha.4'
} else if (mcVersion >= 11901) {
modImplementation 'com.terraformersmc:modmenu:4.0.5' modImplementation 'com.terraformersmc:modmenu:4.0.5'
} else if (mcVersion >= 11900) { } else if (mcVersion >= 11900) {
modImplementation 'com.terraformersmc:modmenu:4.0.4' modImplementation 'com.terraformersmc:modmenu:4.0.4'
@@ -378,8 +386,10 @@ dependencies {
modImplementation('com.terraformersmc:modmenu:1.14.15') { modImplementation('com.terraformersmc:modmenu:1.14.15') {
exclude module: 'fabric-resource-loader-v0' // inappropriate version for 1.16.1 exclude module: 'fabric-resource-loader-v0' // inappropriate version for 1.16.1
} }
} else { } else if (mcVersion >= 11500) {
modImplementation 'com.terraformersmc:modmenu:1.10.6' modImplementation 'com.terraformersmc:modmenu:1.10.6'
} else {
modCompileOnly 'com.terraformersmc:modmenu:1.10.6'
} }
} }

2
jGui

Submodule jGui updated: aa031212c7...7a80b50c2e

View File

@@ -193,6 +193,8 @@ val doRelease by tasks.registering {
defaultTasks("bundleJar") defaultTasks("bundleJar")
preprocess { preprocess {
val mc11903 = createNode("1.19.3", 11903, "yarn")
val mc11902 = createNode("1.19.2", 11902, "yarn")
val mc11901 = createNode("1.19.1", 11901, "yarn") val mc11901 = createNode("1.19.1", 11901, "yarn")
val mc11900 = createNode("1.19", 11900, "yarn") val mc11900 = createNode("1.19", 11900, "yarn")
val mc11802 = createNode("1.18.2", 11802, "yarn") val mc11802 = createNode("1.18.2", 11802, "yarn")
@@ -215,6 +217,8 @@ preprocess {
val mc10800 = createNode("1.8", 10800, "srg") val mc10800 = createNode("1.8", 10800, "srg")
val mc10710 = createNode("1.7.10", 10710, "srg") val mc10710 = createNode("1.7.10", 10710, "srg")
mc11903.link(mc11902, file("versions/mapping-fabric-1.19.3-1.19.2.txt"))
mc11902.link(mc11901)
mc11901.link(mc11900) mc11901.link(mc11900)
mc11900.link(mc11802, file("versions/mapping-fabric-1.19-1.18.2.txt")) mc11900.link(mc11802, file("versions/mapping-fabric-1.19-1.18.2.txt"))
mc11802.link(mc11801) mc11802.link(mc11801)

View File

@@ -35,6 +35,8 @@ val jGuiVersions = listOf(
"1.18.2", "1.18.2",
"1.19", "1.19",
"1.19.1", "1.19.1",
"1.19.2",
"1.19.3",
) )
val replayModVersions = listOf( val replayModVersions = listOf(
// "1.7.10", // "1.7.10",
@@ -58,6 +60,8 @@ val replayModVersions = listOf(
"1.18.2", "1.18.2",
"1.19", "1.19",
"1.19.1", "1.19.1",
"1.19.2",
"1.19.3",
) )
rootProject.buildFileName = "root.gradle.kts" rootProject.buildFileName = "root.gradle.kts"

View File

@@ -1,4 +1,4 @@
//#if MC>=10800 //#if MC>=10800 && MC<11800
package com.replaymod.compat.shaders.mixin; package com.replaymod.compat.shaders.mixin;
import com.replaymod.render.hooks.EntityRendererHandler; import com.replaymod.render.hooks.EntityRendererHandler;

View File

@@ -115,9 +115,16 @@ public class ReplayMod implements Module, Scheduler {
private static DirectoryResourcePack createJGuiResourcePack() { private static DirectoryResourcePack createJGuiResourcePack() {
File folder = new File("../jGui/src/main/resources"); File folder = new File("../jGui/src/main/resources");
if (!folder.exists()) { if (!folder.exists()) {
return null; folder = new File("../../../jGui/src/main/resources");
if (!folder.exists()) {
return null;
}
} }
//#if MC>=11903
//$$ return new DirectoryResourcePack(JGUI_RESOURCE_PACK_NAME, folder.toPath(), true) {
//#else
return new DirectoryResourcePack(folder) { return new DirectoryResourcePack(folder) {
//#endif
@Override @Override
//#if MC>=11400 //#if MC>=11400
public String getName() { public String getName() {
@@ -127,23 +134,37 @@ public class ReplayMod implements Module, Scheduler {
return JGUI_RESOURCE_PACK_NAME; return JGUI_RESOURCE_PACK_NAME;
} }
//#if MC>=11903
//$$ @Override
//$$ public net.minecraft.resource.InputSupplier<InputStream> openRoot(String... segments) {
//$$ if (segments.length == 1 && segments[0].equals("pack.mcmeta")) {
//$$ return () -> new ByteArrayInputStream(generatePackMeta());
//$$ }
//$$ return super.openRoot(segments);
//$$ }
//#else
@Override @Override
protected InputStream openFile(String resourceName) throws IOException { protected InputStream openFile(String resourceName) throws IOException {
try { try {
return super.openFile(resourceName); return super.openFile(resourceName);
} catch (IOException e) { } catch (IOException e) {
if ("pack.mcmeta".equals(resourceName)) { if ("pack.mcmeta".equals(resourceName)) {
//#if MC>=11400 return new ByteArrayInputStream(generatePackMeta());
int version = 4;
//#else
//$$ int version = 1;
//#endif
return new ByteArrayInputStream(("{\"pack\": {\"description\": \"dummy pack for jGui resources in dev-env\", \"pack_format\": "
+ version + "}}").getBytes(StandardCharsets.UTF_8));
} }
throw e; throw e;
} }
} }
//#endif
private byte[] generatePackMeta() {
//#if MC>=11400
int version = 4;
//#else
//$$ int version = 1;
//#endif
return ("{\"pack\": {\"description\": \"dummy pack for jGui resources in dev-env\", \"pack_format\": "
+ version + "}}").getBytes(StandardCharsets.UTF_8);
}
}; };
} }

View File

@@ -4,7 +4,6 @@ package com.replaymod.core.versions;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.replaymod.core.ReplayMod; import com.replaymod.core.ReplayMod;
import net.minecraft.resource.AbstractFileResourcePack; import net.minecraft.resource.AbstractFileResourcePack;
import net.minecraft.resource.ResourceNotFoundException;
import net.minecraft.resource.ResourceType; import net.minecraft.resource.ResourceType;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
@@ -16,16 +15,18 @@ import java.io.InputStream;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Stream;
//#if FABRIC>=1 //#if FABRIC>=1
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
@@ -33,6 +34,11 @@ import net.fabricmc.loader.api.ModContainer;
//#else //#else
//#endif //#endif
//#if MC>=11903
//$$ import java.util.Objects;
//$$ import net.minecraft.resource.InputSupplier;
//#endif
//#if MC>=11400 //#if MC>=11400
//#else //#else
//$$ import net.minecraft.resources.IPackFinder; //$$ import net.minecraft.resources.IPackFinder;
@@ -58,7 +64,11 @@ public class LangResourcePack extends AbstractFileResourcePack {
private final Path basePath; private final Path basePath;
public LangResourcePack() { public LangResourcePack() {
//#if MC>=11903
//$$ super(NAME, true);
//#else
super(new File(NAME)); super(new File(NAME));
//#endif
//#if FABRIC>=1 //#if FABRIC>=1
ModContainer container = FabricLoader.getInstance().getModContainer(ReplayMod.MOD_ID).orElseThrow(IllegalAccessError::new); ModContainer container = FabricLoader.getInstance().getModContainer(ReplayMod.MOD_ID).orElseThrow(IllegalAccessError::new);
@@ -110,14 +120,45 @@ public class LangResourcePack extends AbstractFileResourcePack {
return value; return value;
} }
//#if MC>=11903
//$$ @Override
//$$ public InputSupplier<InputStream> openRoot(String... segments) {
//$$ byte[] bytes;
//$$ try {
//$$ bytes = readFile(String.join("/", segments));
//$$ } catch (IOException e) {
//$$ throw new RuntimeException(e);
//$$ }
//$$ if (bytes == null) {
//$$ return null;
//$$ }
//$$ return () -> new ByteArrayInputStream(bytes);
//$$ }
//#endif
//#if MC>=11903
//$$ @Override
//$$ public InputSupplier<InputStream> open(ResourceType type, Identifier id) {
//$$ return openRoot(type.getDirectory(), id.getNamespace(), id.getPath());
//$$ }
//#else
@Override @Override
protected InputStream openFile(String path) throws IOException { protected InputStream openFile(String path) throws IOException {
byte[] bytes = readFile(path);
if (bytes == null) {
throw new net.minecraft.resource.ResourceNotFoundException(this.base, path);
}
return new ByteArrayInputStream(bytes);
}
//#endif
private byte[] readFile(String path) throws IOException {
if ("pack.mcmeta".equals(path)) { if ("pack.mcmeta".equals(path)) {
return new ByteArrayInputStream("{\"pack\": {\"description\": \"ReplayMod language files\", \"pack_format\": 4}}".getBytes(StandardCharsets.UTF_8)); return "{\"pack\": {\"description\": \"ReplayMod language files\", \"pack_format\": 4}}".getBytes(StandardCharsets.UTF_8);
} }
Path langPath = langPath(path); Path langPath = langPath(path);
if (langPath == null) throw new ResourceNotFoundException(this.base, path); if (langPath == null) return null;
List<String> langFile; List<String> langFile;
try (InputStream in = Files.newInputStream(langPath)) { try (InputStream in = Files.newInputStream(langPath)) {
@@ -141,16 +182,25 @@ public class LangResourcePack extends AbstractFileResourcePack {
properties.put(key, value); properties.put(key, value);
} }
return new ByteArrayInputStream(GSON.toJson(properties).getBytes(StandardCharsets.UTF_8)); return GSON.toJson(properties).getBytes(StandardCharsets.UTF_8);
} }
//#if MC>=11903
//#else
@Override @Override
protected boolean containsFile(String path) { protected boolean containsFile(String path) {
Path langPath = langPath(path); Path langPath = langPath(path);
return langPath != null && Files.exists(langPath); return langPath != null && Files.exists(langPath);
} }
//#endif
//#if MC>=11903
//$$ @Override
//$$ public void findResources(ResourceType type, String namespace, String prefix, ResultConsumer consumer) {
//$$ findResources(type, prefix, id -> consumer.accept(id, () -> new ByteArrayInputStream(Objects.requireNonNull(readFile(id.getPath())))));
//$$ }
//#else
@Override @Override
public Collection<Identifier> findResources( public Collection<Identifier> findResources(
ResourceType resourcePackType, ResourceType resourcePackType,
@@ -162,36 +212,42 @@ public class LangResourcePack extends AbstractFileResourcePack {
//$$ Predicate<Identifier> filter //$$ Predicate<Identifier> filter
//#else //#else
int maxDepth, int maxDepth,
Predicate<String> filter Predicate<String> pathFilter
//#endif //#endif
) { ) {
if (resourcePackType == ResourceType.CLIENT_RESOURCES && "lang".equals(path)) { //#if MC<11900
Path base = baseLangPath(); Predicate<Identifier> filter = id -> pathFilter.test(id.getPath());
//#if MC<11400 //#endif
//$$ if (base == null) return Collections.emptyList();
//#endif List<Identifier> result = new ArrayList<>();
try { findResources(resourcePackType, path, id -> {
return Files.walk(base, 1) if (filter.test(id)) {
.skip(1) result.add(id);
.filter(Files::isRegularFile)
.map(Path::getFileName).map(Path::toString)
.map(LANG_FILE_NAME_PATTERN::matcher)
.filter(Matcher::matches)
.map(matcher -> String.format("%s_%s.json", matcher.group(1), matcher.group(1)))
//#if MC<11900
.filter(filter)
//#endif
.map(name -> new Identifier(ReplayMod.MOD_ID, "lang/" + name))
//#if MC>=11900
//$$ .filter(filter)
//#endif
.collect(Collectors.toList());
} catch (IOException e) {
e.printStackTrace();
return Collections.emptyList();
} }
} else { });
return Collections.emptyList(); return result;
}
//#endif
private void findResources(ResourceType type, String path, Consumer<Identifier> consumer) {
if (type != ResourceType.CLIENT_RESOURCES) return;
if (!"lang".equals(path)) return;
Path base = baseLangPath();
//#if MC<11400
//$$ if (base == null) return;
//#endif
try (Stream<Path> stream = Files.walk(base, 1)) {
stream
.skip(1)
.filter(Files::isRegularFile)
.map(Path::getFileName).map(Path::toString)
.map(LANG_FILE_NAME_PATTERN::matcher)
.filter(Matcher::matches)
.map(matcher -> String.format("%s_%s.json", matcher.group(1), matcher.group(1)))
.map(name -> new Identifier(ReplayMod.MOD_ID, "lang/" + name))
.forEach(consumer);
} catch (IOException e) {
e.printStackTrace();
} }
} }

View File

@@ -15,6 +15,10 @@ import net.minecraft.util.Identifier;
import net.minecraft.util.Util; import net.minecraft.util.Util;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
//#if MC>=11700
//$$ import net.minecraft.util.math.Matrix4f;
//#endif
//#if MC>=11604 //#if MC>=11604
//#else //#else
//$$ import net.minecraft.entity.Entity; //$$ import net.minecraft.entity.Entity;
@@ -27,6 +31,8 @@ import net.minecraft.resource.ResourcePackSource;
//#if MC>=11400 //#if MC>=11400
import com.replaymod.render.mixin.MainWindowAccessor; import com.replaymod.render.mixin.MainWindowAccessor;
import net.minecraft.SharedConstants; import net.minecraft.SharedConstants;
import net.minecraft.client.gui.Element;
import net.minecraft.client.gui.ParentElement;
import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.widget.AbstractButtonWidget; import net.minecraft.client.gui.widget.AbstractButtonWidget;
import net.minecraft.client.util.Window; import net.minecraft.client.util.Window;
@@ -219,13 +225,23 @@ public class MCVer {
} }
//#if MC>=11400 //#if MC>=11400
public static Optional<AbstractButtonWidget> findButton(Iterable<AbstractButtonWidget> buttonList, @SuppressWarnings("unused") String text, @SuppressWarnings("unused") int id) { public static Optional<AbstractButtonWidget> findButton(Iterable<? extends Element> buttonList, @SuppressWarnings("unused") String text, @SuppressWarnings("unused") int id) {
//#if MC>=11600 //#if MC>=11600
final Text message = new TranslatableText(text); final Text message = new TranslatableText(text);
//#else //#else
//$$ final String message = I18n.translate(text); //$$ final String message = I18n.translate(text);
//#endif //#endif
for (AbstractButtonWidget b : buttonList) { for (Element e : buttonList) {
if (e instanceof ParentElement) {
Optional<AbstractButtonWidget> button = findButton(((ParentElement) e).children(), text, id);
if (button.isPresent()) {
return button;
}
}
if (!(e instanceof AbstractButtonWidget)) {
continue;
}
AbstractButtonWidget b = (AbstractButtonWidget) e;
if (message.equals(b.getMessage())) { if (message.equals(b.getMessage())) {
return Optional.of(b); return Optional.of(b);
} }
@@ -361,6 +377,24 @@ public class MCVer {
//#endif //#endif
} }
//#if MC>=11700
//$$ public static net.minecraft.util.math.Quaternion quaternion(float angle, net.minecraft.util.math.Vec3f axis) {
//#if MC>=11903
//$$ return new org.joml.Quaternionf().fromAxisAngleDeg(axis.x, axis.y, axis.z, angle);
//#else
//$$ return new net.minecraft.util.math.Quaternion(axis, angle, true);
//#endif
//$$ }
//$$
//$$ public static Matrix4f ortho(float left, float right, float top, float bottom, float zNear, float zFar) {
//#if MC>=11903
//$$ return new Matrix4f().ortho(left, right, bottom, top, zNear, zFar);
//#else
//$$ return Matrix4f.projectionMatrix(left, right, top, bottom, zNear, zFar);
//#endif
//$$ }
//#endif
public static void emitLine(BufferBuilder buffer, Vector2f p1, Vector2f p2, int color) { public static void emitLine(BufferBuilder buffer, Vector2f p1, Vector2f p2, int color) {
emitLine(buffer, new Vector3f(p1.x, p1.y, 0), new Vector3f(p2.x, p2.y, 0), color); emitLine(buffer, new Vector3f(p1.x, p1.y, 0), new Vector3f(p2.x, p2.y, 0), color);
} }

View File

@@ -18,6 +18,7 @@ import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.resource.Resource; import net.minecraft.resource.Resource;
import net.minecraft.resource.ResourceManager; import net.minecraft.resource.ResourceManager;
import net.minecraft.sound.SoundCategory;
import net.minecraft.text.LiteralText; import net.minecraft.text.LiteralText;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.text.TranslatableText; import net.minecraft.text.TranslatableText;
@@ -39,13 +40,16 @@ import org.lwjgl.opengl.GL11;
//#if MC>=11600 //#if MC>=11600
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.client.util.math.Vector3f;
import net.minecraft.util.math.Matrix4f; import net.minecraft.util.math.Matrix4f;
import net.minecraft.util.math.Quaternion;
//#else //#else
//#endif //#endif
//#if MC>=11400 //#if MC>=11400
import net.minecraft.client.gui.widget.AbstractButtonWidget; import net.minecraft.client.gui.widget.AbstractButtonWidget;
import net.minecraft.client.util.Window; import net.minecraft.client.util.Window;
import net.minecraft.util.registry.Registry;
//#else //#else
//$$ import net.minecraft.client.gui.GuiButton; //$$ import net.minecraft.client.gui.GuiButton;
//#endif //#endif
@@ -165,6 +169,42 @@ class Patterns {
//#endif //#endif
} }
@Pattern
private static int getX(AbstractButtonWidget button) {
//#if MC>=11903
//$$ return button.getX();
//#else
return button.x;
//#endif
}
@Pattern
private static int getY(AbstractButtonWidget button) {
//#if MC>=11903
//$$ return button.getY();
//#else
return button.y;
//#endif
}
@Pattern
private static void setX(AbstractButtonWidget button, int value) {
//#if MC>=11903
//$$ button.setX(value);
//#else
button.x = value;
//#endif
}
@Pattern
private static void setY(AbstractButtonWidget button, int value) {
//#if MC>=11903
//$$ button.setY(value);
//#else
button.y = value;
//#endif
}
//#if MC>=11400 //#if MC>=11400
@Pattern @Pattern
private static void setWidth(AbstractButtonWidget button, int value) { private static void setWidth(AbstractButtonWidget button, int value) {
@@ -529,7 +569,7 @@ class Patterns {
@Pattern @Pattern
private static void GL11_glRotatef(float angle, float x, float y, float z) { private static void GL11_glRotatef(float angle, float x, float y, float z) {
//#if MC>=11700 //#if MC>=11700
//$$ { float $angle = angle; com.mojang.blaze3d.systems.RenderSystem.getModelViewStack().multiply(new net.minecraft.util.math.Quaternion(new net.minecraft.util.math.Vec3f(x, y, z), $angle, true)); } //$$ com.mojang.blaze3d.systems.RenderSystem.getModelViewStack().multiply(com.replaymod.core.versions.MCVer.quaternion(angle, new net.minecraft.util.math.Vec3f(x, y, z)));
//#else //#else
GL11.glRotatef(angle, x, y, z); GL11.glRotatef(angle, x, y, z);
//#endif //#endif
@@ -683,4 +723,178 @@ class Patterns {
//$$ return java.util.Arrays.asList(new ItemStack[size]); //$$ return java.util.Arrays.asList(new ItemStack[size]);
//#endif //#endif
} }
@Pattern
private static void setSoundVolume(GameOptions options, SoundCategory category, float value) {
//#if MC>=11903
//$$ options.getSoundVolumeOption(category).setValue((double) value);
//#else
options.setSoundVolume(category, value);
//#endif
}
//#if MC>=10900
@Pattern
private static SoundEvent SoundEvent_of(Identifier identifier) {
//#if MC>=11903
//$$ return SoundEvent.of(identifier);
//#else
return new SoundEvent(identifier);
//#endif
}
//#else
//$$ @Pattern private static void SoundEvent_of() {}
//#endif
//#if MC>=11600
@Pattern
private static Vector3f POSITIVE_X() {
//#if MC>=11903
//$$ return new org.joml.Vector3f(1, 0, 0);
//#else
return Vector3f.POSITIVE_X;
//#endif
}
@Pattern
private static Vector3f POSITIVE_Y() {
//#if MC>=11903
//$$ return new org.joml.Vector3f(0, 1, 0);
//#else
return Vector3f.POSITIVE_Y;
//#endif
}
@Pattern
private static Vector3f POSITIVE_Z() {
//#if MC>=11903
//$$ return new org.joml.Vector3f(0, 0, 1);
//#else
return Vector3f.POSITIVE_Z;
//#endif
}
@Pattern
private static Quaternion getDegreesQuaternion(Vector3f axis, float angle) {
//#if MC>=11903
//$$ return new org.joml.Quaternionf().fromAxisAngleDeg(axis, angle);
//#else
return axis.getDegreesQuaternion(angle);
//#endif
}
@Pattern
private static void Quaternion_mul(Quaternion left, Quaternion right) {
//#if MC>=11903
//$$ left.mul(right);
//#else
left.hamiltonProduct(right);
//#endif
}
@Pattern
private static float Quaternion_getX(Quaternion q) {
//#if MC>=11903
//$$ return q.x;
//#else
return q.getX();
//#endif
}
@Pattern
private static float Quaternion_getY(Quaternion q) {
//#if MC>=11903
//$$ return q.y;
//#else
return q.getY();
//#endif
}
@Pattern
private static float Quaternion_getZ(Quaternion q) {
//#if MC>=11903
//$$ return q.z;
//#else
return q.getZ();
//#endif
}
@Pattern
private static float Quaternion_getW(Quaternion q) {
//#if MC>=11903
//$$ return q.w;
//#else
return q.getW();
//#endif
}
@Pattern
private static Quaternion Quaternion_copy(Quaternion source) {
//#if MC>=11903
//$$ return new org.joml.Quaternionf(source);
//#else
return source.copy();
//#endif
}
//#else
//$$ @Pattern private static void POSITIVE_X() {}
//$$ @Pattern private static void POSITIVE_Y() {}
//$$ @Pattern private static void POSITIVE_Z() {}
//$$ @Pattern private static void getDegreesQuaternion() {}
//$$ @Pattern private static void Quaternion_mul() {}
//$$ @Pattern private static void Quaternion_getX() {}
//$$ @Pattern private static void Quaternion_getY() {}
//$$ @Pattern private static void Quaternion_getZ() {}
//$$ @Pattern private static void Quaternion_getW() {}
//$$ @Pattern private static void Quaternion_copy() {}
//#endif
//#if MC>=11600
@Pattern
private static void Matrix4f_multiply(Matrix4f left, Matrix4f right) {
//#if MC>=11903
//$$ left.mul(right);
//#else
left.multiply(right);
//#endif
}
@Pattern
private static Matrix4f Matrix4f_translate(float x, float y, float z) {
//#if MC>=11903
//$$ return new Matrix4f().translation(x, y, z);
//#else
return Matrix4f.translate(x, y, z);
//#endif
}
//#else
//$$ @Pattern private static void Matrix4f_multiply() {}
//$$ @Pattern private static void Matrix4f_translate() {}
//#endif
//#if MC>=11700
//$$ @Pattern
//$$ private static Matrix4f Matrix4f_perspectiveMatrix(float left, float right, float top, float bottom, float zNear, float zFar) {
//#if MC>=11903
//$$ return com.replaymod.core.versions.MCVer.ortho(left, right, top, bottom, zNear, zFar);
//#else
//$$ return Matrix4f.projectionMatrix(left, right, top, bottom, zNear, zFar);
//#endif
//$$ }
//#else
@Pattern private static void Matrix4f_perspectiveMatrix() {}
//#endif
//#if MC>=11400
@Pattern
private static Registry<? extends Registry<?>> REGISTRIES() {
//#if MC>=11903
//$$ return net.minecraft.registry.Registries.REGISTRIES;
//#else
return Registry.REGISTRIES;
//#endif
}
//#else
//$$ @Pattern private static void REGISTRIES() {}
//#endif
} }

View File

@@ -32,7 +32,6 @@ import net.minecraft.server.integrated.IntegratedServer;
//#if MC>=11600 //#if MC>=11600
import com.mojang.datafixers.util.Pair; import com.mojang.datafixers.util.Pair;
import java.util.Collections;
//#endif //#endif
//#if MC>=11400 //#if MC>=11400
@@ -57,6 +56,7 @@ import net.minecraft.util.math.BlockPos;
//$$ import net.minecraft.util.MathHelper; //$$ import net.minecraft.util.MathHelper;
//#endif //#endif
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@@ -104,10 +104,19 @@ public class RecordingEventHandler extends EventRegistrations {
ClientPlayerEntity player = mc.player; ClientPlayerEntity player = mc.player;
assert player != null; assert player != null;
packetListener.save(new PlayerSpawnS2CPacket(player)); packetListener.save(new PlayerSpawnS2CPacket(player));
//#if MC>=11500 //#if MC>=11903
//$$ packetListener.save(new EntityTrackerUpdateS2CPacket(player.getId(), player.getDataTracker().getChangedEntries()));
//#elseif MC>=11500
packetListener.save(new EntityTrackerUpdateS2CPacket(player.getEntityId(), player.getDataTracker(), true)); packetListener.save(new EntityTrackerUpdateS2CPacket(player.getEntityId(), player.getDataTracker(), true));
//#endif //#endif
lastX = lastY = lastZ = null; lastX = lastY = lastZ = null;
//#if MC>=11100
playerItems.clear();
//#else
//$$ Collections.fill(playerItems, null);
//#endif
lastRiding = -1;
wasSleeping = false;
} catch(Exception e) { } catch(Exception e) {
e.printStackTrace(); e.printStackTrace();
} }

View File

@@ -61,7 +61,11 @@ public abstract class MixinNetHandlerPlayClient {
if (mcStatic.player == null) return; if (mcStatic.player == null) return;
RecordingEventHandler handler = getRecordingEventHandler(); RecordingEventHandler handler = getRecordingEventHandler();
//#if MC>=11903
//$$ if (handler != null && packet.getActions().contains(PlayerListS2CPacket.Action.ADD_PLAYER)) {
//#else
if (handler != null && packet.getAction() == PlayerListS2CPacket.Action.ADD_PLAYER) { if (handler != null && packet.getAction() == PlayerListS2CPacket.Action.ADD_PLAYER) {
//#endif
// We cannot reference SPacketPlayerListItem.AddPlayerData directly for complicated (and yet to be // We cannot reference SPacketPlayerListItem.AddPlayerData directly for complicated (and yet to be
// resolved) reasons (see https://github.com/MinecraftForge/ForgeGradle/issues/472), so we use ReplayStudio // resolved) reasons (see https://github.com/MinecraftForge/ForgeGradle/issues/472), so we use ReplayStudio
// to parse it instead. // to parse it instead.

View File

@@ -111,7 +111,10 @@ public abstract class MixinWorldClient extends World implements RecordingEventHa
// but are instead played directly by the client. The server only sends these sounds to // but are instead played directly by the client. The server only sends these sounds to
// other clients so we have to record them manually. // other clients so we have to record them manually.
// E.g. Block place sounds // E.g. Block place sounds
//#if MC>=11900 //#if MC>=11903
//$$ @Inject(method = "playSound(Lnet/minecraft/entity/player/PlayerEntity;DDDLnet/minecraft/registry/entry/RegistryEntry;Lnet/minecraft/sound/SoundCategory;FFJ)V",
//$$ at = @At("HEAD"))
//#elseif MC>=11900
//$$ @Inject(method = "playSound(Lnet/minecraft/entity/player/PlayerEntity;DDDLnet/minecraft/sound/SoundEvent;Lnet/minecraft/sound/SoundCategory;FFJ)V", //$$ @Inject(method = "playSound(Lnet/minecraft/entity/player/PlayerEntity;DDDLnet/minecraft/sound/SoundEvent;Lnet/minecraft/sound/SoundCategory;FFJ)V",
//$$ at = @At("HEAD")) //$$ at = @At("HEAD"))
//#elseif MC>=11400 //#elseif MC>=11400
@@ -127,7 +130,13 @@ public abstract class MixinWorldClient extends World implements RecordingEventHa
//$$ at = @At("HEAD")) //$$ at = @At("HEAD"))
//#endif //#endif
public void replayModRecording_recordClientSound( public void replayModRecording_recordClientSound(
PlayerEntity player, double x, double y, double z, SoundEvent sound, SoundCategory category, PlayerEntity player, double x, double y, double z,
//#if MC>=11903
//$$ RegistryEntry<SoundEvent> sound,
//#else
SoundEvent sound,
//#endif
SoundCategory category,
float volume, float pitch, float volume, float pitch,
//#if MC>=11900 //#if MC>=11900
//$$ long seed, //$$ long seed,

View File

@@ -2,23 +2,40 @@ package com.replaymod.render.mixin;
import com.replaymod.render.hooks.EntityRendererHandler; import com.replaymod.render.hooks.EntityRendererHandler;
import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.GameRenderer;
import net.minecraft.util.math.Matrix4f;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.ModifyArg;
@Mixin(GameRenderer.class) @Mixin(GameRenderer.class)
public abstract class Mixin_Omnidirectional_Camera implements EntityRendererHandler.IEntityRenderer { public abstract class Mixin_Omnidirectional_Camera implements EntityRendererHandler.IEntityRenderer {
@Redirect(method = "getBasicProjectionMatrix", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/Matrix4f;viewboxMatrix(DFFF)Lnet/minecraft/util/math/Matrix4f;")) private static final String METHOD = "getBasicProjectionMatrix";
private Matrix4f replayModRender_perspective$0(double fovY, float aspect, float zNear, float zFar) { //#if MC>=11903
return replayModRender_perspective((float) fovY, aspect, zNear, zFar); //$$ private static final String TARGET = "Lorg/joml/Matrix4f;setPerspective(FFFF)Lorg/joml/Matrix4f;";
//$$ private static final boolean TARGET_REMAP = false;
//$$ private static final float OMNIDIRECTIONAL_FOV = (float) Math.PI / 2;
//#else
private static final String TARGET = "Lnet/minecraft/util/math/Matrix4f;viewboxMatrix(DFFF)Lnet/minecraft/util/math/Matrix4f;";
private static final boolean TARGET_REMAP = true;
private static final float OMNIDIRECTIONAL_FOV = 90;
//#endif
@ModifyArg(method = METHOD, at = @At(value = "INVOKE", target = TARGET, remap = TARGET_REMAP), index = 0)
//#if MC>=11903
//$$ private float replayModRender_perspective_fov(float fovY) {
//#else
private double replayModRender_perspective_fov(double fovY) {
//#endif
return isOmnidirectional() ? OMNIDIRECTIONAL_FOV : fovY;
} }
private Matrix4f replayModRender_perspective(float fovY, float aspect, float zNear, float zFar) { @ModifyArg(method = METHOD, at = @At(value = "INVOKE", target = TARGET, remap = TARGET_REMAP), index = 1)
if (replayModRender_getHandler() != null && replayModRender_getHandler().omnidirectional) { private float replayModRender_perspective_aspect(float aspect) {
fovY = 90; return isOmnidirectional() ? 1 : aspect;
aspect = 1; }
}
return Matrix4f.viewboxMatrix(fovY, aspect, zNear, zFar); @Unique
private boolean isOmnidirectional() {
return replayModRender_getHandler() != null && replayModRender_getHandler().omnidirectional;
} }
} }

View File

@@ -1,25 +1,35 @@
package com.replaymod.render.mixin; package com.replaymod.render.mixin;
import com.replaymod.render.hooks.EntityRendererHandler; import com.replaymod.render.hooks.EntityRendererHandler;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.GameRenderer;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.ModifyArg;
//#if MC>=11500
@Mixin(GameRenderer.class) @Mixin(GameRenderer.class)
//#elseif MC>=11400
//$$ @Mixin(net.minecraft.client.util.Window.class)
//#else
//$$ @Mixin(EntityRenderer.class)
//#endif
public abstract class Mixin_PreserveDepthDuringGuiRendering { public abstract class Mixin_PreserveDepthDuringGuiRendering {
@ModifyArg( @ModifyArg(
//#if MC>=11400 //#if MC>=11500
method = "render", method = "render",
at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;clear(IZ)V"), index = 0 at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;clear(IZ)V"), index = 0
//#elseif MC>=11400
//$$ method = "method_4493",
//$$ at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;clear(IZ)V"), index = 0
//#else //#else
//$$ method = "setupOverlayRendering", //$$ method = "setupOverlayRendering",
//$$ at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;clear(I)V"), index = 0 //$$ at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;clear(I)V"), index = 0
//#endif //#endif
) )
private int replayModRender_skipClearWhenRecordingDepth(int mask) { private int replayModRender_skipClearWhenRecordingDepth(int mask) {
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) this).replayModRender_getHandler(); EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MinecraftClient.getInstance().gameRenderer).replayModRender_getHandler();
if (handler != null && handler.getSettings().isDepthMap()) { if (handler != null && handler.getSettings().isDepthMap()) {
mask = mask & ~GL11.GL_DEPTH_BUFFER_BIT; mask = mask & ~GL11.GL_DEPTH_BUFFER_BIT;
} }

View File

@@ -10,13 +10,18 @@ import org.spongepowered.asm.mixin.injection.ModifyArg;
@Mixin(GameRenderer.class) @Mixin(GameRenderer.class)
public abstract class Mixin_PreserveDepthDuringHandRendering { public abstract class Mixin_PreserveDepthDuringHandRendering {
@ModifyArg( @ModifyArg(
// FIXME preprocessor bug: 1.8.9 uses method with `(FJ)V` when just name would be enough //#if MC>=11400
//#if MC>=10809
method = "renderWorld", method = "renderWorld",
//#else //#else
//$$ method = "updateCameraAndRender(F)V", //$$ method = "renderWorldPass",
//#endif //#endif
//#if MC>=11500
at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;clear(IZ)V"), at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;clear(IZ)V"),
//#elseif MC>=11400
//$$ at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;clear(IZ)V", ordinal = 1),
//#else
//$$ at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;clear(I)V", ordinal = 1),
//#endif
index = 0 index = 0
) )
private int replayModRender_skipClearWhenRecordingDepth(int mask) { private int replayModRender_skipClearWhenRecordingDepth(int mask) {

View File

@@ -57,7 +57,11 @@ import net.minecraft.util.math.Vec3d;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
//#if MC>=11901 //#if MC>=11903
//$$ import net.minecraft.network.packet.s2c.play.ProfilelessChatMessageS2CPacket;
//#endif
//#if MC==11901 || MC==11902
//$$ import net.minecraft.network.packet.s2c.play.MessageHeaderS2CPacket; //$$ import net.minecraft.network.packet.s2c.play.MessageHeaderS2CPacket;
//#endif //#endif
@@ -755,7 +759,11 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
GameMode.SPECTATOR, GameMode.SPECTATOR,
respawn.isDebugWorld(), respawn.isDebugWorld(),
respawn.isFlatWorld(), respawn.isFlatWorld(),
respawn.isWritingErrorSkippable() //#if MC>=11903
//$$ (byte) 0
//#else
false
//#endif
//#else //#else
//$$ respawn.getGeneratorType(), //$$ respawn.getGeneratorType(),
//$$ GameMode.SPECTATOR //$$ GameMode.SPECTATOR
@@ -868,7 +876,9 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
} }
} }
//#if MC>=11901 //#if MC>=11903
//$$ if (p instanceof GameMessageS2CPacket || p instanceof ChatMessageS2CPacket || p instanceof ProfilelessChatMessageS2CPacket) {
//#elseif MC==11901 || MC==11902
//$$ if (p instanceof GameMessageS2CPacket || p instanceof ChatMessageS2CPacket || p instanceof MessageHeaderS2CPacket) { //$$ if (p instanceof GameMessageS2CPacket || p instanceof ChatMessageS2CPacket || p instanceof MessageHeaderS2CPacket) {
//#elseif MC>=11900 //#elseif MC>=11900
//$$ if (p instanceof GameMessageS2CPacket || p instanceof ChatMessageS2CPacket) { //$$ if (p instanceof GameMessageS2CPacket || p instanceof ChatMessageS2CPacket) {

View File

@@ -295,6 +295,11 @@ public class ReplayHandler {
networkManager, networkManager,
mc, mc,
null null
//#if MC>=11903
//$$ , null
//$$ , false
//$$ , null
//#endif
//#if MC>=11400 //#if MC>=11400
, it -> {} , it -> {}
//#endif //#endif

View File

@@ -195,7 +195,8 @@ public class GuiHandler extends EventRegistrations {
buttons.stream() buttons.stream()
.filter(button -> button.x <= xEnd && button.x + button.getWidth() >= xStart) .filter(button -> button.x <= xEnd && button.x + button.getWidth() >= xStart)
.filter(button -> button.y <= yEnd && button.y + button.getHeight() >= yStart) .filter(button -> button.y <= yEnd && button.y + button.getHeight() >= yStart)
.forEach(button -> button.y += moveBy); // FIXME remap bug: needs the {} to recognize the setter (it also doesn't understand +=)
.forEach(button -> { button.y = button.y + moveBy; });
} }
{ on(InitScreenCallback.EVENT, (screen, buttons) -> ensureReplayStopped(screen)); } { on(InitScreenCallback.EVENT, (screen, buttons) -> ensureReplayStopped(screen)); }
@@ -417,6 +418,9 @@ public class GuiHandler extends EventRegistrations {
//#if MC>=11400 //#if MC>=11400
, self -> onClick.accept((InjectedButton) self) , self -> onClick.accept((InjectedButton) self)
//#endif //#endif
//#if MC>=11903
//$$ , DEFAULT_NARRATION_SUPPLIER
//#endif
); );
this.guiScreen = guiScreen; this.guiScreen = guiScreen;
this.id = buttonId; this.id = buttonId;

View File

@@ -11,11 +11,13 @@ import org.spongepowered.asm.mixin.injection.ModifyArg;
@Mixin(TitleScreen.class) @Mixin(TitleScreen.class)
public abstract class Mixin_MoveRealmsButton { public abstract class Mixin_MoveRealmsButton {
@ModifyArg( //#if MC>=11901
method = "init", //$$ private static final String REALMS_INIT = "Lnet/minecraft/client/realms/gui/screen/RealmsNotificationsScreen;init(Lnet/minecraft/client/MinecraftClient;II)V";
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;init(Lnet/minecraft/client/MinecraftClient;II)V"), //#else
index = 2 private static final String REALMS_INIT = "Lnet/minecraft/client/gui/screen/Screen;init(Lnet/minecraft/client/MinecraftClient;II)V";
) //#endif
@ModifyArg(method = "init", at = @At(value = "INVOKE", target = REALMS_INIT), index = 2)
private int adjustRealmsButton(int height) { private int adjustRealmsButton(int height) {
String setting = ReplayMod.instance.getSettingsRegistry().get(Setting.MAIN_MENU_BUTTON); String setting = ReplayMod.instance.getSettingsRegistry().get(Setting.MAIN_MENU_BUTTON);
if (MainMenuButtonPosition.valueOf(setting) == MainMenuButtonPosition.BIG) { if (MainMenuButtonPosition.valueOf(setting) == MainMenuButtonPosition.BIG) {

View File

@@ -7,9 +7,11 @@
//#if MC>=11500 //#if MC>=11500
"MixinChunkVisibility", "MixinChunkVisibility",
//#endif //#endif
//#if MC>=10800 && MC<11800
"MixinShaderRenderChunk",
//#endif
//#if MC>=10800 //#if MC>=10800
"MixinShaderEntityRenderer", "MixinShaderEntityRenderer",
"MixinShaderRenderChunk",
//#else //#else
//$$ "MixinShaders", //$$ "MixinShaders",
//#endif //#endif

View File

@@ -16,6 +16,7 @@
"Mixin_Omnidirectional_Camera", "Mixin_Omnidirectional_Camera",
"Mixin_Omnidirectional_Rotation", "Mixin_Omnidirectional_Rotation",
"Mixin_PreserveDepthDuringGuiRendering", "Mixin_PreserveDepthDuringGuiRendering",
"Mixin_PreserveDepthDuringHandRendering",
"Mixin_SkipBlockOutlinesDuringRender", "Mixin_SkipBlockOutlinesDuringRender",
"Mixin_SkipHudDuringRender", "Mixin_SkipHudDuringRender",
"Mixin_StabilizeCamera", "Mixin_StabilizeCamera",
@@ -34,9 +35,6 @@
//$$ "MixinChunkRenderWorker", //$$ "MixinChunkRenderWorker",
//#endif //#endif
//#endif //#endif
//#if MC>=11400
"Mixin_PreserveDepthDuringHandRendering",
//#endif
"GameRendererAccessor", "GameRendererAccessor",
"MainWindowAccessor", "MainWindowAccessor",
"WorldRendererAccessor", "WorldRendererAccessor",

View File

@@ -1 +1 @@
2.6.8 2.6.9

0
versions/1.19.2/.gitkeep Normal file
View File

0
versions/1.19.3/.gitkeep Normal file
View File

View File

@@ -9,7 +9,11 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(PlayerPublicKey.PublicKeyData.class) @Mixin(PlayerPublicKey.PublicKeyData.class)
public abstract class Mixin_AllowExpiredPlayerKeys { public abstract class Mixin_AllowExpiredPlayerKeys {
//#if MC>=11902
//$$ @Inject(method = { "isExpired()Z", "isExpired(Ljava/time/Duration;)Z" }, at = @At("HEAD"), cancellable = true)
//#else
@Inject(method = "isExpired", at = @At("HEAD"), cancellable = true) @Inject(method = "isExpired", at = @At("HEAD"), cancellable = true)
//#endif
private void neverExpireWhenInReplay(CallbackInfoReturnable<Boolean> ci) { private void neverExpireWhenInReplay(CallbackInfoReturnable<Boolean> ci) {
if (ReplayModReplay.instance.getReplayHandler() != null) { if (ReplayModReplay.instance.getReplayHandler() != null) {
ci.setReturnValue(false); ci.setReturnValue(false);

View File

@@ -17,6 +17,7 @@ net.minecraft.util.math.BlockPos net.minecraft.util.BlockPos
net.minecraft.client.gui.GuiWorldSelection net.minecraft.client.gui.GuiSelectWorld net.minecraft.client.gui.GuiWorldSelection net.minecraft.client.gui.GuiSelectWorld
net.minecraft.util.math.AxisAlignedBB net.minecraft.util.AxisAlignedBB net.minecraft.util.math.AxisAlignedBB net.minecraft.util.AxisAlignedBB
net.minecraft.util.math.RayTraceResult net.minecraft.util.MovingObjectPosition net.minecraft.util.math.RayTraceResult net.minecraft.util.MovingObjectPosition
net.minecraft.client.renderer.Matrix4f net.minecraft.util.Matrix4f
net.minecraft.client.renderer.RenderItem net.minecraft.client.renderer.entity.RenderItem net.minecraft.client.renderer.RenderItem net.minecraft.client.renderer.entity.RenderItem
net.minecraft.network.play.server.SPacketSpawnMob dataManager field_149043_l net.minecraft.network.play.server.SPacketSpawnMob dataManager field_149043_l
net.minecraft.network.play.server.SPacketSpawnMob getDataManagerEntries() func_149027_c() net.minecraft.network.play.server.SPacketSpawnMob getDataManagerEntries() func_149027_c()

View File

@@ -0,0 +1,4 @@
org.joml.Matrix3 net.minecraft.util.math.Matrix3f
org.joml.Matrix4f net.minecraft.util.math.Matrix4f
org.joml.Quaternionf net.minecraft.util.math.Quaternion
org.joml.Vector3f net.minecraft.util.math.Vec3f