Иконка ресурса

Вырезалка 2

tox1cozZ

aka Agravaine
Модератор
Сообщения
7,031
Лучшие ответы
438
Реакции
2,074
У меня свой майнкрафт с блэкджеком и... 14 джавой :ROFLMAO:
Да и я shadowJar делаю с библиотеками, а у них там классы скомпиленные под >8 джавой, ну и ломается все равно.
Сделать бы по-хорошему возможность указать какой-то фильтр для классов, можно регулярку какую-то, чтобы в таких случаях только мои классы обрабатывались.
 

tox1cozZ

aka Agravaine
Модератор
Сообщения
7,031
Лучшие ответы
438
Реакции
2,074
Юрааааа!!! Пожалуйста сделай фильтр для классов, у меня fatJar на 35 метров, который мало того что долго обрабатывается, так еще и на библиотечных классах ломается
 
Сообщения
1,057
Лучшие ответы
36
Реакции
436
Тов. @JustAGod, а почему аннотации @GradleSideOnly сохраняются в jar'никах? Всм. зачем они вообще нужны в готовом билде?
 

tox1cozZ

aka Agravaine
Модератор
Сообщения
7,031
Лучшие ответы
438
Реакции
2,074
Есть же параметр removeAnnotations, который убирает это.
P.S Юра ну куда ты пропал ну капец
 
Сообщения
927
Лучшие ответы
27
Реакции
184
Сам факт добавления вырезалки вызывает краш(никаких аннотаций не ставила и ничего не меняла):
Gradle (Groovy):
buildscript {
    repositories {
        jcenter()
        maven { url = "http://files.minecraftforge.net/maven" }
        mavenCentral()
        maven {
            name = "sonatype"
            url = "https://oss.sonatype.org/content/repositories/snapshots/"
        }
    }
    dependencies {
        classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
        classpath 'tech.justagod:cutter:2.1.0-SNAPSHOT'
    }
}
apply plugin: 'cutter'
apply plugin: 'net.minecraftforge.gradle.forge'
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.


version = "1.12.2-0.1.2.7"
group = "ru.googletan.warmod" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "warmod"

sourceCompatibility = targetCompatibility = '1.8' // Need this here so eclipse task generates correctly.
compileJava {
    sourceCompatibility = targetCompatibility = '1.8'
}

minecraft {
    version = "1.12.2-14.23.5.2768"
    if (file('../run').exists()) {
        runDir = "../run"
    }
    else {
        runDir = "run"
    }
    mappings = "snapshot_20171003"
}
cutter.initializeDefault(true, false)
dependencies {
}

processResources {
    // this will ensure that this task is redone when the versions change.
    inputs.property "version", project.version
    inputs.property "mcversion", project.minecraft.version

    // replace stuff in mcmod.info, nothing else
    from(sourceSets.main.resources.srcDirs) {
        include 'mcmod.info'
              
        // replace version and mcversion
        expand 'version':project.version, 'mcversion':project.minecraft.version
    }
      
    // copy everything else except the mcmod.info
    from(sourceSets.main.resources.srcDirs) {
        exclude 'mcmod.info'
    }
}
crash:
---- Minecraft Crash Report ----
// I let you down. Sorry :(

Time: 28.05.20 20:34
Description: Exception in server tick loop

