From a4888c198201884da706495d70f53c2b49696965 Mon Sep 17 00:00:00 2001
From: YuRaNnNzZZ <medved609@yandex.ru>
Date: Sun, 7 May 2023 02:08:53 +0300
Subject: [PATCH] =?UTF-8?q?DBotThePony=20=E2=80=94=20=D0=92=D1=87=D0=B5?=
 =?UTF-8?q?=D1=80=D0=B0,=20=D0=B2=2016:20=20:umer:=20=D0=92=D0=BE=D0=BF?=
 =?UTF-8?q?=D1=80=D0=BE=D1=81=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20?=
 =?UTF-8?q?=D0=B2=20=D1=82=D0=BE=D0=BC,=20=D0=B0=20=D0=BF=D0=BE=D1=87?=
 =?UTF-8?q?=D0=B5=D0=BC=D1=83=20=D0=BD=D0=B5=20=D0=BF=D0=B5=D1=80=D0=B5?=
 =?UTF-8?q?=D0=BC=D0=B5=D1=81=D1=82=D0=B8=D1=82=D1=8C=20=D1=82=D0=B8=D0=BF?=
 =?UTF-8?q?=D0=B8=D1=87=D0=BD=D1=8B=D0=B5=20=D0=BF=D0=B0=D1=82=D1=87=D0=B8?=
 =?UTF-8?q?=20=D0=B2=20mixin?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

----------
ну и починил /clear для экзокостюма
---
 .../mc/otm/mixin/MixinGameRenderer.java       | 22 ++++++
 .../mc/otm/mixin/MixinInventory.java          | 38 +++++++++++
 .../dbotthepony/mc/otm/mixin/MixinPlayer.java | 19 ++++++
 src/main/resources/coremods/code_injector.js  | 67 -------------------
 .../overdrive_that_matters.mixins.json        |  6 +-
 5 files changed, 84 insertions(+), 68 deletions(-)
 create mode 100644 src/main/java/ru/dbotthepony/mc/otm/mixin/MixinGameRenderer.java
 create mode 100644 src/main/java/ru/dbotthepony/mc/otm/mixin/MixinPlayer.java

diff --git a/src/main/java/ru/dbotthepony/mc/otm/mixin/MixinGameRenderer.java b/src/main/java/ru/dbotthepony/mc/otm/mixin/MixinGameRenderer.java
new file mode 100644
index 000000000..02c823a2d
--- /dev/null
+++ b/src/main/java/ru/dbotthepony/mc/otm/mixin/MixinGameRenderer.java
@@ -0,0 +1,22 @@
+package ru.dbotthepony.mc.otm.mixin;
+
+import net.minecraft.client.renderer.GameRenderer;
+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;
+import ru.dbotthepony.mc.otm.client.render.GlitchRenderer;
+
+@Mixin(GameRenderer.class)
+public class MixinGameRenderer {
+	@Inject(
+		method = "render(FJZ)V",
+		at = @At(
+			value = "INVOKE",
+			target = "Lcom/mojang/blaze3d/pipeline/RenderTarget;bindWrite(Z)V"
+		)
+	)
+	private void render(float p_109094_, long p_109095_, boolean p_109096_, CallbackInfo ci) {
+		GlitchRenderer.render();
+	}
+}
diff --git a/src/main/java/ru/dbotthepony/mc/otm/mixin/MixinInventory.java b/src/main/java/ru/dbotthepony/mc/otm/mixin/MixinInventory.java
index a8f494406..981e1f8cd 100644
--- a/src/main/java/ru/dbotthepony/mc/otm/mixin/MixinInventory.java
+++ b/src/main/java/ru/dbotthepony/mc/otm/mixin/MixinInventory.java
@@ -3,6 +3,8 @@ package ru.dbotthepony.mc.otm.mixin;
 import net.minecraft.CrashReport;
 import net.minecraft.CrashReportCategory;
 import net.minecraft.ReportedException;
+import net.minecraft.world.Container;
+import net.minecraft.world.ContainerHelper;
 import net.minecraft.world.entity.player.Inventory;
 import net.minecraft.world.entity.player.Player;
 import net.minecraft.world.item.Item;
@@ -12,8 +14,12 @@ 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.callback.CallbackInfo;
 import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
 import ru.dbotthepony.mc.otm.capability.MatteryCapability;
+import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability;
+
+import java.util.function.Predicate;
 
 @Mixin(Inventory.class)
 public class MixinInventory {
@@ -46,4 +52,36 @@ public class MixinInventory {
 			});
 		}
 	}
+
+	@Inject(
+		method = "dropAll()V",
+		at = @At("TAIL")
+	)
+	private void dropAll(CallbackInfo ci) {
+		MatteryPlayerCapability.inventoryDropAll((Inventory)(Object)this);
+	}
+
+	@Inject(
+		method = "clearContent()V",
+		at = @At("TAIL")
+	)
+	private void clearContent(CallbackInfo ci) {
+		MatteryPlayerCapability.inventoryClearContent((Inventory)(Object)this);
+	}
+
+	@Inject(
+		method = "clearOrCountMatchingItems(Ljava/util/function/Predicate;ILnet/minecraft/world/Container;)I",
+		at = @At("RETURN"),
+		cancellable = true
+	)
+	private void clearOrCountMatchingItems(Predicate<ItemStack> predicate, int count, Container container, CallbackInfoReturnable<Integer> cir) {
+		player.getCapability(MatteryCapability.MATTERY_PLAYER).ifPresent(it -> {
+			if (!it.getHasExoPack()) return;
+
+			int i = cir.getReturnValue();
+			i += ContainerHelper.clearOrCountMatchingItems(it.getExoPackContainer(), predicate, count - i, count == 0);
+
+			cir.setReturnValue(i);
+		});
+	}
 }
