Çift Envanter Skripti.

Personinblack

YASAKLANDI
En iyi cevaplar
0
Entity lere zaten özel NBT eklenmiyor, eşyalara eklenebiliyor ve hiç gitmiyor.
Edit: Editlerini görmedim ve yine DAT diyorum


Bunun oyuncunun girip çıkmasıyla hiçbir alakası yok.
Skript'te Inventory Drag eventi bulunmakta ve istediğin bütün bukkit eventlerini bir addon sayesinde özel syntaxla birlikte ekleyip kullanabilirsin.(acı gerçek)

NBT derken DAT dosyası dediğimi söylemiştim.

"NBT ler sıfırlansa sunucu açıldığında her entity default halde olurdu" da demiştin. Benim cevabım da buna yönelikti. Entity ve eşyalar arasındaki farkı bende açıkladım zaten kaynağını belirterek. Burada eşya üzerinde veri saklayarak amaca ulaşamazsın zaten.
 

Blueyescat

Bedrock Kaşifi
En iyi cevaplar
0
"NBT ler sıfırlansa sunucu açıldığında her entity default halde olurdu" da demiştin. Benim cevabım da buna yönelikti. Entity ve eşyalar arasındaki farkı bende açıkladım zaten kaynağını belirterek. Burada eşya üzerinde veri saklayarak amaca ulaşamazsın zaten.
"NBT ler sıfırlansa sunucu açıldığında her entity default halde olurdu" bütün NBT leri kapsıyor ve sonucunun entityler üzerinde bir örneği.
Bu söylediğim entityler için geçerliymiş
Entity ye kaydettiğin özel nbt sıfırlanır değil, kaydedemezsin.
 

Personinblack

YASAKLANDI
En iyi cevaplar
0
"NBT ler sıfırlansa sunucu açıldığında her entity default halde olurdu" bütün NBT leri kapsıyor ve sonucunun entityler üzerinde bir örneği.
Entity ye kaydettiğin özel nbt sıfırlanır değil, kaydedemezsin.
Bütün NBT leri kapsamıyor... NBT ler entityler ve itemlar üzerinde bulunabiliyorlar, entityler üzerinde bulunanlar restart sırasında kaydedilmiyor (Eğer MC tarafından kullanılmıyorsa) fakat itemlar üzerinde bulunanlar kaydediliyor her türlü.
Kaydedemediğin zaman benim söylediğim gibi sunucu yeniden başladığında sıfırlanmış oluyor. Aynı anlama çıkıyor yani ikiside.
 

CoffeeBeat

Zindev
En iyi cevaplar
0
Entity lere zaten özel NBT eklenmiyor, eşyalara eklenebiliyor ve hiç gitmiyor.
Edit: Editlerini görmedim ve yine DAT diyorum


Bunun oyuncunun girip çıkmasıyla hiçbir alakası yok.
Skript'te Inventory Drag eventi bulunmakta ve istediğin bütün bukkit eventlerini bir addon sayesinde özel syntaxla birlikte ekleyip kullanabilirsin.(acı gerçek)

NBT derken DAT dosyası dediğimi söylemiştim.
Txt dosyasındaki bilgi ile yeni bir eventi Bukkit'e register etmek ve bu eventin bilimum metodlarını almak elbet mümkün.
Java Reflection ile tabii.Bilmediğin tek şey ,her şeyin bir bedeli vardır.Senin bildiğin ondalık sayı,doğal sayı,yazı gibi değişken tipleri dışında Event metodları Java Objeleride döndürebilir.Bastiçe anlatmak gerekirse bu Java Objelerine çeşitli işler yapan ve içlerinde başka Java Objeleri veya ilkel tipler(int,char,double vb) taşıyan işlemlerdir diyebiliriz.Skript'in bir Java Objesini okuyup metodlarını çalıştırması mümkün değil.(Aslında mümkün ama,dolaylı yoldan Java yazmış oluyorsun.)Kısaca şu işlem yapılamayacağı için boş yere Reflection açıp sunucuyu yormanın bi anlamı yok;

HTML:
            @EventHandler(priority = EventPriority.LOW)
            public void drag(InventoryDragEvent e) {
                if (!(e.getWhoClicked() instanceof Player))
                    return;
                Player p = (Player) e.getWhoClicked();
                ChestGUI gui = map.get(p.getUniqueId());
                if (gui == null || gui.isClosed() || gui.inv == null || !gui.inv.equals(e.getInventory())
                        || !e.getRawSlots().stream().allMatch(i -> i < gui.inv.getSize())) {
                    return;
                }
                List<Integer> fl = gui.getFreeList();
                if (e.getInventorySlots().stream().anyMatch(i -> !fl.contains(i))) {
                    e.setCancelled(true);
                }
            }
 

Blueyescat

Bedrock Kaşifi
En iyi cevaplar
0
Ben dediğim cümlenin her nbt leri kapsadığını söyledim. Yani cümlemin anlamı.

Entity ye özel NBT kaydetmeyi başarırsan bana da söyle, 1.10+ da geldi mi bilmiyorum.

Txt dosyasındaki bilgi ile yeni bir eventi Bukkit'e register etmek ve bu eventin bilimum metodlarını almak elbet mümkün.
Java Reflection ile tabii.Bilmediğin tek şey ,her şeyin bir bedeli vardır.Senin bildiğin ondalık sayı,doğal sayı,yazı gibi değişken tipleri dışında Event metodları Java Objeleride döndürebilir.Bastiçe anlatmak gerekirse bu Java Objelerine çeşitli işler yapan ve içlerinde başka Java Objeleri veya ilkel tipler(int,char,double vb) taşıyan işlemlerdir diyebiliriz.Skript'in bir Java Objesini okuyup metodlarını çalıştırması mümkün değil.(Aslında mümkün ama,dolaylı yoldan Java yazmış oluyorsun.)Kısaca şu işlem yapılamayacağı için boş yere Reflection açıp sunucuyu yormanın bi anlamı yok;

HTML:
            @EventHandler(priority = EventPriority.LOW)
            public void drag(InventoryDragEvent e) {
                if (!(e.getWhoClicked() instanceof Player))
                    return;
                Player p = (Player) e.getWhoClicked();
                ChestGUI gui = map.get(p.getUniqueId());
                if (gui == null || gui.isClosed() || gui.inv == null || !gui.inv.equals(e.getInventory())
                        || !e.getRawSlots().stream().allMatch(i -> i < gui.inv.getSize())) {
                    return;
                }
                List<Integer> fl = gui.getFreeList();
                if (e.getInventorySlots().stream().anyMatch(i -> !fl.contains(i))) {
                    e.setCancelled(true);
                }
            }
Bu kodda ne yazdığını tam olarak anlayamıyorum elbet, fakat Skript'te her eventin metodlarını almak mümkün.
Kod:
method "getWhoClicked"
gibi.
Kod:
  ReturnType:
  - '[(|skript|skellett)] [the] return (type|value) [(from|of|in)] [the] [expression]
    %object%'
  - '[(the|all)] [of] [the] [event] methods'
  - '[(the|all)] [of] [the] methods (from|of|in) [the] [expression] %object%'
  - '[(execute|parse[d])] [event] method %string% [is [a] loop[able] %-boolean%] [(from|of)
    [(expression|type)] %-object%] [with parameter %-objects%]'
  - '[event] method %string% [is [a] loop[able] %-boolean%] [(from|of) [(expression|type)]
    %-object%] [with parameter %-objects%]'
 

Personinblack

YASAKLANDI
En iyi cevaplar
0
Txt dosyasındaki bilgi ile yeni bir eventi Bukkit'e register etmek ve bu eventin bilimum metodlarını almak elbet mümkün.
Java Reflection ile tabii.Bilmediğin tek şey ,her şeyin bir bedeli vardır.Senin bildiğin ondalık sayı,doğal sayı,yazı gibi değişken tipleri dışında Event metodları Java Objeleride döndürebilir.Bastiçe anlatmak gerekirse bu Java Objelerine çeşitli işler yapan ve içlerinde başka Java Objeleri veya ilkel tipler(int,char,double vb) taşıyan işlemlerdir diyebiliriz.Skript'in bir Java Objesini okuyup metodlarını çalıştırması mümkün değil.(Aslında mümkün ama,dolaylı yoldan Java yazmış oluyorsun.)Kısaca şu işlem yapılamayacağı için boş yere Reflection açıp sunucuyu yormanın bi anlamı yok;

HTML:
            @EventHandler(priority = EventPriority.LOW)
            public void drag(InventoryDragEvent e) {
                if (!(e.getWhoClicked() instanceof Player))
                    return;
                Player p = (Player) e.getWhoClicked();
                ChestGUI gui = map.get(p.getUniqueId());
                if (gui == null || gui.isClosed() || gui.inv == null || !gui.inv.equals(e.getInventory())
                        || !e.getRawSlots().stream().allMatch(i -> i < gui.inv.getSize())) {
                    return;
                }
                List<Integer> fl = gui.getFreeList();
                if (e.getInventorySlots().stream().anyMatch(i -> !fl.contains(i))) {
                    e.setCancelled(true);
                }
            }
