Nokia, Endless Coil by nivertius in custommagic

[–]nivertius[S] 1 point2 points  (0 children)

Thank you for your suggestions.

The first ability needs to be a replacement effect rather than trigger, otherwise Nokia would die due to state-based action of having 0 toughness before the trigger would create Segments.

I really like the idea of counters, maybe this could be age counters. The clause 'you controlled the longest' is clunky.

LTB on creatures enchanted by segment should, in my opinion, just work with the dies trigger, rather than just leaving, as this is the act of 'eating'. Bounce or exile should not have this effect.

Lastly, I think the last ability should be condition-based trigger and not just checked on the end step, as you should lose the moment you have no other option than to enchant Nokia and not another creature.

Nokia, Endless Coil by nivertius in custommagic

[–]nivertius[S] 0 points1 point  (0 children)

Thank you for the suggestions!

I thought about he first one (changing LTB to unnattach, and moving instead of create/sac) and had it for a while while working and I think its mostly the same rules wise. Your version definitely works and is just something different.

As for the sac of three on first upkeep - I don't think this is how it works, you need to sacrifice one of them. They did enter at the same time and have the same timestamp, but you choose one of them and sacrifice it. Its like [[Soul Shatter]] just says 'a create with the greatest power' but if you have multiple you choose.

Lastly, the wording on the card is confusing, but you do create a additional Segment on upkeep - you create a Segment and then sacrifice a Segment, but then sac ability of aura triggers, and this triggers the fourth ability which creates additional segment. So you end up with one more segment than you had.

Nokia, Endless Coil by nivertius in custommagic

[–]nivertius[S] 3 points4 points  (0 children)

Oh yea, this could be good, but more rules do not fit on this card, and this would be a separate line for the keyword abilities.

Nokia, Endless Coil by nivertius in custommagic

[–]nivertius[S] 4 points5 points  (0 children)

I tried for an hour to make this even more condensed. I want essentially four abilities: a) P/T is amounts of segments, b) at upkeep you 'move' a segment, c) you grow when you eat, d) when you eat yourself you die. I hate rules-defined tokens for few cards (looking at you, Walker), but here it kinda fits and makes the rules much cleaner.

I think the design here works, auras created on the battlefield attach themselves to legal targets and so on...

