diff --git a/build.gradle b/build.gradle index 02dd294ff..aebaf288f 100644 --- a/build.gradle +++ b/build.gradle @@ -293,6 +293,7 @@ project(':forge') { installer 'net.minecraftforge:eventbus:0.7.+:service' installer 'net.minecraftforge:forgespi:0.6.+' installer 'net.minecraftforge:coremods:0.3.+' + installer 'net.minecraftforge:unsafe:0.2.+' installer 'com.electronwill.night-config:core:3.4.2' installer 'com.electronwill.night-config:toml:3.4.2' installer 'org.jline:jline:3.9.0' diff --git a/src/main/java/net/minecraftforge/fml/UnsafeHacks.java b/src/main/java/net/minecraftforge/fml/UnsafeHacks.java deleted file mode 100644 index b09e6b663..000000000 --- a/src/main/java/net/minecraftforge/fml/UnsafeHacks.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Minecraft Forge - * Copyright (c) 2016-2019. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -package net.minecraftforge.fml; - -import java.lang.reflect.Field; -import java.util.Optional; - -import sun.misc.Unsafe; - -@SuppressWarnings("restriction") -public class UnsafeHacks -{ - private static final Unsafe UNSAFE; - static - { - try - { - final Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe"); - theUnsafe.setAccessible(true); - UNSAFE = (Unsafe)theUnsafe.get(null); - } - catch (IllegalAccessException | NoSuchFieldException e) - { - throw new RuntimeException("BARF!", e); - } - } - - @SuppressWarnings("unchecked") - public static T newInstance(Class clazz) - { - try - { - return (T) UNSAFE.allocateInstance(clazz); - } - catch (InstantiationException e) - { - throw new RuntimeException(e); - } - } - - @SuppressWarnings("unchecked") - public static T getField(Field field, Object object) - { - final long l = UNSAFE.objectFieldOffset(field); - return (T) UNSAFE.getObject(object, l); - } - - public static void setField(Field data, Object object, Object value) - { - long offset = UNSAFE.objectFieldOffset(data); - UNSAFE.putObject(object, offset, value); - } - - public static int getIntField(Field f, Object obj) - { - long offset = UNSAFE.objectFieldOffset(f); - return UNSAFE.getInt(obj, offset); - } - - public static void setIntField(Field data, Object object, int value) - { - long offset = UNSAFE.objectFieldOffset(data); - UNSAFE.putInt(object, offset, value); - } - - // Make sure we don't crash if any future versions change field names - private static Optional findField(Class clazz, String name) - { - for (Field f : clazz.getDeclaredFields()) - { - if (f.getName().equals(name)) - { - return Optional.of(f); - } - } - return Optional.empty(); - } - - public static void cleanEnumCache(Class> enumClass) throws Exception - { - findField(Class.class, "enumConstantDirectory").ifPresent(f -> setField(f, enumClass, null)); - findField(Class.class, "enumConstants").ifPresent(f -> setField(f, enumClass, null)); - } -} diff --git a/src/main/java/net/minecraftforge/fml/network/ICustomPacket.java b/src/main/java/net/minecraftforge/fml/network/ICustomPacket.java index 6317ebbdf..60ecaac06 100644 --- a/src/main/java/net/minecraftforge/fml/network/ICustomPacket.java +++ b/src/main/java/net/minecraftforge/fml/network/ICustomPacket.java @@ -19,7 +19,6 @@ package net.minecraftforge.fml.network; -import io.netty.buffer.Unpooled; import it.unimi.dsi.fastutil.objects.Reference2ReferenceArrayMap; import net.minecraft.network.Packet; import net.minecraft.network.PacketBuffer; @@ -28,14 +27,13 @@ import net.minecraft.network.login.server.SPacketCustomPayloadLogin; import net.minecraft.network.play.client.CPacketCustomPayload; import net.minecraft.network.play.server.SPacketCustomPayload; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.UnsafeHacks; +import net.minecraftforge.fml.unsafe.UnsafeHacks; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.Arrays; import java.util.Optional; import java.util.function.Function; -import java.util.function.Supplier; import java.util.stream.Collectors; import java.util.stream.Stream; diff --git a/src/main/java/net/minecraftforge/fml/network/NetworkDirection.java b/src/main/java/net/minecraftforge/fml/network/NetworkDirection.java index 4c6d1342a..9a5160518 100644 --- a/src/main/java/net/minecraftforge/fml/network/NetworkDirection.java +++ b/src/main/java/net/minecraftforge/fml/network/NetworkDirection.java @@ -28,7 +28,7 @@ import net.minecraft.network.play.client.CPacketCustomPayload; import net.minecraft.network.play.server.SPacketCustomPayload; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.fml.UnsafeHacks; +import net.minecraftforge.fml.unsafe.UnsafeHacks; import org.apache.commons.lang3.tuple.Pair; import java.util.function.BiFunction;