Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-12-26 16:12:46 +01:00
Translate allay dancing
Dieser Commit ist enthalten in:
Ursprung
c914938acb
Commit
4163de9314
@ -453,6 +453,8 @@ public final class EntityDefinitions {
|
|||||||
ALLAY = EntityDefinition.inherited(AllayEntity::new, mobEntityBase)
|
ALLAY = EntityDefinition.inherited(AllayEntity::new, mobEntityBase)
|
||||||
.type(EntityType.ALLAY)
|
.type(EntityType.ALLAY)
|
||||||
.height(0.6f).width(0.35f)
|
.height(0.6f).width(0.35f)
|
||||||
|
.addTranslator(MetadataType.BOOLEAN, AllayEntity::setDancing)
|
||||||
|
.addTranslator(MetadataType.BOOLEAN, AllayEntity::setCanDuplicate)
|
||||||
.build();
|
.build();
|
||||||
BAT = EntityDefinition.inherited(BatEntity::new, mobEntityBase)
|
BAT = EntityDefinition.inherited(BatEntity::new, mobEntityBase)
|
||||||
.type(EntityType.BAT)
|
.type(EntityType.BAT)
|
||||||
|
@ -25,8 +25,10 @@
|
|||||||
|
|
||||||
package org.geysermc.geyser.entity.type.living;
|
package org.geysermc.geyser.entity.type.living;
|
||||||
|
|
||||||
|
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
|
||||||
import com.github.steveice10.mc.protocol.data.game.entity.player.Hand;
|
import com.github.steveice10.mc.protocol.data.game.entity.player.Hand;
|
||||||
import com.nukkitx.math.vector.Vector3f;
|
import com.nukkitx.math.vector.Vector3f;
|
||||||
|
import com.nukkitx.protocol.bedrock.data.entity.EntityFlag;
|
||||||
import org.geysermc.geyser.entity.EntityDefinition;
|
import org.geysermc.geyser.entity.EntityDefinition;
|
||||||
import org.geysermc.geyser.inventory.GeyserItemStack;
|
import org.geysermc.geyser.inventory.GeyserItemStack;
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
@ -37,14 +39,27 @@ import javax.annotation.Nonnull;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class AllayEntity extends MobEntity {
|
public class AllayEntity extends MobEntity {
|
||||||
|
private boolean canDuplicate;
|
||||||
|
|
||||||
public AllayEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) {
|
public AllayEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) {
|
||||||
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
|
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setDancing(BooleanEntityMetadata entityMetadata) {
|
||||||
|
setFlag(EntityFlag.DANCING, entityMetadata.getPrimitiveValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCanDuplicate(BooleanEntityMetadata entityMetadata) {
|
||||||
|
this.canDuplicate = entityMetadata.getPrimitiveValue();
|
||||||
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) {
|
protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) {
|
||||||
if (!this.hand.isValid() && !itemInHand.isEmpty()) {
|
if (this.canDuplicate && getFlag(EntityFlag.DANCING) && isDuplicationItem(itemInHand)) {
|
||||||
|
// Maybe better as another tag?
|
||||||
|
return InteractiveTag.GIVE_ITEM_TO_ALLAY;
|
||||||
|
} else if (!this.hand.isValid() && !itemInHand.isEmpty()) {
|
||||||
return InteractiveTag.GIVE_ITEM_TO_ALLAY;
|
return InteractiveTag.GIVE_ITEM_TO_ALLAY;
|
||||||
} else if (this.hand.isValid() && hand == Hand.MAIN_HAND && itemInHand.isEmpty()) {
|
} else if (this.hand.isValid() && hand == Hand.MAIN_HAND && itemInHand.isEmpty()) {
|
||||||
// Seems like there isn't a good tag for this yet
|
// Seems like there isn't a good tag for this yet
|
||||||
@ -57,7 +72,10 @@ public class AllayEntity extends MobEntity {
|
|||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) {
|
protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) {
|
||||||
if (!this.hand.isValid() && !itemInHand.isEmpty()) {
|
if (this.canDuplicate && getFlag(EntityFlag.DANCING) && isDuplicationItem(itemInHand)) {
|
||||||
|
//TOCHECK sound
|
||||||
|
return InteractionResult.SUCCESS;
|
||||||
|
} else if (!this.hand.isValid() && !itemInHand.isEmpty()) {
|
||||||
//TODO play sound?
|
//TODO play sound?
|
||||||
return InteractionResult.SUCCESS;
|
return InteractionResult.SUCCESS;
|
||||||
} else if (this.hand.isValid() && hand == Hand.MAIN_HAND && itemInHand.isEmpty()) {
|
} else if (this.hand.isValid() && hand == Hand.MAIN_HAND && itemInHand.isEmpty()) {
|
||||||
@ -67,4 +85,8 @@ public class AllayEntity extends MobEntity {
|
|||||||
return super.mobInteract(hand, itemInHand);
|
return super.mobInteract(hand, itemInHand);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isDuplicationItem(GeyserItemStack itemStack) {
|
||||||
|
return itemStack.getJavaId() == session.getItemMappings().getStoredItems().amethystShard();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,7 @@ import java.util.Map;
|
|||||||
@Getter
|
@Getter
|
||||||
@Accessors(fluent = true)
|
@Accessors(fluent = true)
|
||||||
public class StoredItemMappings {
|
public class StoredItemMappings {
|
||||||
|
private final int amethystShard;
|
||||||
private final ItemMapping bamboo;
|
private final ItemMapping bamboo;
|
||||||
private final ItemMapping banner;
|
private final ItemMapping banner;
|
||||||
private final ItemMapping barrier;
|
private final ItemMapping barrier;
|
||||||
@ -71,6 +72,7 @@ public class StoredItemMappings {
|
|||||||
private final ItemMapping writableBook;
|
private final ItemMapping writableBook;
|
||||||
|
|
||||||
public StoredItemMappings(Map<String, ItemMapping> itemMappings) {
|
public StoredItemMappings(Map<String, ItemMapping> itemMappings) {
|
||||||
|
this.amethystShard = load(itemMappings, "amethyst_shard").getJavaId();
|
||||||
this.bamboo = load(itemMappings, "bamboo");
|
this.bamboo = load(itemMappings, "bamboo");
|
||||||
this.banner = load(itemMappings, "white_banner"); // As of 1.17.10, all banners have the same Bedrock ID
|
this.banner = load(itemMappings, "white_banner"); // As of 1.17.10, all banners have the same Bedrock ID
|
||||||
this.barrier = load(itemMappings, "barrier");
|
this.barrier = load(itemMappings, "barrier");
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren