Search in sources :

Example 41 with OnlyIn

use of net.minecraftforge.api.distmarker.OnlyIn in project MinecraftForge by MinecraftForge.

the class RuntimeDistCleaner method processClassWithFlags.

@Override
public int processClassWithFlags(final Phase phase, final ClassNode classNode, final Type classType, final String reason) {
    AtomicBoolean changes = new AtomicBoolean();
    if (remove(classNode.visibleAnnotations, DIST)) {
        LOGGER.fatal(DISTXFORM, "Attempted to load class {} for invalid dist {}", classNode.name, DIST);
        throw new RuntimeException("Attempted to load class " + classNode.name + " for invalid dist " + DIST);
    }
    if (classNode.interfaces != null) {
        unpack(classNode.visibleAnnotations).stream().filter(ann -> Objects.equals(ann.desc, ONLYIN)).filter(ann -> ann.values.indexOf("_interface") != -1).filter(ann -> !Objects.equals(((String[]) ann.values.get(ann.values.indexOf("value") + 1))[1], DIST)).map(ann -> ((Type) ann.values.get(ann.values.indexOf("_interface") + 1)).getInternalName()).forEach(intf -> {
            if (classNode.interfaces.remove(intf)) {
                LOGGER.debug(DISTXFORM, "Removing Interface: {} implements {}", classNode.name, intf);
                changes.compareAndSet(false, true);
            }
        });
        // Remove Class level @OnlyIn/@OnlyIns annotations, this is important if anyone gets ambitious and tries to reflect an annotation with _interface set.
        if (classNode.visibleAnnotations != null) {
            Iterator<AnnotationNode> itr = classNode.visibleAnnotations.iterator();
            while (itr.hasNext()) {
                AnnotationNode ann = itr.next();
                if (Objects.equals(ann.desc, ONLYIN) || Objects.equals(ann.desc, ONLYINS)) {
                    LOGGER.debug(DISTXFORM, "Removing Class Annotation: {} @{}", classNode.name, ann.desc);
                    itr.remove();
                    changes.compareAndSet(false, true);
                }
            }
        }
    }
    Iterator<FieldNode> fields = classNode.fields.iterator();
    while (fields.hasNext()) {
        FieldNode field = fields.next();
        if (remove(field.visibleAnnotations, DIST)) {
            LOGGER.debug(DISTXFORM, "Removing field: {}.{}", classNode.name, field.name);
            fields.remove();
            changes.compareAndSet(false, true);
        }
    }
    LambdaGatherer lambdaGatherer = new LambdaGatherer();
    Iterator<MethodNode> methods = classNode.methods.iterator();
    while (methods.hasNext()) {
        MethodNode method = methods.next();
        if (remove(method.visibleAnnotations, DIST)) {
            LOGGER.debug(DISTXFORM, "Removing method: {}.{}{}", classNode.name, method.name, method.desc);
            methods.remove();
            lambdaGatherer.accept(method);
            changes.compareAndSet(false, true);
        }
    }
    // remove dynamic synthetic lambda methods that are inside of removed methods
    for (List<Handle> dynamicLambdaHandles = lambdaGatherer.getDynamicLambdaHandles(); !dynamicLambdaHandles.isEmpty(); dynamicLambdaHandles = lambdaGatherer.getDynamicLambdaHandles()) {
        lambdaGatherer = new LambdaGatherer();
        methods = classNode.methods.iterator();
        while (methods.hasNext()) {
            MethodNode method = methods.next();
            if ((method.access & Opcodes.ACC_SYNTHETIC) == 0)
                continue;
            for (Handle dynamicLambdaHandle : dynamicLambdaHandles) {
                if (method.name.equals(dynamicLambdaHandle.getName()) && method.desc.equals(dynamicLambdaHandle.getDesc())) {
                    LOGGER.debug(DISTXFORM, "Removing lambda method: {}.{}{}", classNode.name, method.name, method.desc);
                    methods.remove();
                    lambdaGatherer.accept(method);
                    changes.compareAndSet(false, true);
                }
            }
        }
    }
    return changes.get() ? ComputeFlags.SIMPLE_REWRITE : ComputeFlags.NO_REWRITE;
}
Also used : AnnotationNode(org.objectweb.asm.tree.AnnotationNode) OnlyIn(net.minecraftforge.api.distmarker.OnlyIn) MethodVisitor(org.objectweb.asm.MethodVisitor) OnlyIns(net.minecraftforge.api.distmarker.OnlyIns) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Type(org.objectweb.asm.Type) ArrayList(java.util.ArrayList) Dist(net.minecraftforge.api.distmarker.Dist) MethodNode(org.objectweb.asm.tree.MethodNode) Marker(org.apache.logging.log4j.Marker) EnumSet(java.util.EnumSet) Opcodes(org.objectweb.asm.Opcodes) Iterator(java.util.Iterator) ILaunchPluginService(cpw.mods.modlauncher.serviceapi.ILaunchPluginService) Streams(com.google.common.collect.Streams) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) Consumer(java.util.function.Consumer) Handle(org.objectweb.asm.Handle) List(java.util.List) MarkerManager(org.apache.logging.log4j.MarkerManager) Logger(org.apache.logging.log4j.Logger) AbstractInsnNode(org.objectweb.asm.tree.AbstractInsnNode) FieldNode(org.objectweb.asm.tree.FieldNode) ClassNode(org.objectweb.asm.tree.ClassNode) Collections(java.util.Collections) LogManager(org.apache.logging.log4j.LogManager) FieldNode(org.objectweb.asm.tree.FieldNode) Handle(org.objectweb.asm.Handle) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Type(org.objectweb.asm.Type) MethodNode(org.objectweb.asm.tree.MethodNode) AnnotationNode(org.objectweb.asm.tree.AnnotationNode)

