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

Вырезалка 2

tox1cozZ

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

tox1cozZ

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

tox1cozZ

aka Agravaine
Модератор
Сообщения
6,982
Лучшие ответы
434
Реакции
2,054
Есть же параметр removeAnnotations, который убирает это.
P.S Юра ну куда ты пропал ну капец
 
Сообщения
893
Лучшие ответы
23
Реакции
179
Сам факт добавления вырезалки вызывает краш(никаких аннотаций не ставила и ничего не меняла):
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,061
Лучшие ответы
46
Реакции
373
Так. Мне пожалуйста исходники класса ru/googletan/warmod/packets/CPacketActionKey
Если проект опен сорс, было бы совсем замечательно.
@GoogleTan
 
Последнее редактирование:
Сообщения
1,061
Лучшие ответы
46
Реакции
373
Бтв произошла обнова.

  • Добавлена возможность указывать вырезалке какие классы ей трогать не следует. Это удобно когда у вас есть какой то кусок кода где совсем нет аннотаций и вы хотите чуть-чуть ускорить сборку. Добавить исключение легко. Например вот такая конструкция cutter.exclude('**.class') скажет вырезалке не обрабатывать ничего что имеет расширение class, то есть не обрабатывать ничего. Вы можете придумать более приближенные к реальности примеры. Как работают шаблону в градле можно почитать тут.
  • Обновлена версия ASM с 6 на 8. Это значит, что теперь поддерживаются самые новые версии жавы.
  • Удалена под корень проблема с коллизиями версий ASM вырезалки и ASM форджа. Вырезалка теперь тащит свою и ни от кого не зависит.
 
Сообщения
1,061
Лучшие ответы
46
Реакции
373
Тов. @JustAGod, а почему аннотации @GradleSideOnly сохраняются в jar'никах? Всм. зачем они вообще нужны в готовом билде?
Возможно когда нибудь ты будешь использовать свой мод как библиотеку и вырезалка сможет правильно свалидировать твой код, если ты оставишь аннотации, но токсикоз прав, аннотации можно вырезать. В описании все рассказано.
 
Сообщения
893
Лучшие ответы
23
Реакции
179
Так. Мне пожалуйста исходники класса 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,061
Лучшие ответы
46
Реакции
373
Баг починил.

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

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

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

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

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

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

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

tox1cozZ

aka Agravaine
Модератор
Сообщения
6,982
Лучшие ответы
434
Реакции
2,054
Java:
buildClient.dependsOn shadowJar
buildServer.dependsOn shadowJar
 
Сообщения
700
Лучшие ответы
15
Реакции
104
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,061
Лучшие ответы
46
Реакции
373
чот я не понял что тут происходит
чтобы обмануть вырезалку и заставить ее обрабатывать жарник от шадов плагина нужно прописать
shadowJar {
classifier = null
}
 
Сообщения
1,052
Лучшие ответы
36
Реакции
431
Как там кстати у вырезалки дела с котлином? Пока не могу попробовать это сам, может кто еще пробовал? Оно работает вместе?
 
Сообщения
1,061
Лучшие ответы
46
Реакции
373
Не тестировалось, но если это понадобится я сделаю.
Бтв оно и так заведется для методов, классов, полей(с некоторыми условиями), пакетов и инвокаторов(скорее всего)
 
Сверху