Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import org.cloudburstmc.protocol.bedrock.packet.MobArmorEquipmentPacket;
import org.cloudburstmc.protocol.bedrock.packet.MobEquipmentPacket;
import org.cloudburstmc.protocol.bedrock.packet.MoveEntityAbsolutePacket;
import org.geysermc.geyser.GeyserImpl;
import org.geysermc.geyser.entity.spawn.EntitySpawnContext;
import org.geysermc.geyser.item.type.DyeableArmorItem;
import org.geysermc.geyser.session.GeyserSession;
Expand Down Expand Up @@ -68,30 +69,53 @@ public void setDisplayedItem(EntityMetadata<ItemStack, ?> entityMetadata) {
String type = session.getItemMappings().getMapping(stack.getId()).getJavaItem().javaIdentifier();


String bedrockIdentifier = item.getDefinition().getIdentifier()
.replace("geyser_custom:", "");

CustomModelData modelData = null;
DataComponents components = stack.getDataComponentsPatch();
if (components != null) {
modelData = components.get(DataComponentTypes.CUSTOM_MODEL_DATA);
}

if (components != null) modelData = components.get(DataComponentTypes.CUSTOM_MODEL_DATA);

for (FileConfiguration mappingsConfig : GeyserDisplayEntity.getExtension().getConfigManager().getConfigMappingsCache().values()) {
for (Object mappingKey : mappingsConfig.getRootNode().childrenMap().keySet()) {
String mappingString = mappingKey.toString();
for (FileConfiguration mappingsConfig :
GeyserDisplayEntity.getExtension()
.getConfigManager()
.getConfigMappingsCache()
.values()) {

FileConfiguration mappingConfig = mappingsConfig.getConfigurationSection(mappingString);
for (Object key : mappingsConfig.getRootNode().childrenMap().keySet()) {
FileConfiguration mappingConfig =
mappingsConfig.getConfigurationSection(key.toString());
if (mappingConfig == null) continue;

if (!mappingConfig.getString("type").equals(type)) continue;

if (mappingConfig.getInt("model-data") == -1) {
config = mappingConfig.getConfigurationSection("displayentityoptions");
setOffset(config.getDouble("y-offset"));
if (config.getBoolean("vanilla-scale")) applyScale();
String configIdentifier =
mappingConfig.getString("identifier");

boolean usingIdentifier =
!configIdentifier.isEmpty()
&& !configIdentifier.equalsIgnoreCase("none");

// Try to match identifier first
if (usingIdentifier) {
if (!configIdentifier.equalsIgnoreCase(bedrockIdentifier)) continue;
applyDisplayConfig(mappingConfig);
break;
}

if (modelData != null && Math.abs(mappingConfig.getInt("model-data") - modelData.floats().get(0)) < 0.5) {
config = mappingConfig.getConfigurationSection("displayentityoptions");
setOffset(config.getDouble("y-offset"));
if (config.getBoolean("vanilla-scale")) applyScale();
// If cant match identifier, check for -1 model data
int modelDataValue = mappingConfig.getInt("model-data");
if (modelDataValue == -1) {
applyDisplayConfig(mappingConfig);
break;
}

// If using actual Model Data, match.
if (modelData != null
&& Math.abs(modelDataValue - modelData.floats().get(0)) < 0.5) {
applyDisplayConfig(mappingConfig);
break;
}
}
Expand Down Expand Up @@ -120,6 +144,14 @@ public void setDisplayedItem(EntityMetadata<ItemStack, ?> entityMetadata) {
updateMainHand(session);
}

private void applyDisplayConfig(FileConfiguration mappingConfig) {
config = mappingConfig.getConfigurationSection("displayentityoptions");
setOffset(config.getDouble("y-offset"));
if (config.getBoolean("vanilla-scale")) {
applyScale();
}
}

@Override
protected void applyScale() {
if (needHide) {
Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/Extension/Mappings/example.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ mappings:
type: "minecraft:iron_sword"
# Custom model data, -1 represent ignore custom model data
model-data: -1
# Identifier from Geyser Mappings file. This will override model-data search. Set to none to disable.
identifier: none
# options
displayentityoptions:
# The y-offset of display entity
Expand Down