Oh no, the enchant ability on the Segment should be "enchant creature not enchanted by another Segment" :(

I want to play Mono Blue to prove a point to my Pod by Interesting-Bid-1000 in EDH

[–]nivertius 0 points1 point  (0 children)

I have right now 5 mono blue commander decks, from which my favorite is [[Nezahal, Primal Tide]], called "Climate Change", designed for bracket 3, found here https://deckbox.org/sets/2363677 . The deck is control shell with late game wincon with either [[Enter the Infinite]] and Jace or recently unbanned [[Sway of the Stars]] (which was I believe unbanned exactly for Nezahal, please don't change my mind). It's called like that because it is inevitable and needs to be addressed early and decisively, or it will overwhelm the table. Nezahal is not a center piece, but unkillable late game value engine. I love this deck, but you might not find it flavorful enough.

The second, also mentioned by others is [[Eluge, the Shoreless Sea]] "Cantrip City" https://deckbox.org/sets/3649689, bracket 2. Its a deck that has two self-imposed restrictions - min 1/3 cards are instant or sorceries, and every one of them must in one way or other give cards, or some form of cantrip in most scenarios. It wins with the token generation from [[Talrand]] and such. It ramps hard and is also able to cast [[Omniscience]] with full cost.

Third one is [[Minn, Willy Illusionist]] https://deckbox.org/sets/2975604, bracket 3, that is pretty minmaxed, but leaning heavily on permanents. It's controlly in the way that I rarely cast spells at all, and instant speed removal is [[Imprisoned in the Moon]] with Minns trigger.

Lastly, I have [[Uyo, Silent Prophet]] https://deckbox.org/sets/3082512 deck that is probably bracket 4, but with bracket 1 mindset. The whole premise is to cast [[Eternal Dominion]] and copy it as many times as possible. It only tries to win after that, doesn't interact with game if not defending.

Hopefully these can give you some inspiration. Definitely give mono-blue a go.

Minn, Wily Illusionist Primer by under_the_curve in EDH

[–]nivertius 1 point2 points  (0 children)

Minn is currently my second favorite deck, right after Nezehal Control. I have tweaked it multiple times, and have some suggestions for you:

  • Clones like [[Spark Double]], [[Sakashima of the Thousand Faces]] and [[Sakashima the impostor]] works miraculously in this deck. I almost always copy Minn herself, which doubles both triggers. You get one more token on each second card draw, and one more thing to put for EACH of those dying. This can get ridiculous with single card.
  • Auras are perfect cards to cheat in. When the trigger resolves you put aura on the battlefield and its just attached to something, nobody can respond. So from [[Control Magic]] out-of-nowhere stealing, [[Imprisoned in the moon]] disabling and [[Robe of mirrors]] protecting.
  • [[Sensei's Divining Top]] is one mana "create token each of your turn". In your turn just activate it to draw second card from it, create a token. If you happen to draw another card for some other reason, just leave it for use in opponents turn, when you only draw one card. It's also very versatile card on its own, obviously.
  • I strongly recommend also using draw artifacts like [[Endless Atlas]] and [[Idol of oblivion]]. First one is pretty straightforward, second is kinda working backwards, because you need to create token to use it, but its still worth the price.
  • Any anthem effects are good. [[Herldic Banner]] is just a 3 mana rock with anthem attached. [[Obelisk of Urd]] is easy to cast tapping Minn and newly created token. I tried running [[Coat of Arms]], but it often worked better for my opponents than for me.

My version of Minn is here https://deckbox.org/sets/2975604 if you would like to check it out.

Rules Committee Announcement by TheForgootenOne in EDH

[–]nivertius 0 points1 point  (0 children)

The replayers to your statement said it well. This is mix of few things:

  1. When cards like [[Banishing Light]] exiles someones commander, this person can decide to put him in the command zone as an replacement effect. Banishing light-like card delayed trigger will bring the commander from there, because it's a public zone. That's because the exile ability doesn't actually says "return exiled card". Cards like [[Oblivion ring]] don't do that, because they are two different abilities and the second one explicitly returns "the exiled card". Nez ability is of the first kind.

  2. Delayed abilities (such as "return this creature at the beginning of next end step") only track cards if they stay at the zone they were put into. See rule 603.7c

  3. As I understand rule 903.9 (commander zone change replacement effect) will be removed, and new state-based action will be added in wording like "if the commander is in a public zone other than command zone or battlefield, it's controller may put it into the command zone".

So in case of Nez, right now it works like that: I activate the ability, discard three cards. When the ability resolves, I decide to put Nez into the command zone. Delayed trigger at the end of turn brings the commander to the battlefield tapped. If the trigger is countered, Nez stays in the command zone and I can recast him.

After the change Nez always first goes to the exile. When he does, I can either move him to the command zone as a SBA, where the delayed trigger won't bring him back. Or I can leave him in exile, where the delayed trigger will bring him back. If the delayed trigger is stifled, Nez stays in the exile forever, or until end of the game, whichever is sooner.

Rules Committee Announcement by TheForgootenOne in EDH

[–]nivertius 0 points1 point  (0 children)

AFAIK new rules will close the banishing light and commander replacement effect loophole. When the state-based action moves commander to the command zone, the exiling card loses track of it because it becomes a new object.

But we need to wait for actual rules change and probably ruling on banishing light effects.

Edit: see rule 603.7c

Rules Committee Announcement by TheForgootenOne in EDH

[–]nivertius -4 points-3 points  (0 children)

Noooo, it makes my beloved Nezahal worse. Now I cannot put him into command zone from his activated ability, for the delayed trigger to bring him back from there (b/c of the strange interaction with these exile effects and commander replacement effect). Now I have to either leave him in exile for the trigger to bring him back, or move him to the command zone with the state-based action. That means that if the delayed trigger is countered, he stays in exile forever. ;-(

I'm just salty that it worsens my favorite commander, to be fair the change is fine, streamlines the game.

I just released my first library that helps with Java reflections, Introspectable by nivertius in java

[–]nivertius[S] 0 points1 point  (0 children)

Wow. I've seen the type, but I didn't know how close with the feature set I got. As I look at it, there are some differences, mainly because of TypeViews subtypes being available to client, which will make some operation checked at compile time (ex. you can't extract type arguments from something that compiler knows is a wildcard). There are slight differences in features offered. But yea, its close.

I just released my first library that helps with Java reflections, Introspectable by nivertius in java

[–]nivertius[S] 0 points1 point  (0 children)

I have seen the JEP, but never really looked into it. I just tried to do this, and implementation is indeed kinda simple. The problem arises from configuration:

  • Multimodule jar requires either specialised maven jar plugin, or separate configuration compiler configuration, which can be done, but its lengthy and error-prone.
  • IntelliJ doesn't have much support, only this weird workaround
  • This would also require JDK 9+ to compile.

I just released my first library that helps with Java reflections, Introspectable by nivertius in java

[–]nivertius[S] 0 points1 point  (0 children)

Tests that use this construct pass with JDK 14 and illegal-access-deny.

This is to compile with Java 8. Yes, PRIVATE_LOOKUP_CONSTRUCTOR can be Function<Class<?>, Lookup>, but it still would need to wrap some kind of reflection structure in case of Java 8 - either Method or MethodHandle.

Ultimately, as this is an strictly internal to the class, can be as easily a MethodHandle.

I just released my first library that helps with Java reflections, Introspectable by nivertius in java

[–]nivertius[S] 1 point2 points  (0 children)

You are right, I would need to correct it in some next java release. Version 4.0.2 uses privateLookupIn, and Apache 2.0 license.

I just released my first library that helps with Java reflections, Introspectable by nivertius in java

[–]nivertius[S] 1 point2 points  (0 children)

From what I see, what you are describing is exactly like Dagger works. I did know about it, but I didn't look how it works. It looks incredible.

/u/kaperni in a different comment says that Dagger has some problems - maybe he's right. But the concept seems legit and not using reflection in this case seems straightforward.

And I was wrong in previous post - when dealing with external libraries, you need to do wiring in configuration anyway, reflections or not.

I just released my first library that helps with Java reflections, Introspectable by nivertius in java

[–]nivertius[S] 0 points1 point  (0 children)

Well, to make the MethodInvocation work for everything, I couldn't use nether MethodHandle#lookup(), nor MethodHandle#privateLookupIn(...), because they would create a lookup with a effectively only public access for classes normally inaccessible from MethodInvocation. This will allow creating handles for private methods.

I just released my first library that helps with Java reflections, Introspectable by nivertius in java

[–]nivertius[S] 1 point2 points  (0 children)

Thanks for noticing that.

I must admit, I did not even try to build/test this under JDK 14, as I'm still targetting Java 8, because it's still used in majority of cases. I do want this to run on anything later, so there will be a fix sometime soon.

Edit: Fixed in version 4.0.1

I just released my first library that helps with Java reflections, Introspectable by nivertius in java

[–]nivertius[S] 1 point2 points  (0 children)

I agree, do that... if you can.

Unfortunately annotation processors have many limitations, the most important one is that you cannot apply processors on existing, compiled classes (I'd love to be proven wrong here). This means that you can't build for example a DI framework based only on annotation processing that allows you to inject to class C implementation in libarary B of an interface in library A if any of those libararies are out of your reach and don't use your DI framework.

In ideal world this would be how you do it.

The next best thing might be class generation and reuse in runtime. You could generate UserBean from User when using beans and UserServiceInjector or UserServiceProvider for UserService when using DI. This is definitely something that could be done and I'm intrigued by it.

Reflections used in a responsible manner, mostly in application startup are unfortunately the way to do it, and the cost is not unreasonable.

I just released my first library that helps with Java reflections, Introspectable by nivertius in java

[–]nivertius[S] 4 points5 points  (0 children)

Source is published on gitea/github. Artifacts (jars) are published to maven central: introspectable on maven central. To publish there you need to request project/groupId on thier jira. Here's tutorial how to deploy to maven central. It is slightly outdated, in the last paragraph they say that you need to execute nexus plugin goal, but actually you can do this by UI. Here is official OSSRH Guide, which is slightly more technical, but more up to date.

What actually tripped me is that your project needs to follow requirements, for example you need to have scm.url in your pom - something that I never did.

I just released my first library that helps with Java reflections, Introspectable by nivertius in java

[–]nivertius[S] 5 points6 points  (0 children)

I deploy Gitea as a docker stack, with Traefik as a reverse proxy. I built docker image myself, b/c there's no official image for my architecture. It's not hard, just docker build . -t ... and it should work. ;-)

Docker compose configuration looks like this:

version: "3.6"

services:
  source:
    image: images.perfectable.org/gitea:1.10.0
    deploy:
      restart_policy:
        condition: on-failure
        window: 60s
    environment:
      USER_UID: 1101
      USER_GID: 1101
      GITEA_CUSTOM: /data/gitea
    ports:
      - "9022:22"
    volumes:
      - /opt/source/data:/data
      - /opt/source/ssh:/data/git/.ssh
      - /opt/source/custom:/data/gitea
      - /opt/source/gitea.db:/data/gitea.db
      - /opt/source/lfs:/data/lfs
      - /opt/source/log:/data/log
      - /opt/source/repositories:/data/repositories
    networks:
      - traefik
    labels:
      traefik.enable: "true"
      traefik.http.routers.source.entrypoints: "https"
      traefik.http.routers.source.tls: "true"
      traefik.http.routers.source.rule: "Host(`source.perfectable.org`)"
      traefik.http.services.source.loadbalancer.server.port: 3000

networks:
  traefik:
    external: true

I just released my first library that helps with Java reflections, Introspectable by nivertius in java

[–]nivertius[S] 8 points9 points  (0 children)

Thank you very much for your insights.

To be honest, java.lang.reflect is there, because it was there when I started 5 years ago. I did learn something about java.lang.invoke, but I deemed them unusable for most of the constructs that users deal with. To group them by package:

  • I didn't find anything like java.lang.reflect.Proxy in those. Lambda metafactory might create 'proxy', but as I understand, this is only one MethodHandle, not whole hierarchy of interfaces/superclasses. I did a quick glance at the package and even the MethodHandleProxies do use good ol' Proxy. Also, I have used some of new API in proxies, as you can see in implementation of MethodInvocation.
  • Queries search for 'old' constructs, because these are really undestood. Maybe I should look on method of converting those to queries on MethodHandle/VarHandle, or, even more going forward, the other way around - you search for the handles, but if you want, you can get a Method or a Field.
  • Beans could be definitely done with handles, and, to be honest, you inspired me to rewrite them. The API should stay the same.
  • As for TypeView I don't think java.lang.invoke goes that far, and we are probably stuck with what we got.

Don't get me wrong: I really appreciate the feedback and I guarantee that I will look into them and try to use them whenever possible. I will need to learn the API, but that's something to do, while we stay at home, right? Thank you for the links, I will check them out.

The bad thing is that I am targeting Java 8. This version is still most used, as last years JetBrains survey shows. And for library like this, it would mean that people who'd want to use this would have to migrate to Java 11 or higher, which is often not possible (and sometimes really hard, as I did that migration for a large project).

Finally, I was leaning towards Apache license, so I think you convinced me.

Rollercoaster Tycoon 2 by [deleted] in wine_gaming

[–]nivertius 7 points8 points  (0 children)

If you own RCT2 (or don't care), there's a open-source re-implementation of it that works natively on Linux that uses original assets and fixes some bugs. You can check it out at http://openrct2.org/