"if (!(e.getWhoClicked() instanceof Player)) {}" InventoryDragEvent Player dışında bir canlı tarafından gerçekleştirilebiliyor mu ki? Javadocs da dediğine göre: "This event is called when the player drags an item in their cursor across the inventory."

Ben dediğim cümlenin her nbt leri kapsadığını söyledim. Yani cümlemin anlamı.

Entity ye özel NBT kaydetmeyi başarırsan bana da söyle, 1.10+ da geldi mi bilmiyorum.

Bu kodda ne yazdığını tam olarak anlayamıyorum elbet, fakat Skript'te her eventin metodlarını almak mümkün.
Kod:
method "getWhoClicked"
gibi.
Kod:
  ReturnType:
  - '[(|skript|skellett)] [the] return (type|value) [(from|of|in)] [the] [expression]
    %object%'
  - '[(the|all)] [of] [the] [event] methods'
  - '[(the|all)] [of] [the] methods (from|of|in) [the] [expression] %object%'
  - '[(execute|parse[d])] [event] method %string% [is [a] loop[able] %-boolean%] [(from|of)
    [(expression|type)] %-object%] [with parameter %-objects%]'
  - '[event] method %string% [is [a] loop[able] %-boolean%] [(from|of) [(expression|type)]
    %-object%] [with parameter %-objects%]'


Entity'e NBT ekleyebilirsin fakat bu NBT yi kaydedemezsin benim anlatmaya çalıştığım şeyde bu... Söylediğin cümle "her nbt leri" kapsamıyor maalesef.
 

CoffeeBeat

Zindev
En iyi cevaplar
0
Ben dediğim cümlenin her nbt leri kapsadığını söyledim. Yani cümlemin anlamı.
Entity ye özel NBT kaydetmeyi başarırsan bana da söyle, 1.10+ da geldi mi bilmiyorum.


Bu kodda ne yazdığını tam olarak anlayamıyorum elbet, fakat Skript'te her eventin metodlarını almak mümkün.
Kod:
method "getWhoClicked"
gibi.
Kod:
  ReturnType:

  - '[(|skript|skellett)] [the] return (type|value) [(from|of|in)] [the] [expression]
    %object%'
  - '[(the|all)] [of] [the] [event] methods'
  - '[(the|all)] [of] [the] methods (from|of|in) [the] [expression] %object%'
  - '[(execute|parse[d])] [event] method %string% [is [a] loop[able] %-boolean%] [(from|of)
    [(expression|type)] %-object%] [with parameter %-objects%]'
  - '[event] method %string% [is [a] loop[able] %-boolean%] [(from|of) [(expression|type)]
    %-object%] [with parameter %-objects%]'



Şöyle anlatıyım.Reflection Java'nın çalışan bir java programı üzerinde işlemler yapmak için kullandığı bir sistem.
Kulağa güzel geliyor değil mi ? Çalışan bir programın kodlarını herhangi bir şekilde yeniden yükleme yapmadan değiştirebilmek.
Ama herşeyin bir bedeli var,Reflection hem performans açısından sıkıntılar yaratabileceği gibi hemde en ufak yazım hatasında konsolunu hatalar portresine çevirebilir.Sizin elinize hiç bilmediğiniz bir şeyi çocuk oyuncağı gibi verdikleri için ödediğiniz bedelin farkında değilsiniz sadece.
Hani hem Skript syntax'ı yazıcan,Hem Java Syntax'ı yazıcan.Hem Skript'e fazladan add-on atıcan,hem Skript'in variable sistemini kullanmak zorundasın,hem Reflection performans yiyecek,Hem Skript Performans yiyecek,Bi yandan Reflection kodunun nasıl çalıştığını bilmeden kod çalıştırmaya çalışacaksın(Kör gözle iğne yığınının ortasında saman aradığını düşün).

Reflection ile bi metodu kullanarak değer almak ile direk java kodu ile aynı metottan değer almayı anlatmak gerekirse.
Hareketli bir arabanın içinde bir çikolata var,bu çikolatayı arabanın içindeki adamın alması mı daha kolay yoksa 100 metre ilerideki trafik polisinin arabayı durdurup alması mı ?


Peki çok merak ediyorum;
300 satırlık kod için bunca zahmete girip hem kendi hemde sunucunun belini kırmaya neden bu kadar meraklısın ?


 

