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

Вырезалка 2

tox1cozZ

aka Agravaine
8,454
598
2,890
У меня свой майнкрафт с блэкджеком и... 14 джавой :ROFLMAO:
Да и я shadowJar делаю с библиотеками, а у них там классы скомпиленные под >8 джавой, ну и ломается все равно.
Сделать бы по-хорошему возможность указать какой-то фильтр для классов, можно регулярку какую-то, чтобы в таких случаях только мои классы обрабатывались.
 
1,159
38
544
Тов. @JustAGod, а почему аннотации @GradleSideOnly сохраняются в jar'никах? Всм. зачем они вообще нужны в готовом билде?
 

GoogleTan

Картошка :3
1,354
43
310
Сам факт добавления вырезалки вызывает краш(никаких аннотаций не ставила и ничего не меняла):
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,111
47
420
Так. Мне пожалуйста исходники класса ru/googletan/warmod/packets/CPacketActionKey
Если проект опен сорс, было бы совсем замечательно.
@GoogleTan
 
Последнее редактирование:
1,111
47
420
Бтв произошла обнова.

  • Добавлена возможность указывать вырезалке какие классы ей трогать не следует. Это удобно когда у вас есть какой то кусок кода где совсем нет аннотаций и вы хотите чуть-чуть ускорить сборку. Добавить исключение легко. Например вот такая конструкция cutter.exclude('**.class') скажет вырезалке не обрабатывать ничего что имеет расширение class, то есть не обрабатывать ничего. Вы можете придумать более приближенные к реальности примеры. Как работают шаблону в градле можно почитать тут.
  • Обновлена версия ASM с 6 на 8. Это значит, что теперь поддерживаются самые новые версии жавы.
  • Удалена под корень проблема с коллизиями версий ASM вырезалки и ASM форджа. Вырезалка теперь тащит свою и ни от кого не зависит.
 
1,111
47
420
Тов. @JustAGod, а почему аннотации @GradleSideOnly сохраняются в jar'никах? Всм. зачем они вообще нужны в готовом билде?
Возможно когда нибудь ты будешь использовать свой мод как библиотеку и вырезалка сможет правильно свалидировать твой код, если ты оставишь аннотации, но токсикоз прав, аннотации можно вырезать. В описании все рассказано.
 

GoogleTan

Картошка :3
1,354
43
310
Так. Мне пожалуйста исходники класса 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,111
47
420
Баг починил.

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

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

Пис!
 
1,111
47
420
Продолжаем череду обнов 👀 👀

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

Пис!
 
1,111
47
420
Господам неравнодушным, произошел обосрач с моей стороны.

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

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

will0376

Токсичная личность
2,058
55
572
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,111
47
420
чот я не понял что тут происходит
чтобы обмануть вырезалку и заставить ее обрабатывать жарник от шадов плагина нужно прописать
shadowJar {
classifier = null
}
 
1,159
38
544
Как там кстати у вырезалки дела с котлином? Пока не могу попробовать это сам, может кто еще пробовал? Оно работает вместе?
 
1,111
47
420
Не тестировалось, но если это понадобится я сделаю.
Бтв оно и так заведется для методов, классов, полей(с некоторыми условиями), пакетов и инвокаторов(скорее всего)
 
7,099
324
1,509
Перестало работать в проекте, где раньше работало, а именно, в собранном моде возникают краши отсутствия полей и методов базового ванильного класса. Если собрать без вырезалки - все работает.
Не добавлял аннотации на новые места.
Репа с проектом: https://github.com/EndersMagic/EnderMagic
Вот в этот момент вырезалка все еще работала: https://github.com/EndersMagic/EnderMagic/tree/95ad2a390b134afb85813d7c9adb27bd1b237c3b
Щас не пашет никак.
 
1,111
47
420
Перестало работать в проекте, где раньше работало, а именно, в собранном моде возникают краши отсутствия полей и методов базового ванильного класса. Если собрать без вырезалки - все работает.
Не добавлял аннотации на новые места.
Репа с проектом: https://github.com/EndersMagic/EnderMagic
Вот в этот момент вырезалка все еще работала: https://github.com/EndersMagic/EnderMagic/tree/95ad2a390b134afb85813d7c9adb27bd1b237c3b
Щас не пашет никак.
разберуся да
 
Сверху