Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c04754afe1 | |||
| 3155aa6815 | |||
| ea27b1a081 | |||
| 4d078f9597 | |||
| 67459cbbbd | |||
| 932de4e969 | |||
| 41e28291ad | |||
| 6ae6324368 | |||
| 4858716f05 |
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"homepage": "https://www.curseforge.com/minecraft/mc-mods/electroblobs-wizardry",
|
"homepage": "https://www.curseforge.com/minecraft/mc-mods/electroblobs-wizardry",
|
||||||
"promos": {
|
"promos": {
|
||||||
"1.12.2-latest": "4.3.6",
|
"1.12.2-latest": "4.3.7",
|
||||||
"1.12.2-recommended": "4.3.6"
|
"1.12.2-recommended": "4.3.7"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
---
|
|
||||||
name: Bug report
|
|
||||||
about: Report a crash or something that isn't working as it should
|
|
||||||
title: "[Give a brief, relevant title here]"
|
|
||||||
labels: bug
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Please read the [guide for contributing](https://github.com/Electroblob77/Wizardry/blob/1.12.2/CONTRIBUTING.md) before posting. You may also find the [troubleshooting page](https://github.com/Electroblob77/Wizardry/wiki/Troubleshooting) helpful.
|
|
||||||
|
|
||||||
Minecraft version: 1.12.2 [change as necessary]
|
|
||||||
Wizardry version: 4.3.6 [change as necessary]
|
|
||||||
Environment: Singleplayer/LAN game/Server [delete as necessary]
|
|
||||||
|
|
||||||
Issue details: [describe what you were doing when the issue occurred, what went wrong, what you expected to happen, etc.]
|
|
||||||
|
|
||||||
Other mods involved: [only list mods that are relevant to the problem]
|
|
||||||
|
|
||||||
Link to crash report (if applicable): [give a link to the crash report on gist, pastebin, etc.]
|
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
name: 🐛 Bug Report
|
||||||
|
description: Something is not working as expected
|
||||||
|
title: "[Bug] <write the title here>"
|
||||||
|
labels: [ "bug", "Needs Triage" ]
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Please read the [guide for contributing](https://github.com/Electroblob77/Wizardry/blob/1.12.2/CONTRIBUTING.md) before posting. You may also find the [troubleshooting page](https://github.com/Electroblob77/Wizardry/wiki/Troubleshooting) helpful.
|
||||||
|
Please try the latest version of the mod and check if the issue persist before submitting a report.
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Is there an existing issue for this?
|
||||||
|
description: Please search to see if an issue already exists for the bug you encountered.
|
||||||
|
options:
|
||||||
|
- label: I have searched the existing issues
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: observed
|
||||||
|
attributes:
|
||||||
|
label: Observed behaviour
|
||||||
|
description: Describe what happened and when this happened
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: expected
|
||||||
|
attributes:
|
||||||
|
label: Expected behaviour
|
||||||
|
description: Describe what you expected to happen
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: reproduction
|
||||||
|
attributes:
|
||||||
|
label: Steps to reproduce
|
||||||
|
description: Step by step instructions on how to reproduce the observed behaviour
|
||||||
|
placeholder: |
|
||||||
|
1. Join a server
|
||||||
|
2. Cast the [spell]
|
||||||
|
3. ...
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
id: crashlog
|
||||||
|
attributes:
|
||||||
|
label: Crashlog
|
||||||
|
description: If this was a crash, grab [minecraft instance]/logs/debug.log, upload it as a [gist](https://gist.github.com/) and paste the link here. Alternatively, give a link to the crash report on gist, pastebin if you already have one there.
|
||||||
|
placeholder: https://gist.github.com/<your-user>/abcdef124
|
||||||
|
- type: dropdown
|
||||||
|
id: environment
|
||||||
|
attributes:
|
||||||
|
label: Environment (Singleplayer/Server, etc.)
|
||||||
|
options:
|
||||||
|
- Singleplayer
|
||||||
|
- LAN game/Server
|
||||||
|
- Issue present on both sides
|
||||||
|
- Not sure
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
id: mod-version
|
||||||
|
attributes:
|
||||||
|
label: Mod version
|
||||||
|
placeholder: 1.0.0
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
id: minecraft-version
|
||||||
|
attributes:
|
||||||
|
label: Minecraft version
|
||||||
|
placeholder: 12.2.2
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
id: forge-version
|
||||||
|
attributes:
|
||||||
|
label: Forge version
|
||||||
|
placeholder: 1.12.2 - 14.23.5.2860
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: other-mods
|
||||||
|
attributes:
|
||||||
|
label: Other mods
|
||||||
|
description: List any other mods present when the bug was encountered, include the mod versions. You only have to fill this if no crash log was attached
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: 📖 Mod Wiki Page
|
||||||
|
url: https://github.com/Electroblob77/Wizardry/wiki
|
||||||
|
about: Most features are documented in the mod's wiki page --- Link --->
|
||||||
|
- name: 💬 Electroblob's Wizardry discord
|
||||||
|
url: https://discord.gg/hs8yJP2
|
||||||
|
about: Ask for help or get more info on Discord. --- Discord Server link --->
|
||||||
|
- name: 💡 Feature requests / suggestions
|
||||||
|
url: https://discord.gg/hs8yJP2
|
||||||
|
about: Please use the discord server to suggest stuff. --- Discord Server link --->
|
||||||
|
- name: ❓ Question
|
||||||
|
url: https://discord.gg/hs8yJP2
|
||||||
|
about: Ask a question about the mod or the code. --- Discord Server link --->
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
---
|
|
||||||
name: Feature request
|
|
||||||
about: Make a suggestion for improving the mod
|
|
||||||
title: "[Give a brief, relevant title here]"
|
|
||||||
labels: enhancement
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Please read the [guide for contributing](https://github.com/Electroblob77/Wizardry/blob/1.12.2/CONTRIBUTING.md) before posting.
|
|
||||||
|
|
||||||
Minecraft versions: [if this suggestion only applies to some versions, list them here]
|
|
||||||
|
|
||||||
Suggestion details: [describe what you would like to see added to the mod and why]
|
|
||||||
|
|
||||||
Other mods involved: [if this suggestion involves integration with other mods, list them here]
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
---
|
|
||||||
name: Question
|
|
||||||
about: Ask a question about the mod or the code
|
|
||||||
title: "[Give a brief, relevant title here]"
|
|
||||||
labels: question
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Please read the [guide for contributing](https://github.com/Electroblob77/Wizardry/blob/1.12.2/CONTRIBUTING.md) before posting.
|
|
||||||
|
|
||||||
Minecraft version: 1.12.2 [change as necessary]
|
|
||||||
Wizardry version: [change as necessary]
|
|
||||||
|
|
||||||
Question details: [explain your question here]
|
|
||||||
|
|
||||||
Other mods involved: [if this question involves other mods, list them here]
|
|
||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
# Credits
|
# Credits
|
||||||
|
|
||||||
Electroblob's Wizardry
|
Electroblob's Wizardry
|
||||||
Version 4.3.6
|
Version 4.3.7
|
||||||
For Minecraft 1.12.2
|
For Minecraft 1.12.2
|
||||||
|
|
||||||
Designed, coded and textured by Electroblob
|
Designed, coded and textured by Electroblob
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ 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.
|
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
|
||||||
|
|
||||||
|
|
||||||
version = "4.3.6" // There, it matches semver, happy now?
|
version = "4.3.7"
|
||||||
group= "electroblob.wizardry"// http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
group= "electroblob.wizardry"// http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||||
archivesBaseName = "ElectroblobsWizardry"
|
archivesBaseName = "ElectroblobsWizardry"
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import electroblob.wizardry.registry.WizardryItems;
|
|||||||
import electroblob.wizardry.registry.WizardryLoot;
|
import electroblob.wizardry.registry.WizardryLoot;
|
||||||
import electroblob.wizardry.registry.WizardrySounds;
|
import electroblob.wizardry.registry.WizardrySounds;
|
||||||
import electroblob.wizardry.spell.Spell;
|
import electroblob.wizardry.spell.Spell;
|
||||||
|
import electroblob.wizardry.util.SpellNetworkIDSorter;
|
||||||
import electroblob.wizardry.util.SpellProperties;
|
import electroblob.wizardry.util.SpellProperties;
|
||||||
import electroblob.wizardry.util.WandHelper;
|
import electroblob.wizardry.util.WandHelper;
|
||||||
import electroblob.wizardry.worldgen.WorldGenCrystalFlower;
|
import electroblob.wizardry.worldgen.WorldGenCrystalFlower;
|
||||||
@@ -81,7 +82,7 @@ public class Wizardry {
|
|||||||
* 1.x.x represents Minecraft 1.7.x versions, 2.x.x represents Minecraft 1.10.x versions, 3.x.x represents Minecraft
|
* 1.x.x represents Minecraft 1.7.x versions, 2.x.x represents Minecraft 1.10.x versions, 3.x.x represents Minecraft
|
||||||
* 1.11.x versions, and so on.
|
* 1.11.x versions, and so on.
|
||||||
*/
|
*/
|
||||||
public static final String VERSION = "4.3.6";
|
public static final String VERSION = "4.3.7";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Json file used by Forge's built-in <a href="https://mcforge.readthedocs.io/en/1.12.x/gettingstarted/autoupdate/">update checker</a>.
|
* Json file used by Forge's built-in <a href="https://mcforge.readthedocs.io/en/1.12.x/gettingstarted/autoupdate/">update checker</a>.
|
||||||
@@ -202,6 +203,8 @@ public class Wizardry {
|
|||||||
public void postInit(FMLPostInitializationEvent event){
|
public void postInit(FMLPostInitializationEvent event){
|
||||||
proxy.initialiseLayers();
|
proxy.initialiseLayers();
|
||||||
proxy.initialiseAnimations();
|
proxy.initialiseAnimations();
|
||||||
|
|
||||||
|
SpellNetworkIDSorter.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
|||||||
@@ -20,14 +20,8 @@ public class PacketSpellProperties implements IMessageHandler<PacketSpellPropert
|
|||||||
if(ctx.side.isClient()){
|
if(ctx.side.isClient()){
|
||||||
|
|
||||||
net.minecraft.client.Minecraft.getMinecraft().addScheduledTask(() -> {
|
net.minecraft.client.Minecraft.getMinecraft().addScheduledTask(() -> {
|
||||||
|
for(int i=0; i<message.propertiesArray.length; i++){
|
||||||
int spellId = message.firstId;
|
Spell.byNetworkID(i).setPropertiesClient(message.propertiesArray[i]);
|
||||||
|
|
||||||
for(int i = 0; i <message.propertiesArray.length; i++){
|
|
||||||
Spell spell = Spell.byNetworkID(spellId);
|
|
||||||
SpellProperties props = message.propertiesArray[i];
|
|
||||||
spell.setPropertiesClient(props);
|
|
||||||
spellId++;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -38,31 +32,22 @@ public class PacketSpellProperties implements IMessageHandler<PacketSpellPropert
|
|||||||
public static class Message implements IMessage {
|
public static class Message implements IMessage {
|
||||||
|
|
||||||
private SpellProperties[] propertiesArray;
|
private SpellProperties[] propertiesArray;
|
||||||
private int firstId;
|
|
||||||
private int count;
|
|
||||||
// This constructor is required otherwise you'll get errors (used somewhere in fml through reflection)
|
// This constructor is required otherwise you'll get errors (used somewhere in fml through reflection)
|
||||||
public Message(){}
|
public Message(){}
|
||||||
|
|
||||||
public Message(int firstId, int count, SpellProperties... properties){
|
public Message(SpellProperties... properties){
|
||||||
this.firstId = firstId;
|
|
||||||
this.count = count;
|
|
||||||
this.propertiesArray = properties;
|
this.propertiesArray = properties;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fromBytes(ByteBuf buf){
|
public void fromBytes(ByteBuf buf){
|
||||||
List<SpellProperties> propertiesList = new ArrayList<>();
|
|
||||||
firstId = buf.readInt();
|
|
||||||
count = buf.readInt();
|
|
||||||
|
|
||||||
int k = 0;
|
List<SpellProperties> propertiesList = new ArrayList<>();
|
||||||
int j = firstId;
|
int i = 0;
|
||||||
while(k < count){
|
|
||||||
SpellProperties props = new SpellProperties(Spell.byNetworkID(j), buf);
|
while(buf.isReadable()){
|
||||||
propertiesList.add(props);
|
propertiesList.add(new SpellProperties(Spell.byNetworkID(i++), buf));
|
||||||
k++;
|
|
||||||
j++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
propertiesArray = propertiesList.toArray(new SpellProperties[0]);
|
propertiesArray = propertiesList.toArray(new SpellProperties[0]);
|
||||||
@@ -70,8 +55,6 @@ public class PacketSpellProperties implements IMessageHandler<PacketSpellPropert
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void toBytes(ByteBuf buf){
|
public void toBytes(ByteBuf buf){
|
||||||
buf.writeInt(firstId);
|
|
||||||
buf.writeInt(count);
|
|
||||||
for(SpellProperties properties : propertiesArray) properties.write(buf);
|
for(SpellProperties properties : propertiesArray) properties.write(buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -189,7 +189,7 @@ public abstract class Spell extends IForgeRegistryEntry.Impl<Spell> implements C
|
|||||||
private static int nextSpellId = 0;
|
private static int nextSpellId = 0;
|
||||||
/** The spell's integer ID, mainly used for networking. */
|
/** The spell's integer ID, mainly used for networking. */
|
||||||
// This was added after I learnt the hard way why you can't assume Forge's registry IDs are sequential...
|
// This was added after I learnt the hard way why you can't assume Forge's registry IDs are sequential...
|
||||||
private final int id;
|
private int id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This constructor should be called from any subclasses, either feeding in the constants directly or through their
|
* This constructor should be called from any subclasses, either feeding in the constants directly or through their
|
||||||
@@ -225,6 +225,7 @@ public abstract class Spell extends IForgeRegistryEntry.Impl<Spell> implements C
|
|||||||
this.icon = new ResourceLocation(modID, "textures/spells/" + name + ".png");
|
this.icon = new ResourceLocation(modID, "textures/spells/" + name + ".png");
|
||||||
this.sounds = createSounds();
|
this.sounds = createSounds();
|
||||||
this.id = nextSpellId++;
|
this.id = nextSpellId++;
|
||||||
|
Wizardry.logger.debug("Registering spell " + this.unlocalisedName +" with networkID " + id);
|
||||||
this.items(WizardryItems.spell_book, WizardryItems.scroll);
|
this.items(WizardryItems.spell_book, WizardryItems.scroll);
|
||||||
this.npcSelector((e, o) -> false);
|
this.npcSelector((e, o) -> false);
|
||||||
}
|
}
|
||||||
@@ -319,24 +320,8 @@ public abstract class Spell extends IForgeRegistryEntry.Impl<Spell> implements C
|
|||||||
// To avoid sending extra data unnecessarily, the spell properties are sent in order of spell ID
|
// To avoid sending extra data unnecessarily, the spell properties are sent in order of spell ID
|
||||||
List<Spell> spells = new ArrayList<>(registry.getValuesCollection());
|
List<Spell> spells = new ArrayList<>(registry.getValuesCollection());
|
||||||
spells.sort(Comparator.comparingInt(Spell::networkID));
|
spells.sort(Comparator.comparingInt(Spell::networkID));
|
||||||
|
WizardryPacketHandler.net.sendTo(new PacketSpellProperties.Message(spells.stream()
|
||||||
SpellProperties[] propertiesArray = spells.stream().map(s -> s.properties).toArray(SpellProperties[]::new);
|
.map(s -> s.properties).toArray(SpellProperties[]::new)), player);
|
||||||
|
|
||||||
// splitting the packet into batches of 100 spells
|
|
||||||
int i = 0;
|
|
||||||
while (i < propertiesArray.length) {
|
|
||||||
List<SpellProperties> propertiesList = new ArrayList<>();
|
|
||||||
int first = i;
|
|
||||||
int batchCounter = 0;
|
|
||||||
for (int currentIndex = i; currentIndex < propertiesArray.length && batchCounter < 100; currentIndex++) {
|
|
||||||
propertiesList.add(propertiesArray[currentIndex]);
|
|
||||||
batchCounter++;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
SpellProperties[] currentArray = propertiesList.toArray(new SpellProperties[0]);
|
|
||||||
PacketSpellProperties.Message currentPacket = new PacketSpellProperties.Message(first, currentArray.length, currentArray);
|
|
||||||
WizardryPacketHandler.net.sendTo(currentPacket, player);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void clearProperties(){
|
private static void clearProperties(){
|
||||||
@@ -576,6 +561,11 @@ public abstract class Spell extends IForgeRegistryEntry.Impl<Spell> implements C
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Sets the networkID of this spell. Do not call this or it will cause all packets to fail. */
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
/** Returns the {@code ResourceLocation} for this spell's icon. */
|
/** Returns the {@code ResourceLocation} for this spell's icon. */
|
||||||
public final ResourceLocation getIcon(){
|
public final ResourceLocation getIcon(){
|
||||||
return icon;
|
return icon;
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package electroblob.wizardry.util;
|
||||||
|
|
||||||
|
import electroblob.wizardry.Wizardry;
|
||||||
|
import electroblob.wizardry.spell.Spell;
|
||||||
|
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper class which ensures that all spellpack spell networkIDs are distributed in alphabetical order. Introducing this was necessary as mods (especially with
|
||||||
|
* (load-after) dependencies were not always registering their spells in the exact same order. This is definitely
|
||||||
|
*/
|
||||||
|
public class SpellNetworkIDSorter {
|
||||||
|
|
||||||
|
public static void init() {
|
||||||
|
|
||||||
|
//reorder network IDs based on addon modids. This is necessary as modloading order doesn't seem to be guaranteed to match between various servers and clients
|
||||||
|
Wizardry.logger.debug("Reordering all spell NetworkIDs based on addon modid alphabetical order");
|
||||||
|
|
||||||
|
// the first available ID after all default spells
|
||||||
|
int nextSpellId = (int) Spell.getAllSpells().stream().filter(spell -> spell.getRegistryName().getNamespace().equals(Wizardry.MODID)).count() + 1;
|
||||||
|
List<Spell> addonSpells = Spell.getAllSpells().stream().filter(spell -> !spell.getRegistryName().getNamespace().equals(Wizardry.MODID)).collect(Collectors.toList());
|
||||||
|
|
||||||
|
// sorting spells
|
||||||
|
addonSpells.sort(Comparator.comparing((Spell o) -> o.getRegistryName().toString()));
|
||||||
|
for (Spell spell : addonSpells) {
|
||||||
|
Wizardry.logger.debug("Updating networkID of spell " + spell.getRegistryName().toString() + " from " + spell.networkID() + " to " + nextSpellId);
|
||||||
|
spell.setId(nextSpellId++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
{
|
{
|
||||||
"modid" : "ebwizardry",
|
"modid" : "ebwizardry",
|
||||||
"name" : "Electroblob's Wizardry",
|
"name" : "Electroblob's Wizardry",
|
||||||
"version" : "4.3.6",
|
"version" : "4.3.7",
|
||||||
"mcversion" : "1.12.2",
|
"mcversion" : "1.12.2",
|
||||||
"url" : "https://minecraft.curseforge.com/projects/electroblobs-wizardry",
|
"url" : "https://minecraft.curseforge.com/projects/electroblobs-wizardry",
|
||||||
"credits" : "\nDesigned, coded and textured by Electroblob.\nDiscord Moderators: FavouriteDragon, WinDanesz\nCode contributed by: Corail31, 12foo, Shadows-of-Fire, Tora-B, Avatair, Aeronica, UltraHex, Azim-Palmer, raoulvdberge, rafasoares, xinyuan-liu, SettingDust, Aralu115.\nTranslators: Alsentar (Spanish), MadWrist (Mexican Spanish), VilagVil, kellixon, bigenergy, MugGod2 & DrHesperus (Russian), Hahdrim & Crowller (French), lorrampi (Brazilian Portuguese), ZHENGLOC, dragon-evol, Hokorizero, TUsama & Determancer (Chinese - Simplified), shejery, rewi_wire, 방통 & red1854th (Korean), Trozuu & Olej (Polish), BirdyDragon & Lemopav (German), chesterccj305 (Chinese - Traditional), Bombadil (Hungarian).\nSound Effects: OhhWowProductions, fredzed, deleted_user_3277771, DiscoveryME, OGSoundFX, leosalom, juskiddink",
|
"credits" : "\nDesigned, coded and textured by Electroblob.\nDiscord Moderators: FavouriteDragon, WinDanesz\nCode contributed by: Corail31, 12foo, Shadows-of-Fire, Tora-B, Avatair, Aeronica, UltraHex, Azim-Palmer, raoulvdberge, rafasoares, xinyuan-liu, SettingDust, Aralu115.\nTranslators: Alsentar (Spanish), MadWrist (Mexican Spanish), VilagVil, kellixon, bigenergy, MugGod2 & DrHesperus (Russian), Hahdrim & Crowller (French), lorrampi (Brazilian Portuguese), ZHENGLOC, dragon-evol, Hokorizero, TUsama & Determancer (Chinese - Simplified), shejery, rewi_wire, 방통 & red1854th (Korean), Trozuu & Olej (Polish), BirdyDragon & Lemopav (German), chesterccj305 (Chinese - Traditional), Bombadil (Hungarian).\nSound Effects: OhhWowProductions, fredzed, deleted_user_3277771, DiscoveryME, OGSoundFX, leosalom, juskiddink",
|
||||||
|
|||||||
Reference in New Issue
Block a user