net.minecraftforge.fml.common.LoaderExceptionModCrash: Caught exception from War Mod (warmod)
Caused by: java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    ru/googletan/warmod/packets/CPacketActionKey$ActionKeyPacketHandler.lambda$onMessage$1(Lnet/minecraft/entity/player/EntityPlayerMP;)V @197: invokevirtual
  Reason:
    Type 'java/lang/Object' (current frame, stack[1]) is not assignable to 'net/minecraft/entity/Entity'
  Current Frame:
    bci: @197
    flags: { }
    locals: { 'net/minecraft/entity/player/EntityPlayerMP', 'java/util/List', 'java/lang/Object', 'ru/googletan/warmod/entity/AbstractDrawn', 'java/util/Iterator' }
    stack: { 'ru/googletan/warmod/entity/AbstractDrawn', 'java/lang/Object' }
  Bytecode:
    0x0000000: 2ab6 002a 124b 2ab6 004f 1400 50b6 0057
    0x0000010: 2aba 0064 0000 b600 684c 2bb9 006e 0100
    0x0000020: 9a00 dc2a b600 7199 000a 2ab6 0075 a700
    0x0000030: 042a 4d2b 03b9 0079 0200 c000 4b4e 2bb9
    0x0000040: 007d 0100 3a04 1904 b900 8201 0099 0076
    0x0000050: 1904 b900 8601 00c0 004b 3a05 1905 b600
    0x0000060: 892c a600 0a19 0501 b600 8db1 bb00 8f59
    0x0000070: 1905 b400 932a b400 9467 1905 b400 972a
    0x0000080: b400 9867 1905 b400 9b2a b400 9c67 b700
    0x0000090: 9fb6 00a3 bb00 8f59 2db4 0093 2ab4 0094
    0x00000a0: 672d b400 972a b400 9867 2db4 009b 2ab4
    0x00000b0: 009c 67b7 009f b600 a398 9c00 0619 054e
    0x00000c0: a7ff 862d 2cb6 00a7 9900 342c b200 ad01
    0x00000d0: b600 b399 0024 2cb2 00ad 01b6 00b7 c000
    0x00000e0: b9b9 00bd 0100 3a04 1904 c600 0d19 04b6
    0x00000f0: 0089 2ca6 0004 b12d 2cb6 008d b1     
  Stackmap Table:
    append_frame(@49,Object[#106])
    same_locals_1_stack_item_frame(@50,Object[#5])
    append_frame(@70,Object[#5],Object[#75],Object[#127])
    append_frame(@108,Object[#75])
    same_frame_extended(@192)
    chop_frame(@195,1)
    full_frame(@247,{Object[#38],Object[#106],Object[#5],Object[#75],Object[#5]},{})
    chop_frame(@252,3)

    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at java.lang.Class.getConstructor0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper.instantiate(SimpleNetworkWrapper.java:166)
    at net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper.registerMessage(SimpleNetworkWrapper.java:159)
    at ru.googletan.warmod.handler.PacketHandler.registerPackets(PacketHandler.java:18)
    at ru.googletan.warmod.WarMod.preInit(WarMod.java:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at net.minecraftforge.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:637)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91)
    at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150)
    at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76)
    at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399)
    at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71)
    at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116)
    at com.google.common.eventbus.EventBus.post(EventBus.java:217)
    at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:219)
    at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:197)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91)
    at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150)
    at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76)
    at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399)
    at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71)
    at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116)
    at com.google.common.eventbus.EventBus.post(EventBus.java:217)
    at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:136)
    at net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:627)
    at net.minecraftforge.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:99)
    at net.minecraftforge.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:333)
    at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:125)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:486)
    at java.lang.Thread.run(Unknown Source)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- System Details --
Details:
    Minecraft Version: 1.12.2
    Operating System: Windows 10 (amd64) version 10.0
    Java Version: 1.8.0_231, Oracle Corporation
    Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
    Memory: 848343520 bytes (809 MB) / 1076363264 bytes (1026 MB) up to 3806855168 bytes (3630 MB)
    JVM Flags: 0 total;
    IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
    FML: MCP 9.42 Powered by Forge 14.23.5.2838 5 mods loaded, 5 mods active
    States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored

    | State | ID        | Version      | Source                                  | Signature                                |
    |:----- |:--------- |:------------ |:--------------------------------------- |:---------------------------------------- |
    | LCH   | minecraft | 1.12.2       | minecraft.jar                           | None                                     |
    | LCH   | mcp       | 9.42         | minecraft.jar                           | None                                     |
    | LCH   | FML       | 8.0.99.99    | forge-1.12.2-14.23.5.2838-universal.jar | e3c3d50c7c986df74c645c0ac54639741c90a557 |
    | LCH   | forge     | 14.23.5.2838 | forge-1.12.2-14.23.5.2838-universal.jar | e3c3d50c7c986df74c645c0ac54639741c90a557 |
    | LCE   | warmod    | 1.1R         | warmod-1.12.2-0.1.2.7-server.jar        | None                                     |

    Loaded coremods (and transformers):
    Profiler Position: N/A (disabled)
    Is Modded: Definitely; Server brand changed to 'fml,forge'
    Type: Dedicated Server (map_server.txt)
 