Example 42 with OnlyIn

use of net.minecraftforge.api.distmarker.OnlyIn in project NetherEx by LogicTechCorp.

the class NetherEx method onRegisterItemColor.

@OnlyIn(Dist.CLIENT)
private void onRegisterItemColor(ColorHandlerEvent.Item event) {
    ItemColors colors = event.getItemColors();
    NetherExItems.getItems().forEach(registryObject -> {
        registryObject.ifPresent(item -> {
            if (item instanceof ModSpawnEggItem) {
                colors.register((color, index) -> ((ModSpawnEggItem) item).getColor(index), item);
            }
        });
    });
}
Also used : ItemColors(net.minecraft.client.renderer.color.ItemColors) ModSpawnEggItem(logictechcorp.libraryex.item.ModSpawnEggItem) OnlyIn(net.minecraftforge.api.distmarker.OnlyIn)

Example 43 with OnlyIn

use of net.minecraftforge.api.distmarker.OnlyIn in project NetherEx by LogicTechCorp.

the class NetherEx method onClientSetup.

@OnlyIn(Dist.CLIENT)
private void onClientSetup(FMLClientSetupEvent event) {
    RenderType cutout = RenderType.getCutout();
    RenderTypeLookup.setRenderLayer(NetherExBlocks.QUARTZ_ORE.get(), cutout);
    RenderTypeLookup.setRenderLayer(NetherExBlocks.THORNSTALK.get(), cutout);
    RenderTypeLookup.setRenderLayer(NetherExBlocks.BROWN_ELDER_MUSHROOM.get(), cutout);
    RenderTypeLookup.setRenderLayer(NetherExBlocks.RED_ELDER_MUSHROOM.get(), cutout);
    RenderTypeLookup.setRenderLayer(NetherExBlocks.ENOKI_MUSHROOM_CAP.get(), cutout);
    RenderTypeLookup.setRenderLayer(NetherExBlocks.ENOKI_MUSHROOM_STEM.get(), cutout);
    RenderTypeLookup.setRenderLayer(NetherExBlocks.BLUE_FIRE.get(), cutout);
    RenderTypeLookup.setRenderLayer(NetherExBlocks.ENOKI_MUSHROOM_CAP.get(), cutout);
    RenderTypeLookup.setRenderLayer(NetherExBlocks.ENOKI_MUSHROOM_STEM.get(), cutout);
    RenderType translucent = RenderType.getTranslucent();
    RenderTypeLookup.setRenderLayer(NetherExBlocks.FROSTBURN_ICE.get(), translucent);
    RenderTypeLookup.setRenderLayer(NetherExBlocks.SOUL_GLASS.get(), translucent);
    RenderTypeLookup.setRenderLayer(NetherExBlocks.SOUL_GLASS_PANE.get(), translucent);
    RenderingRegistry.registerEntityRenderingHandler(NetherExEntityTypes.MOGUS.get(), MogusRenderer::new);
    RenderingRegistry.registerEntityRenderingHandler(NetherExEntityTypes.SALAMANDER.get(), SalamanderRenderer::new);
    RenderingRegistry.registerEntityRenderingHandler(NetherExEntityTypes.SPINOUT.get(), SpinoutRenderer::new);
    RenderingRegistry.registerEntityRenderingHandler(NetherExEntityTypes.SPORE.get(), SporeRenderer::new);
    RenderingRegistry.registerEntityRenderingHandler(NetherExEntityTypes.SPORE_CREEPER.get(), SporeCreeperRenderer::new);
    RenderingRegistry.registerEntityRenderingHandler(NetherExEntityTypes.WIGHT.get(), WightRenderer::new);
    RenderingRegistry.registerEntityRenderingHandler(NetherExEntityTypes.COOLMAR_SPIDER.get(), CoolmarSpiderRenderer::new);
}
Also used : RenderType(net.minecraft.client.renderer.RenderType) OnlyIn(net.minecraftforge.api.distmarker.OnlyIn)

