Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
org.gradle.jvmargs=-Xmx2G
org.gradle.configuration-cache=true

mod_version=1.0.0
mod_version=1.0.2
1 change: 1 addition & 0 deletions src/main/java/dev/rdh/sarcio/SarcioMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
public class SarcioMod implements ModInitializer {
public static final Logger LOGGER = LogManager.getLogger();
public static final SarcioConfig CONFIG = SarcioConfig.load();
public static boolean cameraRayTrace;

@Override
public void onInitialize() {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ private String skipWholeStringLowercase(String text, Locale locale) {

@Redirect(
method = "drawLayer(Ljava/lang/String;Z)V",
at = @At(value = "INVOKE", target = "Ljava/lang/String;indexOf(I)I")
at = @At(value = "INVOKE", target = "Ljava/lang/String;indexOf(I)I", ordinal = 0)
)
private int findFormattingCode(String codes, int code) {
return codes.indexOf(Character.toLowerCase((char)code));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,7 @@
import java.util.List;
import net.minecraft.block.Blocks;
import net.minecraft.block.state.BlockState;
import net.minecraft.client.entity.particle.Particle;
import net.minecraft.entity.Entity;
import net.minecraft.entity.FallingBlockEntity;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.PrimedTntEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
import net.minecraft.util.math.MathHelper;
Expand Down Expand Up @@ -66,9 +62,7 @@ public List<Box> getCollisions(Entity entity, Box box) {
}
}

if (!(entity instanceof PrimedTntEntity || entity instanceof FallingBlockEntity || entity instanceof ItemEntity || entity instanceof Particle)) {
EntityQuery.addCollisionBoxes((World) (Object) this, entity, box.grown(0.25, 0.25, 0.25), box, boxes);
}
EntityQuery.addCollisionBoxes((World) (Object) this, entity, box.grown(0.25, 0.25, 0.25), box, boxes);

return boxes;
}
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/dev/rdh/sarcio/mixin/bugfix/MinecraftMixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,22 @@
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.ProgressScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.options.GameOptions;
import net.minecraft.client.options.KeyBinding;
import org.lwjgl.input.Keyboard;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
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(Minecraft.class)
public class MinecraftMixin {
@Shadow
public GameOptions options;

@Inject(method = "openScreen", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;lockMouse()V"))
private void sarcio$reapplyKeybinds(Screen guiScreenIn, CallbackInfo ci) {
for (KeyBinding keyBinding : KeyBinding.ALL) {
Expand All @@ -27,4 +33,9 @@ public class MinecraftMixin {
private Screen sarcio$showWorkingScreen(Screen guiScreenIn) {
return new ProgressScreen();
}

@Inject(method = "toggleFullscreen", at = @At(value = "FIELD", target = "Lnet/minecraft/client/options/GameOptions;fullscreen:Z", opcode = Opcodes.PUTFIELD, shift = At.Shift.AFTER))
private void sarcio$saveFullscreen(CallbackInfo ci) {
this.options.save();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package dev.rdh.sarcio.mixin.bugfix.gui;

import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.menu.options.LanguageOptionsScreen;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;

@Mixin(LanguageOptionsScreen.LanguageSelectionListWidget.class)
public class LanguageSelectionListWidgetMixin {
@WrapOperation(method = "entryClicked", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;reloadResources()V"))
private void sarcio$fixReload(Minecraft instance, Operation<Void> original) {
instance.getLanguageManager().reload(instance.getResourceManager());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ public class ClientPlayNetworkHandlerMixin {
return false;
}

@Inject(method = "<init>", at = @At("TAIL"))
@Inject(method = "handleLogin", at = @At("TAIL"))
private void sarcio$clearTitles(CallbackInfo ci) {
GameGui ingameGUI = Minecraft.getInstance().gui;
ingameGUI.setTitles("", "", -1, -1, -1);
ingameGUI.setTitles(null, null, -1, -1, -1);
ingameGUI.resetTitleTimes();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

import java.nio.IntBuffer;
import net.minecraft.client.render.vertex.BufferBuilder;
import net.minecraft.client.render.vertex.VertexFormat;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
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(BufferBuilder.class)
Expand All @@ -16,8 +18,16 @@ public abstract class BufferBuilderMixin {
@Shadow
protected abstract int getBufferIndex();

@Shadow
private VertexFormat format;

@Inject(method = {"nextVertex", "vertices"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/vertex/BufferBuilder;grow(I)V"))
private void sarcio$syncBufferPosition(CallbackInfo ci) {
this.intBuffer.clear().position(this.getBufferIndex());
}

@ModifyArg(method = "vertices", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/vertex/BufferBuilder;grow(I)V"))
private int sarcio$buildBuffer(int amount) {
return amount + this.format.getIntSize();
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
package dev.rdh.sarcio.mixin.bugfix.render;

import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.llamalad7.mixinextras.sugar.Local;
import com.llamalad7.mixinextras.sugar.ref.LocalFloatRef;
import dev.rdh.sarcio.SarcioMod;
import net.minecraft.client.Minecraft;
import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.resource.Identifier;
import net.minecraft.util.math.BlockPos;
import com.llamalad7.mixinextras.injector.v2.WrapWithCondition;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.HitResult;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
Expand Down Expand Up @@ -35,4 +41,14 @@ public class GameRendererMixin {
green.set(Math.min(green.get(), 1.0F));
blue.set(Math.min(blue.get(), 1.0F));
}

@WrapOperation(method = "transformCamera", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/world/ClientWorld;rayTrace(Lnet/minecraft/util/math/Vec3d;Lnet/minecraft/util/math/Vec3d;)Lnet/minecraft/world/HitResult;"))
private HitResult sarcio$ignoreCollisionlessBlocks(ClientWorld instance, Vec3d start, Vec3d end, Operation<HitResult> original) {
SarcioMod.cameraRayTrace = true;
try {
return instance.rayTrace(start, end, false, true, false);
} finally {
SarcioMod.cameraRayTrace = false;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,9 @@ public class EntityRendererMixin {
GlStateManager.blendFunc(770, 771);
GlStateManager.enableAlphaTest();
}

@Inject(method = "renderOnFire", at = @At("RETURN"))
private void sarcio$resetBlending(CallbackInfo ci) {
GlStateManager.disableBlend();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,13 @@

@Mixin(FishingBobberRenderer.class)
public class FishingBobberRendererMixin {
@Inject(method = "render(Lnet/minecraft/entity/FishingBobberEntity;DDDFF)V", at = @At("HEAD"), cancellable = true)
private void sarcio$delayBobberRendering(FishingBobberEntity entity, double dx, double dy, double dz, float yaw, float tickDelta, CallbackInfo ci) {
if (entity.ticks < 2 && dx * dx + dy * dy + dz * dz < 12.25) {
ci.cancel();
}
}

@Inject(method = "render(Lnet/minecraft/entity/FishingBobberEntity;DDDFF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/platform/GlStateManager;translatef(FFF)V"))
private void sarcio$restoreAlpha(FishingBobberEntity entity, double x, double y, double z, float entityYaw, float partialTicks, CallbackInfo ci) {
GlStateManager.enableAlphaTest();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package dev.rdh.sarcio.mixin.bugfix.render.entity;

import net.minecraft.client.render.entity.ItemSpriteRenderer;
import net.minecraft.entity.Entity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(ItemSpriteRenderer.class)
public class ItemSpriteRendererMixin<T extends Entity> {
@Inject(method = "render", at = @At("HEAD"), cancellable = true)
private void sarcio$delayProjectileRendering(T entity, double dx, double dy, double dz, float yaw, float tickDelta, CallbackInfo ci) {
if (entity.ticks < 2 && dx * dx + dy * dy + dz * dz < 12.25) {
ci.cancel();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,9 @@ public class SkullRendererMixin {
GlStateManager.enableBlend();
GlStateManager.blendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO);
}

@Inject(method = "render(FFFLnet/minecraft/util/math/Direction;FILcom/mojang/authlib/GameProfile;I)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/model/Model;render(Lnet/minecraft/entity/Entity;FFFFFF)V", shift = At.Shift.AFTER))
private void sarcio$disableBlending(CallbackInfo ci) {
GlStateManager.disableBlend();
}
}
29 changes: 29 additions & 0 deletions src/main/java/dev/rdh/sarcio/mixin/bugfix/world/WorldMixin.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,44 @@
package dev.rdh.sarcio.mixin.bugfix.world;

import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import dev.rdh.sarcio.SarcioMod;
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
import net.minecraft.block.Block;
import net.minecraft.block.GlassBlock;
import net.minecraft.block.PaneBlock;
import net.minecraft.block.StainedGlassBlock;
import net.minecraft.block.state.BlockState;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.LightType;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

import java.util.Collection;
import java.util.List;

@Mixin(World.class)
public abstract class WorldMixin {
@Shadow public abstract boolean isAreaLoaded(BlockPos center, int radius, boolean allowEmpty);
@Shadow @Final public boolean isClient;
@Unique private int sarcio$range = 17;

@WrapOperation(method = "rayTrace(Lnet/minecraft/util/math/Vec3d;Lnet/minecraft/util/math/Vec3d;ZZZ)Lnet/minecraft/world/HitResult;", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/Block;canRayTrace(Lnet/minecraft/block/state/BlockState;Z)Z"))
private boolean sarcio$cameraIgnoresGlass(Block block, BlockState state, boolean stopOnLiquid, Operation<Boolean> original) {
if (SarcioMod.cameraRayTrace && this.isClient && (block instanceof GlassBlock || block instanceof StainedGlassBlock || block instanceof PaneBlock)) {
return false;
}
return original.call(block, state, stopOnLiquid);
}

@Inject(method = "updateLight", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/profiler/Profiler;push(Ljava/lang/String;)V", ordinal = 0))
private void sarcio$updateRange(LightType lightType, BlockPos pos, CallbackInfoReturnable<Boolean> cir) {
this.sarcio$range = this.isAreaLoaded(pos, 18, false) ? 17 : 15;
Expand All @@ -30,4 +53,10 @@ public abstract class WorldMixin {
private int setVariableRange(int original) {
return this.sarcio$range;
}

@SuppressWarnings("SuspiciousMethodCalls")
@Redirect(method = "tickEntities", at = @At(value = "INVOKE", target = "Ljava/util/List;removeAll(Ljava/util/Collection;)Z"))
private boolean sarcio$hashRemoveAll(List<?> list, Collection<?> removed) {
return !removed.isEmpty() && list.removeAll(new ObjectOpenHashSet<>(removed));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

@Mixin({ClientPlayNetworkHandler.class, ServerPlayNetworkHandler.class})
public class NetHandlerPlayMixin {
@WrapMethod(method = {"handleCustomPayload", "processVanilla250Packet"})
@WrapMethod(method = "handleCustomPayload")
private void releaseCustomPayload(@Coerce Packet<?> packet, Operation<Void> original) {
original.call(packet);
PacketByteBuf data = switch (packet) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@

@Mixin(targets = "net.minecraft.network.PacketUtils$48215440")
abstract class PacketThreadUtilRunnableMixin {
@Shadow(remap = false, aliases = "f_54564080") @Final private Packet<?> packet;
@Shadow(remap = false) @Final private Packet<?> f_54564080; // packet, unnamed in feather

@Inject(method = "run", at = @At("HEAD"), cancellable = true)
private void dropPacketsWithoutWorld(CallbackInfo ci) {
if (Minecraft.getInstance().world == null && !(this.packet instanceof LoginS2CPacket)) {
if (Minecraft.getInstance().world == null && !(this.f_54564080 instanceof LoginS2CPacket)) {
ci.cancel();
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package dev.rdh.sarcio.mixin.textures;

import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;

@Mixin(targets = "net.minecraft.client.render.texture.HttpTexture$34366662")
abstract class HttpTextureDownloaderMixin {
@WrapOperation(method = "run", at = @At(value = "INVOKE", target = "Ljava/net/URL;openConnection(Ljava/net/Proxy;)Ljava/net/URLConnection;"))
private URLConnection addTimeouts(URL url, Proxy proxy, Operation<URLConnection> original) {
URLConnection connection = original.call(url, proxy);
connection.setConnectTimeout(10_000);
connection.setReadTimeout(10_000);
return connection;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package dev.rdh.sarcio.mixin.tweaks;

import com.llamalad7.mixinextras.injector.v2.WrapWithCondition;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.network.handler.ClientPlayNetworkHandler;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;

@Mixin(ClientPlayNetworkHandler.class)
public class ClientPlayNetworkHandlerMixin {
@WrapWithCondition(method = "handlePlayerRespawn", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;openScreen(Lnet/minecraft/client/gui/screen/Screen;)V"))
private boolean sarcio$skipTerrainScreen(Minecraft instance, Screen screen) {
return false;
}
}
7 changes: 7 additions & 0 deletions src/main/java/dev/rdh/sarcio/mixin/tweaks/MinecraftMixin.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package dev.rdh.sarcio.mixin.tweaks;

import net.minecraft.client.Minecraft;
import net.minecraft.client.render.ProgressRenderer;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.twitch.ErrorTwitchStream;
import net.minecraft.client.twitch.TwitchStream;
Expand Down Expand Up @@ -34,4 +36,9 @@ public class MinecraftMixin {
private boolean sarcio$removeStreamCalls(TwitchStream instance) {
return false;
}

@WrapWithCondition(method = "setWorld(Lnet/minecraft/client/world/ClientWorld;Ljava/lang/String;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/ProgressRenderer;progressStage(Ljava/lang/String;)V"))
private boolean sarcio$skipWorldSwapProgress(ProgressRenderer instance, String message, ClientWorld world) {
return world == null;
}
}
1 change: 1 addition & 0 deletions src/main/resources/sarcio.classtweaker
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ classTweaker v2 named

accessible field net/minecraft/client/options/KeyBinding ALL Ljava/util/List;
accessible class net/minecraft/client/render/block/entity/BannerRenderer$CachedTexture
accessible class net/minecraft/client/gui/screen/menu/options/LanguageOptionsScreen$LanguageSelectionListWidget
Loading