• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Mod [CLOSED] Vanilla Tool & Armor Materials nutzlos machen

Skyriis

Kuhfänger
Registriert
11 Juni 2018
Beiträge
59
Diamanten
329
Minecraft
MrProfessor
Hallo liebes Forum :)
da ich kein großer freund Bytecode Manipulation bin wollte ich hier mal fragen ob es eine Möglichkeit gibt die Material vom Vanilla spiel nutzlos zu machen ohne asm zu nutzen?
Das Ziel ist also alle Tools und Rüstungen nutzlos zu machen welche Vanilla bietet und dabei so wenig wie möglich den Vanillacode durch eingriffe zu "schädigen". Wäre cool zu wissen welche Möglichkeiten Ihr dabei seht :D

Grüße Skyriis
 

JTK222

Threadripper
Registriert
5 September 2013
Beiträge
1.150
Diamanten
323
Minecraft
JTK222
Die einzige möglichkeit die mir einfallen würde wäre natürlich asm.
Du könntest eventuell versuchen die Items durch eigene nutzlose Items zu überschreiben.
Oder eine Menge an events überschreiben. Aber ob dass wirklich von erfolg gekrönt wird.... dass kann ich leider nicht einschätzen.
 

JTK222

Threadripper
Registriert
5 September 2013
Beiträge
1.150
Diamanten
323
Minecraft
JTK222
Naja, ich bräuchte sowas auch und habe keine bessere Lösung gefunden.
Angeblich kann man einfach Items registrieren und so vanilla items überschreiben, hat bei meinem Versuch aber nicht geklappt.
Habe aber vielleicht was falsch gemacht. Wenn du aber eine bessere lösung findest würde mich freuen wenn du mir bescheid gibst.
 

Skyriis

Kuhfänger
Registriert
11 Juni 2018
Beiträge
59
Diamanten
329
Minecraft
MrProfessor
Ich bastle aktuell an meinem persönlichen core mod rum ^^ wenn ich ne angenehme Lösung finde kann ich dir ja nen link zu den Klassen auf GitHub schicken :)

Falls jemand anderes der das hier liest schon eine Lösung gefunden hat würde ich mich freuen wenn er uns einen Tipp gibt oder sogar seine Lösung publiziert ;)
 

Skyriis

Kuhfänger
Registriert
11 Juni 2018
Beiträge
59
Diamanten
329
Minecraft
MrProfessor
Wäre es nicht möglich ein Array aus der Config zu lesen mit den UnlocalizedName der unerwünschten Tools und dann beim abbau event dieses Array nach dem aktuell verwendeten Item zu prüfen und das event dann dementsprechend zu stoppen und eine Nachricht auszugeben. Sowas wie: "Hay dude, du kannst das Tool nicht nutzen"

Somit müsste man nicht in den minecraft code eingreifen. Ob das aber so funktioniert wie ich mir das gerade denke kann ich aktuell nicht sagen ^^" bin leider unterwegs und kann's nicht testen.
 

JTK222

Threadripper
Registriert
5 September 2013
Beiträge
1.150
Diamanten
323
Minecraft
JTK222
Naja, wie gesagt mit einer Menge events ist es machbar. Natürlich könnte man dafür auch einen Array in der Config nutzen.
Aber eine sache gibts noch: Benutze NIE, aber auch wirklich NIE den UnlocalizedName um ein Item zu Identifizierenen!
Dafür gibt es die Registry Names.
 

Skyriis

Kuhfänger
Registriert
11 Juni 2018
Beiträge
59
Diamanten
329
Minecraft
MrProfessor
Benutze NIE, aber auch wirklich NIE den UnlocalizedName um ein Item zu Identifizierenen!
Dafür gibt es die Registry Names.
Stimmt ^^ die sind um einiges praktischer.
mit einer Menge events
Ich glaube so viele events sind dafür nicht von nöten. Die frage ist eher wie schlimm wirkt sich das auf die Performance aus wenn man bei jedem abbauen und schlagen prüft welches Item der Spieler in den Händen hat. Wobei man das ja mit intelligentem Code halbwegs in grenzen halten könnte... Hmm

Ich werde mal ein wenig herumprobieren wenn ich wieder zuhause bin und teile dann mal meine "Forschungsergebnisse" mit :p
 

JTK222

Threadripper
Registriert
5 September 2013
Beiträge
1.150
Diamanten
323
Minecraft
JTK222
Also, die ganzen checks die World Guard und co bieten sind da vermutlich weit resource intensiver als ein Item vergleich wäre.
Wichtig wäre an dem Punkt nur direkt nach dem Laden aus der Config die strings durch Items zu ersetzen.
Und ich würde mindestens mit 4-6 events rechnen wenn man alles abdecken möchte.
Wobei, interaction, abbau und Angriff reichen müssten. Was in 4 events ended soweit ich weiß.
 

Skyriis

Kuhfänger
Registriert
11 Juni 2018
Beiträge
59
Diamanten
329
Minecraft
MrProfessor
Also wer nur das abbauen verhindern will für den habe ich hier eine ganz akzeptable Lösung:

java:
@SubscribeEvent
public void onBreakingBlock(PlayerEvent.BreakSpeed event){
    //Spieler des Events
    EntityPlayer player = event.getEntityPlayer();
    //Item welches zum abbauen genutzt wird
    Item usedItem = player.getHeldItemMainhand().getItem();
    
    //check ob das genutzte item in dem array aus der config enthalten ist
    if(inList(ConfigHandler.blacklistedItems, usedItem.getRegistryName().toString())){
        //setzt die abbaugeschwindigkeit auf 0
        event.setNewSpeed(0F);
    }
}

//wandelt array zu einer liste um
private static boolean inList(String[] arr, String value){
    return Arrays.asList(arr).contains(value);
}
Das funktioniert natürlich nur wenn das Item in der Haupthand getragen wird. Sollte jedoch für's abbauen kein Problem darstellen.

Danke an Marie für's Testen ;)
 

Skyriis

Kuhfänger
Registriert
11 Juni 2018
Beiträge
59
Diamanten
329
Minecraft
MrProfessor
Hier nochmal eine verbesserte Version die die Offhand auch noch prüft: LINK
Habe ebenfalls mithilfe des LivingAttackEvents das attackieren verhindert.

Wenn jemand eine angenehmere Lösung findet bitte Posten :)

Noch einmal danke an Marie für's testen ;)
 
Oben