Fixes scripts

This commit is contained in:
Sotr
2018-06-11 17:16:04 +08:00
parent 0f00949e6f
commit 3a1e04cfbb
3 changed files with 29 additions and 21 deletions

View File

@@ -34,6 +34,9 @@ echo "[Akarin] Ready to build"
echo "[Akarin] Test has been skipped"
mvn clean install -DskipTests
else
rm -rf Paper-API/src
rm -rf Paper-Server/src
./paper patch
mvn clean install
fi

View File

@@ -24,6 +24,7 @@
*/
package io.akarin.server.mixin.optimization;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
@@ -40,51 +41,55 @@ import net.minecraft.server.ItemStack;
*/
@Mixin(value = EnchantmentManager.class, remap = false)
public class WeakEnchantmentManager {
@Shadow(aliases = "a") @Final private static EnchantmentManager.EnchantmentModifierProtection protection;
@Shadow(aliases = "c") @Final private static EnchantmentManager.EnchantmentModifierThorns thorns;
@Shadow(aliases = "d") @Final private static EnchantmentManager.EnchantmentModifierArthropods arthropods;
@Shadow(aliases = "a") private static void applyEnchantmentModifierArray(EnchantmentManager.EnchantmentModifier modifier, Iterable<ItemStack> iterable) {}
@Shadow(aliases = "a") private static void applyEnchantmentModifier(EnchantmentManager.EnchantmentModifier modifier, ItemStack itemstack) {}
@Overwrite
public static int a(Iterable<ItemStack> iterable, DamageSource damageSource) {
EnchantmentManager.a.a = 0; // PAIL: damageModifier
EnchantmentManager.a.b = damageSource;
applyEnchantmentModifierArray(EnchantmentManager.a, iterable);
EnchantmentManager.a.b = null; // Akarin - Remove reference to Damagesource
return EnchantmentManager.a.a;
protection.a = 0; // PAIL: damageModifier
protection.b = damageSource;
applyEnchantmentModifierArray(protection, iterable);
protection.b = null; // Akarin - Remove reference to Damagesource
return protection.a;
}
@Overwrite
public static void a(EntityLiving user, Entity attacker) { // PAIL: applyThornEnchantments
EnchantmentManager.c.b = attacker;
EnchantmentManager.c.a = user;
thorns.b = attacker;
thorns.a = user;
if (user != null) {
applyEnchantmentModifierArray(EnchantmentManager.c, user.aQ()); // PAIL: getEquipmentAndArmor
applyEnchantmentModifierArray(thorns, user.aQ()); // PAIL: getEquipmentAndArmor
}
if (attacker instanceof EntityHuman) {
applyEnchantmentModifier(EnchantmentManager.c, user.getItemInMainHand());
applyEnchantmentModifier(thorns, user.getItemInMainHand());
}
// Akarin Start - remove references to entity objects to avoid memory leaks
EnchantmentManager.c.b = null;
EnchantmentManager.c.a = null;
thorns.b = null;
thorns.a = null;
// Akarin end
}
@Overwrite
public static void b(EntityLiving user, Entity target) { // PAIL: applyArthropodEnchantments
EnchantmentManager.d.a = user;
EnchantmentManager.d.b = target;
arthropods.a = user;
arthropods.b = target;
if (user != null) {
applyEnchantmentModifierArray(EnchantmentManager.d, user.aQ()); // PAIL: getEquipmentAndArmor
applyEnchantmentModifierArray(arthropods, user.aQ()); // PAIL: getEquipmentAndArmor
}
if (user instanceof EntityHuman) {
applyEnchantmentModifier(EnchantmentManager.d, user.getItemInMainHand());
applyEnchantmentModifier(arthropods, user.getItemInMainHand());
}
// Akarin Start - remove references to entity objects to avoid memory leaks
EnchantmentManager.d.a = null;
EnchantmentManager.d.b = null;
arthropods.a = null;
arthropods.b = null;
// Akarin end
}
}

View File

@@ -18,10 +18,10 @@ import java.util.Map.Entry;
*/
public class EnchantmentManager {
public static final EnchantmentManager.EnchantmentModifierProtection a = new EnchantmentManager.EnchantmentModifierProtection(null); // Akarin - private -> public
private static final EnchantmentManager.EnchantmentModifierProtection a = new EnchantmentManager.EnchantmentModifierProtection(null);
private static final EnchantmentManager.EnchantmentModifierDamage b = new EnchantmentManager.EnchantmentModifierDamage(null);
public static final EnchantmentManager.EnchantmentModifierThorns c = new EnchantmentManager.EnchantmentModifierThorns(null); // Akarin - private -> public
public static final EnchantmentManager.EnchantmentModifierArthropods d = new EnchantmentManager.EnchantmentModifierArthropods(null); // Akarin - private -> public
private static final EnchantmentManager.EnchantmentModifierThorns c = new EnchantmentManager.EnchantmentModifierThorns(null);
private static final EnchantmentManager.EnchantmentModifierArthropods d = new EnchantmentManager.EnchantmentModifierArthropods(null);
public static int getEnchantmentLevel(Enchantment enchantment, ItemStack itemstack) {
if (itemstack.isEmpty()) {