Blueyescat

Bedrock Kaşifi
En iyi cevaplar
0

Şöyle anlatıyım.Reflection Java'nın çalışan bir java programı üzerinde işlemler yapmak için kullandığı bir sistem.
Kulağa güzel geliyor değil mi ? Çalışan bir programın kodlarını herhangi bir şekilde yeniden yükleme yapmadan değiştirebilmek.
Ama herşeyin bir bedeli var,Reflection hem performans açısından sıkıntılar yaratabileceği gibi hemde en ufak yazım hatasında konsolunu hatalar portresine çevirebilir.Sizin elinize hiç bilmediğiniz bir şeyi çocuk oyuncağı gibi verdikleri için ödediğiniz bedelin farkında değilsiniz sadece.
Hani hem Skript syntax'ı yazıcan,Hem Java Syntax'ı yazıcan.Hem Skript'e fazladan add-on atıcan,hem Skript'in variable sistemini kullanmak zorundasın,hem Reflection performans yiyecek,Hem Skript Performans yiyecek,Bi yandan Reflection kodunun nasıl çalıştığını bilmeden kod çalıştırmaya çalışacaksın(Kör gözle iğne yığınının ortasında saman aradığını düşün).

Reflection ile bi metodu kullanarak değer almak ile direk java kodu ile aynı metottan değer almayı anlatmak gerekirse.
Hareketli bir arabanın içinde bir çikolata var,bu çikolatayı arabanın içindeki adamın alması mı daha kolay yoksa 100 metre ilerideki trafik polisinin arabayı durdurup alması mı ?


Peki çok merak ediyorum;
300 satırlık kod için bunca zahmete girip hem kendi hemde sunucunun belini kırmaya neden bu kadar meraklısın ?
Skellett addonunun bunun için Reflection kullandığından emin misin? Custom event kaydetmek için eklentinin (addonun) yeniden yüklenmesi gerektiğini de söyleyeyim.
Linki görebilmek için üye olmanız gerekiyor. Giriş yap veya üye ol.


Addon kullanmak performans kaybı yaratmaz. Kimse Skript'in variables sistemini kullanmak zorunda değil. Ayrıca variables sisteminin performans açısından hiçbir sıkıntılı yanını görmedim. Kanıtsız hiçbir şeye inanan biri değilim maalesef.

Maalesef Skript kullanmayı bilen ne kendi belini nede sunucunun belini kırıyor.
"if (!(e.getWhoClicked() instanceof Player)) {}" InventoryDragEvent Player dışında bir canlı tarafından gerçekleştirilebiliyor mu ki? Javadocs da dediğine göre: "This event is called when the player drags an item in their cursor across the inventory."



Entity'e NBT ekleyebilirsin fakat bu NBT yi kaydedemezsin benim anlatmaya çalıştığım şeyde bu... Söylediğin cümle "her nbt leri" kapsamıyor maalesef.
"NBT" diyince aklına "Entity NBT'si" mi geliyor? Gerçekten anlamadın hala :S

Bende denedim eklemeyi ve olmadığını gördüm dediğimde bu.
 
Son düzenleme:

CoffeeBeat

Zindev
En iyi cevaplar
0
"if (!(e.getWhoClicked() instanceof Player)) {}" InventoryDragEvent Player dışında bir canlı tarafından gerçekleştirilebiliyor mu ki? Javadocs da dediğine göre: "This event is called when the player drags an item in their cursor across the inventory."



Entity'e NBT ekleyebilirsin fakat bu NBT yi kaydedemezsin benim anlatmaya çalıştığım şeyde bu... Söylediğin cümle "her nbt leri" kapsamıyor maalesef.
Reflection ile canlandırılan Citizens NPC'leri de HumanEntity olduğu için bazen çakışmalar olabiliyor.
Onun dışında InventoryEventler oyuncuları HumanEntity olarak veriyor.Yani Player interface'indeki bazı metodları castlamadan alma şansın yok.
 

Personinblack

YASAKLANDI
En iyi cevaplar
0
"NBT" diyince aklına "Entity NBT'si" mi geliyor? Gerçekten anlamadın hala :S

Bende denedim eklemeyi ve olmadığını gördüm dediğimde bu.