diff --git a/src/main/java/ru/dbotthepony/mc/otm/mixin/MixinPlayer.java b/src/main/java/ru/dbotthepony/mc/otm/mixin/MixinPlayer.java
new file mode 100644
index 000000000..1e112bcde
--- /dev/null
+++ b/src/main/java/ru/dbotthepony/mc/otm/mixin/MixinPlayer.java
@@ -0,0 +1,19 @@
+package ru.dbotthepony.mc.otm.mixin;
+
+import net.minecraft.world.entity.player.Player;
+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;
+import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability;
+
+@Mixin(Player.class)
+public class MixinPlayer {
+	@Inject(
+		method = "destroyVanishingCursedItems()V",
+		at = @At("TAIL")
+	)
+	private void destroyVanishingCursedItems(CallbackInfo ci) {
+		MatteryPlayerCapability.playerDestroyVanishingCursedItems((Player)(Object)this);
+	}
+}
diff --git a/src/main/resources/coremods/code_injector.js b/src/main/resources/coremods/code_injector.js
index 024edf0de..77b59d722 100644
--- a/src/main/resources/coremods/code_injector.js
+++ b/src/main/resources/coremods/code_injector.js
@@ -621,30 +621,6 @@ function initializeCoreMod() {
 			return node
 		}),
 
-		'Inventory#dropAll': injectAtTail(
-			'net.minecraft.world.entity.player.Inventory.m_36071_()V',
-			[
-				new VarInsnNode(opcodesRemapped.aload, 0),
-				new MethodInsnNode(opcodesRemapped.invokestatic, 'ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability', 'inventoryDropAll', '(Lnet/minecraft/world/entity/player/Inventory;)V', false)
-			]
-		),
-
-		'Inventory#clearContent': injectAtTail(
-			'net.minecraft.world.entity.player.Inventory.m_6211_()V',
-			[
-				new VarInsnNode(opcodesRemapped.aload, 0),
-				new MethodInsnNode(opcodesRemapped.invokestatic, 'ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability', 'inventoryClearContent', '(Lnet/minecraft/world/entity/player/Inventory;)V', false)
-			]
-		),
-
-		'Player#destroyVanishingCursedItems': injectAtTail(
-			'net.minecraft.world.entity.player.Player.m_36345_()V',
-			[
-				new VarInsnNode(opcodesRemapped.aload, 0),
-				new MethodInsnNode(opcodesRemapped.invokestatic, 'ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability', 'playerDestroyVanishingCursedItems', '(Lnet/minecraft/world/entity/player/Player;)V', false)
-			]
-		),
-
 		'blend func lock 1': {
 			'target': {
 				'type': 'METHOD',
@@ -773,49 +749,6 @@ function initializeCoreMod() {
 				return node
 			}),
 
-		'GameRenderer#render hook': {
-			'target': {
-				'type': 'METHOD',
-				'class': 'net.minecraft.client.renderer.GameRenderer',
-				'methodName': ASMAPI.mapMethod('m_109093_'), // render
-				'methodDesc': '(FJZ)V'
-			},
-
-			'transformer': function(node) {
-                // 288: invokevirtual #3558               // Method net/minecraft/client/renderer/PostChain.process:(F)V
-                // 291: aload_0
-                // 292: getfield      #2773               // Field minecraft:Lnet/minecraft/client/Minecraft;
-                // 295: invokevirtual #2818               // Method net/minecraft/client/Minecraft.getMainRenderTarget:()Lcom/mojang/blaze3d/pipeline/RenderTarget;
-                // 298: iconst_1
-                // 299: invokevirtual #3561               // Method com/mojang/blaze3d/pipeline/RenderTarget.bindWrite:(Z)V
-                // <-- our target
-                // 302: aload_0
-                // 303: getfield      #2773               // Field minecraft:Lnet/minecraft/client/Minecraft;
-                // 306: invokevirtual #2821               // Method net/minecraft/client/Minecraft.getWindow:()Lcom/mojang/blaze3d/platform/Window;
-                // 309: astore        7
-
-				var ourmethod = ASMAPI.mapMethod('m_83947_') // bindWrite
-
-                for (var i = 0; i < node.instructions.size(); i++) {
-					var instruction = node.instructions.get(i)
-
-					if (instruction.getOpcode() == opcodesRemapped.invokevirtual && instruction.name == ourmethod && instruction.desc == '(Z)V') {
-						node.instructions.insert(instruction, new MethodInsnNode(
-							opcodesRemapped.invokestatic,
-							'ru/dbotthepony/mc/otm/client/render/GlitchRenderer',
-							'render',
-							'()V',
-							false
-						))
-
-						break
-					}
-				}
-
-				return node
-			}
-		},
-
 		'LevelRenderer DynamicBufferSource callback': {
 			'target': {
 				'type': 'METHOD',
diff --git a/src/main/resources/overdrive_that_matters.mixins.json b/src/main/resources/overdrive_that_matters.mixins.json
index 0e6d46af9..42c121a52 100644
--- a/src/main/resources/overdrive_that_matters.mixins.json
+++ b/src/main/resources/overdrive_that_matters.mixins.json
@@ -11,6 +11,10 @@
     "MixinLivingEntity",
     "MixinAnvilBlock",
     "MixinInventory",
-    "MixinAbstractHurtingProjectile"
+    "MixinAbstractHurtingProjectile",
+    "MixinPlayer"
+  ],
+  "client": [
+    "MixinGameRenderer"
   ]
 }