Сообщения
1,064
Лучшие ответы
47
Реакции
378
Так. Мне пожалуйста исходники класса ru/googletan/warmod/packets/CPacketActionKey
Если проект опен сорс, было бы совсем замечательно.
@GoogleTan
 
Последнее редактирование:
Сообщения
1,064
Лучшие ответы
47
Реакции
378
Бтв произошла обнова.

  • Добавлена возможность указывать вырезалке какие классы ей трогать не следует. Это удобно когда у вас есть какой то кусок кода где совсем нет аннотаций и вы хотите чуть-чуть ускорить сборку. Добавить исключение легко. Например вот такая конструкция cutter.exclude('**.class') скажет вырезалке не обрабатывать ничего что имеет расширение class, то есть не обрабатывать ничего. Вы можете придумать более приближенные к реальности примеры. Как работают шаблону в градле можно почитать тут.
  • Обновлена версия ASM с 6 на 8. Это значит, что теперь поддерживаются самые новые версии жавы.
  • Удалена под корень проблема с коллизиями версий ASM вырезалки и ASM форджа. Вырезалка теперь тащит свою и ни от кого не зависит.
 
Сообщения
1,064
Лучшие ответы
47
Реакции
378
Тов. @JustAGod, а почему аннотации @GradleSideOnly сохраняются в jar'никах? Всм. зачем они вообще нужны в готовом билде?
Возможно когда нибудь ты будешь использовать свой мод как библиотеку и вырезалка сможет правильно свалидировать твой код, если ты оставишь аннотации, но токсикоз прав, аннотации можно вырезать. В описании все рассказано.
 
Сообщения
927
Лучшие ответы
27
Реакции
184
Так. Мне пожалуйста исходники класса ru/googletan/warmod/packets/CPacketActionKey
Если проект опен сорс, было бы совсем замечательно.
@GoogleTan
Могу дать сурсы, но в личку, а класс вот:
Java:
public class CPacketActionKey implements IMessage
{
    public CPacketActionKey()
    {

    }

    @Override
    public void fromBytes(ByteBuf buf)
    {

    }

    @Override
    public void toBytes(ByteBuf buf)
    {

    }

    public static class ActionKeyPacketHandler implements IMessageHandler<CPacketActionKey, IMessage>
    {

        @Override
        public IMessage onMessage(CPacketActionKey message, MessageContext ctx)
        {
            EntityPlayerMP sender = ctx.getServerHandler().player;
            sender.getServerWorld().addScheduledTask(() -> {
                List<AbstractDrawn> result = sender.getServerWorld().getEntitiesWithinAABB(AbstractDrawn.class, sender.getEntityBoundingBox().grow(3), entity -> entity != sender.getRidingEntity() && entity.isEntityAlive());
                if (!result.isEmpty())
                {
                    Entity target = sender.isRiding() ? sender.getRidingEntity() : sender;
                    AbstractDrawn closest = result.get(0);
                    for (AbstractDrawn cart : result)
                    {
                        if (cart.getPulling() == target)
                        {
                            cart.setPulling(null);
                            return;
                        }
                        if (new Vec3d(cart.posX - sender.posX, cart.posY - sender.posY, cart.posZ - sender.posZ).lengthVector() < new Vec3d(closest.posX - sender.posX, closest.posY - sender.posY, closest.posZ - sender.posZ).lengthVector())
                        {
                            closest = cart;
                        }
                    }
                    if (closest.canBePulledBy(target))
                    {
                        if(target.hasCapability(PullProvider.PULL, null))
                        {
                            AbstractDrawn drawn = target.getCapability(PullProvider.PULL, null).getDrawn();
                            if(drawn != null && drawn.getPulling() == target)
                            {
                                return;
                            }
                        }
                        closest.setPulling(target);
                    }
                }
            });
            return null;
        }
    }
}
 
