[Minecraft Server] HEMSIC

Es gibt 170 Antworten in diesem Thema. Der letzte Beitrag () ist von GermanElectronix.

    [Minecraft Server] HEMSIC

    "Blaaaa, Bukkit....Java......VServer und 1GB RAM?!
    Crash!"

    Alt
    Naja...
    einige haben mitbekommen, in Spiel über mir, ich, unter mir, dass ich dabei bin die Minecraft Server Mod "bukkit" nach C# umzuschreiben.
    Das ist aber für eine Person etwas zuviel Arbeit, deswegen dachte ich mir so "Java nach C# umschrieben dürfte nicht so schwer sein, also...ran ans Werk" und da war die Idee geboren den Server umzuschreiben.
    Aktuell arbeite ich mit ²yannik: an dem Projekt.

    Was ich erreichen will: eine Alternative zu Bukkit schaffen, die nicht soviel RAM Verbraucht wie sein Java Äquivalent und etwas stabiler läuft sowie mehr Möglichkeiten Plugins zu entwickeln (in jeder .NET Fähigensprache!)

    Ich suche also möglichst viele Leute die daran schreiben und den Code übersetzen.

    Wer also Lust hat, sucht sich eine nochnicht bearbeitete Klasse heraus (aktuell ist bukkit.java komplett übersetzt worden) und lädt sie, wenn fertig übersetzt hier im Forum hoch.
    Einzige Voraussetzung:
    Der Namespace ist "BukkitCS" und die Dateien müssen den Namen von Bukkit entsprechen.
    Aktuell übersetzen wir "https://github.com/Bukkit/Bukkit/" alles davon.
    Danach ChatBukkit, HomeBukkit, ScrapBukkit und am Schluss CraftBukkit.

    Das Projekt werde ich auf einen Subversion Server kopieren, sobald es fertig ist, danach werde ich ein kleines Team an Programmierern zusammen suchen denen ich dann Zugriff auf den Server gewähre damit das Projekt weiterläuft.
    Anonymous kann man die Dateien dann herunterladen.

    Fertige Dateien:
    • Bukkit Port
    • bukkit.java
    • BlockChangeDelegate.java
    • Chunk.java
    • ChunkSnapshot.java
    • Location.java
    • TravelAgent
    • WorldCreator
    • Entity/Egg.java
    • Entity/entity.java
    • Entity/Projectile.java
    • Block/Chest.java
    • Block/ContainerBlock.java
    • Block/CreatureSpawner.java
    • Block/Dispenser.java
    • Achievements.java


    Soviel von mir aus.


    Das ist der alte Teil, damit der Kontext erhalten bleibt.
    Naja wir haben die Bukkit Konvertierung aufgehört und machen jetzt eine komplett eigene Serversoftware.

    Die Software heißt "HEMSIC" (steht hier irgendwo was das bedeuten soll :P)
    dieser Post wird auch regelmäßig aktualisiert.

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „AliveDevil“ ()

    Wie gesagt, ich würd nicht einfach stur alle Klassen übersetzen, sondern wenn den kompletten Server neu schreiben.
    Mag sein, dass .NET weniger Ram verbraucht, jedoch wird der Server sicherlich nicht stabiler.
    Danke.
    Und auch gleich wieder ne Frage:
    es gibt ja in Java Enums..wie in C#
    nur ich kann folgendes
    Java

    Quellcode

    1. public enum Achievement {
    2. OPEN_INVENTORY(0),
    3. MINE_WOOD(1),
    4. BUILD_WORKBENCH(2),
    5. BUILD_PICKAXE(3),
    6. BUILD_FURNACE(4),
    7. ACQUIRE_IRON(5),
    8. BUILD_HOE(6),
    9. MAKE_BREAD(7),
    10. BAKE_CAKE(8),
    11. BUILD_BETTER_PICKAXE(9),
    12. COOK_FISH(10),
    13. ON_A_RAIL(11),
    14. BUILD_SWORD(12),
    15. KILL_ENEMY(13),
    16. KILL_COW(14),
    17. FLY_PIG(15);
    18. public final static int STATISTIC_OFFSET = 5242880;
    19. private final static Map<Integer, Achievement> achievements = new HashMap<Integer, Achievement>();
    20. private final int id;
    21. private Achievement(int id) {
    22. this.id = STATISTIC_OFFSET + id;
    23. }
    24. public int getId() {
    25. return id;
    26. }
    27. public static Achievement getAchievement(int id) {
    28. return achievements.get(id);
    29. }
    30. static {
    31. for (Achievement ach : values()) {
    32. achievements.put(ach.getId(), ach);
    33. }
    34. }
    35. }

    Nicht nach C# übersetzen wegen diesen Funktionen im Enum, weiß jemand, wie man das trotzdem machen kann?
    Außerdem habe ich auch keinen Plan wie man das "static{}" übersetzen könnte.
    Achievement als Klasse deklarieren und die Einträge als Konstanten:

    C-Quellcode

    1. public class Achievement
    2. {
    3. public static const int OPEN_INVENTORY = 0;
    4. public static const int MINE_WOOD = 1;
    5. public static const int BUILD_WORKBENCH = 2;
    6. // ...
    7. }
    Und so static-Blöcke wie das hier:

    C-Quellcode

    1. static {
    2. for (Achievement ach : values()) {
    3. achievements.put(ach.getId(), ach);
    4. }
    5. }
    sind, so wie ich das nachgelesen habe, mehr oder weniger statische Konstruktoren.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „haiyyu“ ()

    Zum ersten: darauf wäre ich früher oder später auch gestoßen, aber danke.
    Zu dem anderen:
    das ist ja irgendwie eine foreach Schleife die irgendwie als Statisch deklariert wurde, ohne irgendeinen Zusammenhang.
    Wie kann ich die denn jetzt korrekt einbauen?

    Quellcode

    1. public void Insert(Dictionary<int, Achievement> values){
    2. foreach(...)
    3. { achievements.Add(...)}
    4. }

    Wäre eine Möglichkeit, richtig?
    Ich hab dir das mal übersetzt:

    C-Quellcode

    1. public class Achievement
    2. {
    3. public static const int OPEN_INVENTORY = 0;
    4. public static const int MINE_WOOD = 1;
    5. public static const int BUILD_WORKBENCH = 2;
    6. public static const int BUILD_PICKAXE = 3;
    7. public static const int BUILD_FURNACE = 4;
    8. public static const int ACQUIRE_IRON = 5;
    9. public static const int BUILD_HOE = 6;
    10. public static const int MAKE_BREAD = 7;
    11. public static const int BAKE_CAKE = 8;
    12. public static const int BUILD_BETTER_PICKAXE = 9;
    13. public static const int COOK_FISH = 10;
    14. public static const int ON_A_RAIL = 11;
    15. public static const int BUILD_SWORD = 12;
    16. public static const int KILL_ENEMY = 13;
    17. public static const int KILL_COW = 14;
    18. public static const int FLY_PIG = 15;
    19. public static IEnumerable<int> Values
    20. {
    21. get
    22. {
    23. yield return OPEN_INVENTORY;
    24. yield return MINE_WOOD;
    25. yield return BUILD_WORKBENCH;
    26. yield return BUILD_PICKAXE;
    27. yield return BUILD_FURNACE;
    28. yield return ACQUIRE_IRON;
    29. yield return BUILD_HOE;
    30. yield return MAKE_BREAD;
    31. yield return BAKE_CAKE;
    32. yield return BUILD_BETTER_PICKAXE;
    33. yield return COOK_FISH;
    34. yield return ON_A_RAIL;
    35. yield return BUILD_SWORD;
    36. yield return KILL_ENEMY;
    37. yield return KILL_COW;
    38. yield return FLY_PIG;
    39. }
    40. }
    41. public static const int STATISTIC_OFFSET = 5242880;
    42. private static const Dictionary<Int32, Achievement> achievements = new Dictionary<Int32, Achievement>();
    43. private static const int id;
    44. private Achievement(int id)
    45. {
    46. this.id = STATISTIC_OFFSET + id;
    47. }
    48. public int getId()
    49. {
    50. return id;
    51. }
    52. public static Achievement getAchievement(int id)
    53. {
    54. return achievements[id];
    55. }
    56. static Achievement()
    57. {
    58. for (Achievement ach in Values) {
    59. achievements.Put(ach.getId(), ach);
    60. }
    61. }
    62. }
    Ungetestet, sollte aber funktionieren.
    Es wird sich erst zeigen, wenn alles fertig ist.
    Aber schonmal Danke dafür!

    und weiter gehts^^ (das wird ein riesen Thread mit Übersetzungen^^)
    C#:

    Quellcode

    1. public override string ToString() {
    2. return String.Format("\u00At{0}", code);
    3. }

    Java:

    Quellcode

    1. @Override
    2. public String toString() {
    3. return String.format("\u00A7%x", code);
    4. }

    Fehler: Nicht erkannte Escape-Sequenz.
    Sowas Ähnliches. In Java gibt's keine Namespaces in der Hinsicht, aber die package-Anweisung lässt sich in .NET gut mit nem Namespace übersetzen.
    bei dem "static Achievement" Zeug:

    Quellcode

    1. static Achievement() {
    2. foreach (Achievement ach in Values) {
    3. achievements.Add(ach.getId(), ach);
    4. }
    5. }

    Etwas angepasst, aber es kommt der Fehler (unter foreach) :
    Fehler: Eine Konvertierung vom Typ int kann nicht in Achievement durchgeführt werden.
    Weiste, wo der Fehler liegt?
    Die Usings und der Normale Namespace sind noch falsch: Muss BukkitCS sein.

    Ich hab ein Problem: "event" wird von Bukkit als Name für ein Event verwendet, allerdings ist das in C# durch ein Schlüsselwort belegt und kann somit nicht verwendet werden.
    Dateien
    • translation.zip

      (1,72 kB, 147 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „alexanderw890i“ ()