add zombie, prototype of new entity system (wip)

This commit is contained in:
Bixilon 2020-11-12 21:48:51 +01:00
parent 707fc357bc
commit e869478e79
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
27 changed files with 404 additions and 36 deletions

View File

@ -0,0 +1,32 @@
/*
* Minosoft
* Copyright (C) 2020 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program.If not, see <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.data;
import com.google.common.collect.HashBiMap;
import de.bixilon.minosoft.data.entities.entities.Entity;
import de.bixilon.minosoft.data.entities.entities.Zombie;
import javafx.util.Pair;
public final class EntityClassMappings {
public static final HashBiMap<Class<? extends Entity>, Pair<String, String>> ENTITY_CLASS_MAPPINGS = HashBiMap.create();
static {
ENTITY_CLASS_MAPPINGS.put(Zombie.class, new Pair<>("minecraft", "zombie"));
}
public static Class<? extends Entity> getByIdentifier(String mod, String identifier) {
return ENTITY_CLASS_MAPPINGS.inverse().get(new Pair<>(mod, identifier));
}
}

View File

@ -15,5 +15,6 @@ package de.bixilon.minosoft.data;
public enum Mappings {
BLOCKS,
REGISTRIES
REGISTRIES,
ENTITIES
}

View File

@ -13,8 +13,8 @@
package de.bixilon.minosoft.data;
import de.bixilon.minosoft.data.entities.Entity;
import de.bixilon.minosoft.data.entities.Velocity;
import de.bixilon.minosoft.data.entities.entities.Entity;
import de.bixilon.minosoft.protocol.network.Connection;
import java.util.HashMap;

View File

@ -32,6 +32,14 @@ public class EntityInformation {
this.height = height;
}
public EntityInformation(String mod, String identifier, int maxHealth, int width, int height) {
this.mod = mod;
this.identifier = identifier;
this.maxHealth = maxHealth;
this.width = this.length = width;
this.height = height;
}
public String getMod() {
return mod;
}

View File

@ -203,7 +203,7 @@ public class EntityMetaData {
}
public Object get(EntityMetaDataFields field) {
int index = connection.getMapping().getEntityMappings().getEntityMetaDatIndex(field);
int index = connection.getMapping().getEntityMetaDatIndex(field);
if (containsKey(index)) {
return super.get(index);
}

View File

@ -29,7 +29,13 @@ public enum EntityMetaDataFields {
LIVING_ENTITY_EFFECT_AMBIENCE(false),
LIVING_ENTITY_ARROW_COUNT(0),
LIVING_ENTITY_ABSORPTION_HEARTS(0),
LIVING_ENTITY_BED_POSITION;
LIVING_ENTITY_BED_POSITION,
MOB_FLAGS(0),
ZOMBIE_IS_BABY(false),
ZOMBIE_SPECIAL_TYPE(0),
ZOMBIE_DROWNING_CONVERSION(false);
final Object defaultValue;

View File

@ -14,6 +14,7 @@
package de.bixilon.minosoft.data.entities;
import com.google.common.collect.HashBiMap;
import de.bixilon.minosoft.data.entities.entities.Entity;
public enum Objects {
/*

View File

@ -11,8 +11,9 @@
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.data.entities;
package de.bixilon.minosoft.data.entities.entities;
import de.bixilon.minosoft.data.entities.*;
import de.bixilon.minosoft.data.inventory.InventorySlots;
import de.bixilon.minosoft.data.inventory.Slot;
import de.bixilon.minosoft.data.mappings.MobEffect;
@ -37,7 +38,7 @@ public abstract class Entity {
protected EntityMetaData metaData;
public Entity(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) {
this.information = connection.getMapping().getEntityMappings().getEntityInformation(getClass());
this.information = connection.getMapping().getEntityInformation(getClass());
this.entityId = entityId;
this.uuid = uuid;
this.location = location;
@ -136,7 +137,6 @@ public abstract class Entity {
return information;
}
// meta data
private boolean getEntityFlag(int bitMask) {
return metaData.getSets().getBitMask(EntityMetaDataFields.ENTITY_FLAGS, bitMask);

View File

@ -11,8 +11,11 @@
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.data.entities;
package de.bixilon.minosoft.data.entities.entities;
import de.bixilon.minosoft.data.entities.EntityMetaDataFields;
import de.bixilon.minosoft.data.entities.EntityRotation;
import de.bixilon.minosoft.data.entities.Location;
import de.bixilon.minosoft.data.player.Hands;
import de.bixilon.minosoft.data.world.BlockPosition;
import de.bixilon.minosoft.protocol.network.Connection;
@ -24,7 +27,7 @@ public abstract class LivingEntity extends Entity {
super(connection, entityId, uuid, location, rotation);
}
// meta data
private boolean getLivingEntityFlag(int bitMask) {
return metaData.getSets().getBitMask(EntityMetaDataFields.LIVING_ENTITY_FLAGS, bitMask);
}

View File

@ -0,0 +1,45 @@
/*
* Minosoft
* Copyright (C) 2020 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program.If not, see <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.data.entities.entities;
import de.bixilon.minosoft.data.entities.EntityMetaDataFields;
import de.bixilon.minosoft.data.entities.EntityRotation;
import de.bixilon.minosoft.data.entities.Location;
import de.bixilon.minosoft.protocol.network.Connection;
import java.util.UUID;
public abstract class Mob extends LivingEntity {
public Mob(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) {
super(connection, entityId, uuid, location, rotation);
}
private boolean getMobFlags(int bitMask) {
return metaData.getSets().getBitMask(EntityMetaDataFields.MOB_FLAGS, bitMask);
}
public boolean isNoAi() {
return getMobFlags(0x01);
}
public boolean isLeftHanded() {
return getMobFlags(0x02);
}
public boolean isAggressive() {
return getMobFlags(0x04);
}
}

View File

@ -0,0 +1,27 @@
/*
* Minosoft
* Copyright (C) 2020 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program.If not, see <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.data.entities.entities;
import de.bixilon.minosoft.data.entities.EntityRotation;
import de.bixilon.minosoft.data.entities.Location;
import de.bixilon.minosoft.protocol.network.Connection;
import java.util.UUID;
public abstract class Monster extends PathfinderMob {
public Monster(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) {
super(connection, entityId, uuid, location, rotation);
}
}

View File

@ -0,0 +1,27 @@
/*
* Minosoft
* Copyright (C) 2020 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program.If not, see <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.data.entities.entities;
import de.bixilon.minosoft.data.entities.EntityRotation;
import de.bixilon.minosoft.data.entities.Location;
import de.bixilon.minosoft.protocol.network.Connection;
import java.util.UUID;
public abstract class PathfinderMob extends Mob {
public PathfinderMob(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) {
super(connection, entityId, uuid, location, rotation);
}
}

View File

@ -0,0 +1,41 @@
/*
* Minosoft
* Copyright (C) 2020 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program.If not, see <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.data.entities.entities;
import de.bixilon.minosoft.data.entities.EntityMetaDataFields;
import de.bixilon.minosoft.data.entities.EntityRotation;
import de.bixilon.minosoft.data.entities.Location;
import de.bixilon.minosoft.protocol.network.Connection;
import java.util.UUID;
public class Zombie extends Monster {
public Zombie(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) {
super(connection, entityId, uuid, location, rotation);
}
public boolean isBaby() {
return metaData.getSets().getBoolean(EntityMetaDataFields.ZOMBIE_IS_BABY);
}
public int getSpecialType() {
return metaData.getSets().getInt(EntityMetaDataFields.ZOMBIE_SPECIAL_TYPE);
}
public boolean isConvertingToDrowned() {
return metaData.getSets().getBoolean(EntityMetaDataFields.ZOMBIE_DROWNING_CONVERSION);
}
}

View File

@ -14,6 +14,9 @@
package de.bixilon.minosoft.data.mappings;
import com.google.common.collect.HashBiMap;
import de.bixilon.minosoft.data.entities.EntityInformation;
import de.bixilon.minosoft.data.entities.EntityMetaDataFields;
import de.bixilon.minosoft.data.entities.entities.Entity;
import de.bixilon.minosoft.data.mappings.blocks.Block;
import de.bixilon.minosoft.data.mappings.particle.Particle;
import de.bixilon.minosoft.data.mappings.statistics.Statistic;
@ -35,7 +38,7 @@ public class CustomMapping {
final HashBiMap<Integer, Enchantment> enchantmentMap = HashBiMap.create();
final HashBiMap<Integer, Particle> particleIdMap = HashBiMap.create();
final HashBiMap<Integer, Statistic> statisticIdMap = HashBiMap.create();
final EntityMappings entityMappings = null; //ToDo
final EntityMappings entityMappings = new EntityMappings();
Version version;
HashMap<String, HashBiMap<String, Dimension>> dimensionIdentifierMap = new HashMap<>();
@ -186,6 +189,17 @@ public class CustomMapping {
return version.getMapping().getIdByEnchantment(enchantment);
}
public EntityInformation getEntityInformation(Class<? extends Entity> clazz) {
if (entityMappings.getEntityInformation(clazz) != null) {
return entityMappings.getEntityInformation(clazz);
}
return version.getMapping().getEntityInformation(clazz);
}
public int getEntityMetaDatIndex(EntityMetaDataFields field) {
return version.getMapping().getEntityMetaDatIndex(field);
}
public void unload() {
motiveIdentifierMap.clear();
particleIdentifierMap.clear();
@ -206,7 +220,10 @@ public class CustomMapping {
dimensionIdentifierMap = dimensions;
}
public EntityMappings getEntityMappings() {
return entityMappings;
public Class<? extends Entity> getEntityClassById(int id) {
if (entityMappings.getEntityClassById(id) != null) {
return entityMappings.getEntityClassById(id);
}
return version.getMapping().getEntityClassById(id);
}
}

View File

@ -14,18 +14,38 @@
package de.bixilon.minosoft.data.mappings;
import com.google.common.collect.HashBiMap;
import de.bixilon.minosoft.data.entities.Entity;
import de.bixilon.minosoft.data.entities.EntityInformation;
import de.bixilon.minosoft.data.entities.EntityMetaDataFields;
import de.bixilon.minosoft.data.entities.entities.Entity;
import java.util.HashMap;
public class EntityMappings {
private final HashBiMap<Class<? extends Entity>, EntityInformation> entityInformationMap = HashBiMap.create();
private final HashBiMap<Class<? extends Entity>, EntityInformation> entityInformationMap;
private final HashMap<EntityMetaDataFields, Integer> indexMapping;
private final HashBiMap<Integer, Class<? extends Entity>> entityIdMapping;
public EntityMappings() {
this.entityInformationMap = HashBiMap.create();
this.indexMapping = new HashMap<>();
this.entityIdMapping = HashBiMap.create();
}
public EntityMappings(HashBiMap<Class<? extends Entity>, EntityInformation> entityInformationMap, HashMap<EntityMetaDataFields, Integer> indexMapping, HashBiMap<Integer, Class<? extends Entity>> entityIdMapping) {
this.entityInformationMap = entityInformationMap;
this.indexMapping = indexMapping;
this.entityIdMapping = entityIdMapping;
}
public EntityInformation getEntityInformation(Class<? extends Entity> clazz) {
return entityInformationMap.get(clazz);
}
public int getEntityMetaDatIndex(EntityMetaDataFields field) {
return 0; // ToDo
return indexMapping.get(field);
}
public Class<? extends Entity> getEntityClassById(int id) {
return entityIdMapping.get(id);
}
}

View File

@ -15,7 +15,11 @@ package de.bixilon.minosoft.data.mappings.versions;
import com.google.common.collect.HashBiMap;
import com.google.gson.JsonObject;
import de.bixilon.minosoft.data.EntityClassMappings;
import de.bixilon.minosoft.data.Mappings;
import de.bixilon.minosoft.data.entities.EntityInformation;
import de.bixilon.minosoft.data.entities.EntityMetaDataFields;
import de.bixilon.minosoft.data.entities.entities.Entity;
import de.bixilon.minosoft.data.mappings.*;
import de.bixilon.minosoft.data.mappings.blocks.Block;
import de.bixilon.minosoft.data.mappings.blocks.Blocks;
@ -23,6 +27,7 @@ import de.bixilon.minosoft.data.mappings.particle.Particle;
import de.bixilon.minosoft.data.mappings.statistics.Statistic;
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition;
import java.util.HashMap;
import java.util.HashSet;
public class VersionMapping {
@ -32,7 +37,6 @@ public class VersionMapping {
HashBiMap<String, Particle> particleIdentifierMap;
HashBiMap<String, Statistic> statisticIdentifierMap;
HashBiMap<Integer, Item> itemMap;
HashBiMap<Integer, String> entityMap;
HashBiMap<Integer, Motive> motiveIdMap;
HashBiMap<Integer, MobEffect> mobEffectMap;
HashBiMap<Integer, Dimension> dimensionMap;
@ -41,6 +45,7 @@ public class VersionMapping {
HashBiMap<Integer, Enchantment> enchantmentMap;
HashBiMap<Integer, Particle> particleIdMap;
HashBiMap<Integer, Statistic> statisticIdMap;
EntityMappings entityMappings;
public VersionMapping(Version version) {
this.version = version;
@ -66,10 +71,6 @@ public class VersionMapping {
return itemMap.inverse().get(item);
}
public String getEntityIdentifierById(int versionId) {
return "minecraft:" + entityMap.get(versionId);
}
public Motive getMotiveById(int versionId) {
return motiveIdMap.get(versionId);
}
@ -128,11 +129,6 @@ public class VersionMapping {
}
itemMap.put(itemId, item);
}
entityMap = HashBiMap.create();
JsonObject entityJson = data.getAsJsonObject("entity_type").getAsJsonObject("entries");
for (String identifier : entityJson.keySet()) {
entityMap.put(entityJson.getAsJsonObject(identifier).get("id").getAsInt(), identifier);
}
enchantmentMap = HashBiMap.create();
JsonObject enchantmentJson = data.getAsJsonObject("enchantment").getAsJsonObject("entries");
for (String identifier : enchantmentJson.keySet()) {
@ -191,6 +187,36 @@ public class VersionMapping {
}
}
case BLOCKS -> blockMap = Blocks.load("minecraft", data, version.getVersionId() < ProtocolDefinition.FLATTING_VERSION_ID);
case ENTITIES -> {
HashBiMap<Class<? extends Entity>, EntityInformation> entityInformationMap = HashBiMap.create();
HashMap<EntityMetaDataFields, Integer> indexMapping = new HashMap<>();
HashBiMap<Integer, Class<? extends Entity>> entityIdMap = HashBiMap.create();
for (String mod : data.keySet()) {
JsonObject modJson = data.getAsJsonObject(mod);
for (String identifier : modJson.keySet()) {
JsonObject identifierJson = modJson.getAsJsonObject(identifier);
if (!identifier.startsWith("~abstract")) {
// not abstract, has attributes
Class<? extends Entity> clazz = EntityClassMappings.getByIdentifier(mod, identifier);
entityInformationMap.put(clazz, new EntityInformation(mod, identifier, identifierJson.get("maxHealth").getAsInt(), identifierJson.get("length").getAsInt(), identifierJson.get("width").getAsInt(), identifierJson.get("height").getAsInt()));
entityIdMap.put(identifierJson.get("id").getAsInt(), clazz);
}
// meta data index
if (identifierJson.has("data")) {
JsonObject metaDataJson = identifierJson.getAsJsonObject("data");
for (String field : metaDataJson.keySet()) {
indexMapping.put(EntityMetaDataFields.valueOf(field), metaDataJson.get(field).getAsInt());
}
}
}
}
entityMappings = new EntityMappings(entityInformationMap, indexMapping, entityIdMap);
}
}
loaded.add(type);
}
@ -200,7 +226,6 @@ public class VersionMapping {
particleIdentifierMap.clear();
statisticIdentifierMap.clear();
itemMap.clear();
entityMap.clear();
motiveIdMap.clear();
mobEffectMap.clear();
dimensionMap.clear();
@ -219,4 +244,16 @@ public class VersionMapping {
}
return true;
}
public EntityInformation getEntityInformation(Class<? extends Entity> clazz) {
return entityMappings.getEntityInformation(clazz);
}
public int getEntityMetaDatIndex(EntityMetaDataFields field) {
return entityMappings.getEntityMetaDatIndex(field);
}
public Class<? extends Entity> getEntityClassById(int id) {
return entityMappings.getEntityClassById(id);
}
}

View File

@ -40,6 +40,7 @@ public class Versions {
static {
mappingsHashMap.put("registries", Mappings.REGISTRIES);
mappingsHashMap.put("blocks", Mappings.BLOCKS);
mappingsHashMap.put("entities", Mappings.ENTITIES);
}
public static Version getVersionById(int versionId) {
@ -125,7 +126,13 @@ public class Versions {
HashMap<String, JsonObject> files = Util.readJsonTarStream(AssetsManager.readAssetAsStream(String.format("mappings/%s", version.getVersionName())));
for (Map.Entry<String, Mappings> mappingSet : mappingsHashMap.entrySet()) {
JsonObject data = files.get(mappingSet.getKey() + ".json").getAsJsonObject("minecraft");
JsonObject data;
//ToDo
if (mappingSet.getValue() == Mappings.ENTITIES) {
data = Util.readJsonAsset("mapping/entities.json"); // ToDo
} else {
data = files.get(mappingSet.getKey() + ".json").getAsJsonObject("minecraft");
}
loadVersionMappings(mappingSet.getValue(), data, versionId);
}

View File

@ -13,8 +13,8 @@
package de.bixilon.minosoft.data.world;
import de.bixilon.minosoft.data.entities.Entity;
import de.bixilon.minosoft.data.entities.block.BlockEntityMetaData;
import de.bixilon.minosoft.data.entities.entities.Entity;
import de.bixilon.minosoft.data.mappings.Dimension;
import de.bixilon.minosoft.data.mappings.blocks.Block;
import de.bixilon.minosoft.data.mappings.blocks.Blocks;

View File

@ -13,7 +13,7 @@
package de.bixilon.minosoft.modding.event.events;
import de.bixilon.minosoft.data.entities.Entity;
import de.bixilon.minosoft.data.entities.entities.Entity;
import de.bixilon.minosoft.protocol.network.Connection;
import de.bixilon.minosoft.protocol.packets.clientbound.play.PacketDestroyEntity;

View File

@ -13,7 +13,7 @@
package de.bixilon.minosoft.modding.event.events;
import de.bixilon.minosoft.data.entities.Entity;
import de.bixilon.minosoft.data.entities.entities.Entity;
import de.bixilon.minosoft.data.inventory.InventorySlots;
import de.bixilon.minosoft.data.inventory.Slot;
import de.bixilon.minosoft.protocol.network.Connection;

View File

@ -13,7 +13,7 @@
package de.bixilon.minosoft.modding.event.events;
import de.bixilon.minosoft.data.entities.Entity;
import de.bixilon.minosoft.data.entities.entities.Entity;
import de.bixilon.minosoft.protocol.network.Connection;
import de.bixilon.minosoft.protocol.packets.clientbound.play.*;

View File

@ -13,7 +13,11 @@
package de.bixilon.minosoft.protocol.packets.clientbound.play;
import de.bixilon.minosoft.data.entities.*;
import de.bixilon.minosoft.data.entities.EntityMetaData;
import de.bixilon.minosoft.data.entities.EntityRotation;
import de.bixilon.minosoft.data.entities.Location;
import de.bixilon.minosoft.data.entities.Velocity;
import de.bixilon.minosoft.data.entities.entities.Entity;
import de.bixilon.minosoft.logging.Log;
import de.bixilon.minosoft.protocol.network.Connection;
import de.bixilon.minosoft.protocol.packets.ClientboundPacket;
@ -40,7 +44,7 @@ public class PacketSpawnMob implements ClientboundPacket {
} else {
type = buffer.readVarInt();
}
Class<? extends Entity> typeClass = null; //ToDo
Class<? extends Entity> typeClass = buffer.getConnection().getMapping().getEntityClassById(type);
Location location;
if (buffer.getVersionId() < 100) {
location = new Location(buffer.readFixedPointNumberInteger(), buffer.readFixedPointNumberInteger(), buffer.readFixedPointNumberInteger());

View File

@ -13,7 +13,11 @@
package de.bixilon.minosoft.protocol.packets.clientbound.play;
import de.bixilon.minosoft.data.entities.*;
import de.bixilon.minosoft.data.entities.EntityRotation;
import de.bixilon.minosoft.data.entities.Location;
import de.bixilon.minosoft.data.entities.Objects;
import de.bixilon.minosoft.data.entities.Velocity;
import de.bixilon.minosoft.data.entities.entities.Entity;
import de.bixilon.minosoft.logging.Log;
import de.bixilon.minosoft.protocol.network.Connection;
import de.bixilon.minosoft.protocol.packets.ClientboundPacket;

View File

@ -13,8 +13,8 @@
package de.bixilon.minosoft.protocol.packets.serverbound.play;
import de.bixilon.minosoft.data.entities.Entity;
import de.bixilon.minosoft.data.entities.Location;
import de.bixilon.minosoft.data.entities.entities.Entity;
import de.bixilon.minosoft.data.player.Hands;
import de.bixilon.minosoft.logging.Log;
import de.bixilon.minosoft.protocol.network.Connection;

View File

@ -16,7 +16,7 @@ package de.bixilon.minosoft.protocol.protocol;
import de.bixilon.minosoft.Minosoft;
import de.bixilon.minosoft.config.ConfigurationPaths;
import de.bixilon.minosoft.data.GameModes;
import de.bixilon.minosoft.data.entities.Entity;
import de.bixilon.minosoft.data.entities.entities.Entity;
import de.bixilon.minosoft.data.mappings.blocks.Blocks;
import de.bixilon.minosoft.data.mappings.recipes.Recipes;
import de.bixilon.minosoft.data.mappings.versions.Version;

View File

@ -0,0 +1,44 @@
/*
* Minosoft
* Copyright (C) 2020 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program.If not, see <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.util;
import java.util.Objects;
public class Pair<K, V> {
public final K key;
public final V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Pair<?, ?> pair = (Pair<?, ?>) o;
return Objects.equals(key, pair.key) && Objects.equals(value, pair.value);
}
@Override
public int hashCode() {
return Objects.hash(key, value);
}
public String toString() {
return String.format("%s=%s", key, value);
}
}

View File

@ -0,0 +1,44 @@
{
"minecraft": {
"~abstract_entity": {
"data": {
"ENTITY_FLAGS": 0,
"ENTITY_AIR_SUPPLY": 1,
"ENTITY_CUSTOM_NAME": 2,
"ENTITY_CUSTOM_NAME_VISIBLE": 3,
"ENTITY_SILENT": 4,
"ENTITY_NO_GRAVITY": 5,
"ENTITY_POSE": 6,
"ENTITY_TICKS_FROZEN": 7
}
},
"~abstract_living_entity": {
"data": {
"LIVING_ENTITY_FLAGS": 8,
"LIVING_ENTITY_HEALTH": 9,
"LIVING_ENTITY_EFFECT_COLOR": 10,
"LIVING_ENTITY_EFFECT_AMBIENCE": 11,
"LIVING_ENTITY_ARROW_COUNT": 12,
"LIVING_ENTITY_ABSORPTION_HEARTS": 13,
"LIVING_ENTITY_BED_POSITION": 14
}
},
"~abstract_mob": {
"data": {
"MOB_FLAGS": 15
}
},
"zombie": {
"id": 102,
"length": 0.6,
"width": 0.6,
"height": 1.95,
"maxHealth": 20,
"data": {
"ZOMBIE_IS_BABY": 16,
"ZOMBIE_SPECIAL_TYPE": 17,
"ZOMBIE_DROWNING_CONVERSION": 18
}
}
}
}