Сообщения
1,064
Лучшие ответы
47
Реакции
378
Баг починил.

Эта штука, как оказалось, затрагивала много больше аспектов чем мне казалось, а значит у большинства людей с проблемой как у @GoogleTan все починилось.

Обновление залито. Делаем --refresh-dependencies.

Пис!
 
Сообщения
1,064
Лучшие ответы
47
Реакции
378
Продолжаем череду обнов 👀 👀

Теперь инвокаторы поддерживают метод референсы. Т.е. можно писать так Invoke.serverValue(Runtime::getRuntime);. Раньше вырезалка просто проигнорировала бы такое, а теперь обработает.

Пис!
 
Сообщения
1,064
Лучшие ответы
47
Реакции
378
Господам неравнодушным, произошел обосрач с моей стороны.

У всех у кого проблема типа такой 1590954123146.png

Нужно дописать --refresh-dependencies. Этот флаг уже превращается во что то типа магической перезагрузки 👀
 

tox1cozZ

aka Agravaine
Модератор
Сообщения
7,031
Лучшие ответы
438
Реакции
2,074
Java:
buildClient.dependsOn shadowJar
buildServer.dependsOn shadowJar
 
Сообщения
738
Лучшие ответы
16
Реакции
115
buildClient.dependsOn shadowJar
Пробовал. shadow создаёт <название>-all.jar, что мне не особо подходит. Ибо на клиенте тоже библиотека нужна...
Gradle (Groovy):
shadowJar {
    relocate('org.java_websocket', 'shadow.relocate.org.java_websocket')
}
buildClient.dependsOn shadowJar
buildServer.dependsOn shadowJar
 
Сообщения
1,064
Лучшие ответы
47
Реакции
378
чот я не понял что тут происходит
чтобы обмануть вырезалку и заставить ее обрабатывать жарник от шадов плагина нужно прописать
shadowJar {
classifier = null
}
 
Сообщения
1,057
Лучшие ответы
36
Реакции
436
Как там кстати у вырезалки дела с котлином? Пока не могу попробовать это сам, может кто еще пробовал? Оно работает вместе?
 
Сообщения
1,064
Лучшие ответы
47
Реакции
378
Не тестировалось, но если это понадобится я сделаю.
Бтв оно и так заведется для методов, классов, полей(с некоторыми условиями), пакетов и инвокаторов(скорее всего)
 
Сообщения
5,304
Лучшие ответы
172
Реакции
945
Перестало работать в проекте, где раньше работало, а именно, в собранном моде возникают краши отсутствия полей и методов базового ванильного класса. Если собрать без вырезалки - все работает.
Не добавлял аннотации на новые места.
Репа с проектом: https://github.com/EndersMagic/EnderMagic
Вот в этот момент вырезалка все еще работала: https://github.com/EndersMagic/EnderMagic/tree/95ad2a390b134afb85813d7c9adb27bd1b237c3b
Щас не пашет никак.
 
Сообщения
1,064
Лучшие ответы
47
Реакции
378
Перестало работать в проекте, где раньше работало, а именно, в собранном моде возникают краши отсутствия полей и методов базового ванильного класса. Если собрать без вырезалки - все работает.
Не добавлял аннотации на новые места.
Репа с проектом: https://github.com/EndersMagic/EnderMagic
Вот в этот момент вырезалка все еще работала: https://github.com/EndersMagic/EnderMagic/tree/95ad2a390b134afb85813d7c9adb27bd1b237c3b
Щас не пашет никак.
разберуся да
 
Сверху