Example 44 with OnlyIn

use of net.minecraftforge.api.distmarker.OnlyIn in project Geolosys by oitsjustjose.

the class GeolosysGroup method getIcon.

@OnlyIn(Dist.CLIENT)
public ItemStack getIcon() {
    // Init the anim only when the first ore is init'd
    if (Ores.COAL.getBlock() != null && counter == -1) {
        counter = 0;
    }
    if (System.currentTimeMillis() - lastTick > 1000L) {
        display = new ItemStack(Ores.values()[counter].getBlock());
        counter = counter == (Ores.values().length - 1) ? 0 : counter + 1;
        lastTick = System.currentTimeMillis();
    }
    return display;
}
Also used : ItemStack(net.minecraft.item.ItemStack) OnlyIn(net.minecraftforge.api.distmarker.OnlyIn)

Example 45 with OnlyIn

use of net.minecraftforge.api.distmarker.OnlyIn in project Geolosys by oitsjustjose.

the class PacketStackSurface method handleClient.

@OnlyIn(Dist.CLIENT)
public static void handleClient(PacketStackSurface msg, Supplier<NetworkEvent.Context> context) {
    if (context.get().getDirection().getReceptionSide() == LogicalSide.CLIENT) {
        context.get().enqueueWork(() -> {
            Minecraft mc = Minecraft.getInstance();
            sendProspectingMessage(mc.player, PacketHelpers.messagify(msg.blocks));
        });
    }
    context.get().setPacketHandled(true);
}
Also used : Minecraft(net.minecraft.client.Minecraft) OnlyIn(net.minecraftforge.api.distmarker.OnlyIn)

Aggregations

OnlyIn (net.minecraftforge.api.distmarker.OnlyIn)45 ResourceLocation (net.minecraft.util.ResourceLocation)23 ModelResourceLocation (net.minecraft.client.renderer.model.ModelResourceLocation)17 Minecraft (net.minecraft.client.Minecraft)5 ResizeableTextureGenerator (com.cjm721.overloaded.client.render.dynamic.general.ResizeableTextureGenerator)3 StringTextComponent (net.minecraft.util.text.StringTextComponent)3 TranslationTextComponent (net.minecraft.util.text.TranslationTextComponent)3 CompoundNBT (net.minecraft.nbt.CompoundNBT)2 AxisAlignedBB (net.minecraft.util.math.AxisAlignedBB)2 BlockPos (net.minecraft.util.math.BlockPos)2 Vector3d (net.minecraft.util.math.vector.Vector3d)2 SubscribeEvent (net.minecraftforge.eventbus.api.SubscribeEvent)2 BlockBPMultipart (com.bluepowermod.block.BlockBPMultipart)1 RailGunFireMessage (com.cjm721.overloaded.network.packets.RailGunFireMessage)1 Streams (com.google.common.collect.Streams)1 MinecraftProfileTexture (com.mojang.authlib.minecraft.MinecraftProfileTexture)1 Type (com.mojang.authlib.minecraft.MinecraftProfileTexture.Type)1 IVertexBuilder (com.mojang.blaze3d.vertex.IVertexBuilder)1 ILaunchPluginService (cpw.mods.modlauncher.serviceapi.ILaunchPluginService)1 ArrayList (java.util.ArrayList)1