Linki görebilmek için üye olmanız gerekiyor. Giriş yap veya üye ol.
Kesinlikle mümkün. Senin yapamaman bunun olmadığı anlamına gelmiyor. NBT dendiğinde aklıma entity ve itemlar üzerindeki NBT geliyor, seninde aklına bu gelmeli. Konuya dönersek buradaki amaç oyuncuların envanterlerini sayfalamak olduğundan ve bu sayfalama işini NBT ile yapmak için oyuncunun NBT si üzerinde oynamak gerektiğinden mümkün olmadığını belirtmiştim en başta. Ha tabi sen envanter içerisindeki rastgele bir item ile uğraşabileceğini düşünüyorsan bol şans dileyebilirim sadece.
 

Blueyescat

Bedrock Kaşifi
En iyi cevaplar
0
Linki görebilmek için üye olmanız gerekiyor. Giriş yap veya üye ol.
Kesinlikle mümkün. Senin yapamaman bunun olmadığı anlamına gelmiyor. NBT dendiğinde aklıma entity ve itemlar üzerindeki NBT geliyor, seninde aklına bu gelmeli. Konuya dönersek buradaki amaç oyuncuların envanterlerini sayfalamak olduğundan ve bu sayfalama işini NBT ile yapmak için oyuncunun NBT si üzerinde oynamak gerektiğinden mümkün olmadığını belirtmiştim en başta. Ha tabi sen envanter içerisindeki rastgele bir item ile uğraşabileceğini düşünüyorsan bol şans dileyebilirim sadece.
Ben burada "özel nbt tag" hakkında bir şey göremedim ve imkansız da demiyorum.
50 kere dedim, bir kere daha diyorum: DAT dosyasına nbt kaydetmekten bahsediyorum. Entity/Item değil.
 

Personinblack

YASAKLANDI
En iyi cevaplar
0
Ben burada "özel nbt tag" hakkında bir şey göremedim ve imkansız da demiyorum.
50 kere dedim, bir kere daha diyorum: DAT dosyasına nbt kaydetmekten bahsediyorum. Entity/Item değil.
Aynı metodu kullanarak kendi taglerini ekleyebileceğine eminim fakat entity bu tagi saklamayacağından yok olacaktır.
Tartışma konumuz DAT dosyası değil senin NBT üzerine söylediğin şu cümleydi: "NBT ler sıfırlansa sunucu açıldığında her entity default halde olurdu"... Bende NBT lerin entityler üzerinde sadece eğer kullanımda değillerse sıfırlandığını belirtmeye çalıştım defalarca kez. Yoksa bende biliyorum senin DAT üzerine kaydetmeyi kastettiğini.
 

Blueyescat

Bedrock Kaşifi
En iyi cevaplar
0
Konuya dönersek buradaki amaç oyuncuların envanterlerini sayfalamak olduğundan ve bu sayfalama işini NBT ile yapmak için oyuncunun NBT si üzerinde oynamak gerektiğinden mümkün olmadığını belirtmiştim en başta. Ha tabi sen envanter içerisindeki rastgele bir item ile uğraşabileceğini düşünüyorsan bol şans dileyebilirim sadece.
Aynı metodu kullanarak kendi taglerini ekleyebileceğine eminim fakat entity bu tagi saklamayacağından yok olacaktır.
Tartışma konumuz DAT dosyası değil senin NBT üzerine söylediğin şu cümleydi: "NBT ler sıfırlansa sunucu açıldığında her entity default halde olurdu"... Bende NBT lerin entityler üzerinde sadece eğer kullanımda değillerse sıfırlandığını belirtmeye çalıştım defalarca kez. Yoksa bende biliyorum senin DAT üzerine kaydetmeyi kastettiğini.
Bir dediğin bir dediğini tutsa.. Neyse uzatmanın anlamı yok.
 

CoffeeBeat

Zindev
En iyi cevaplar
0
Skellett addonunun bunun için Reflection kullandığından emin misin? Custom event kaydetmek için eklentinin (addonun) yeniden yüklenmesi gerektiğini de söyleyeyim.
Linki görebilmek için üye olmanız gerekiyor. Giriş yap veya üye ol.


Addon kullanmak performans kaybı yaratmaz. Kimse Skript'in variables sistemini kullanmak zorunda değil. Ayrıca variables sisteminin performans açısından hiçbir sıkıntılı yanını görmedim. Kanıtsız hiçbir şeye inanan biri değilim maalesef.
Maalesef Skript kullanmayı bilen ne kendi belini nede sunucunun belini kırıyor.

"NBT" diyince aklına "Entity NBT'si" mi geliyor? Gerçekten anlamadın hala :S

Bende denedim eklemeyi ve olmadığını gördüm dediğimde bu.

Valla bence yeterince körsün :p
 
Üst