Skip to content

Commit

Permalink
Define default EntityFlag.BREATHING true (#25)
Browse files Browse the repository at this point in the history
* Add experience attribute

* init hungerManager and experienceManager to function initEntity()

* Define default EntityFlag.BREATHING true
  • Loading branch information
JblusItsMe authored Aug 23, 2024
1 parent 4f9b9f4 commit 554e7af
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 0 deletions.
17 changes: 17 additions & 0 deletions src/main/java/org/sculk/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import org.cloudburstmc.protocol.bedrock.BedrockServerSession;
import org.cloudburstmc.protocol.bedrock.data.AttributeData;
import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
import org.cloudburstmc.protocol.bedrock.data.skin.SerializedSkin;
import org.cloudburstmc.protocol.bedrock.packet.*;
import org.sculk.entity.Attribute;
import org.sculk.entity.AttributeFactory;
import org.sculk.entity.HumanEntity;
import org.sculk.entity.data.SyncedEntityData;
import org.sculk.form.Form;
import org.sculk.player.PlayerInterface;
import org.sculk.player.client.ClientChainData;
Expand Down Expand Up @@ -35,6 +37,7 @@
public class Player extends HumanEntity implements PlayerInterface {

private final BedrockServerSession serverSession;
private final SyncedEntityData data = new SyncedEntityData(this);
private LoginChainData loginChainData;

private AtomicInteger formId;
Expand All @@ -47,6 +50,20 @@ public Player(BedrockServerSession session, ClientChainData data) {

this.formId = new AtomicInteger(0);
this.forms = new Int2ObjectOpenHashMap<>();

initEntity();
}

@Override
public void initEntity() {
super.initEntity();
System.out.println("init Entity");

}

public void updateFlags() {
this.data.setFlags(EntityFlag.BREATHING, true);
this.data.updateFlag();
}

@Override
Expand Down
58 changes: 58 additions & 0 deletions src/main/java/org/sculk/entity/data/SyncedEntityData.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package org.sculk.entity.data;


import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataMap;
import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
import org.cloudburstmc.protocol.bedrock.packet.SetEntityDataPacket;
import org.sculk.Player;

import java.util.EnumSet;

/*
* ____ _ _
* / ___| ___ _ _| | | __
* \___ \ / __| | | | | |/ /
* ___) | (__| |_| | | <
* |____/ \___|\__,_|_|_|\_\
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* @author: SculkTeams
* @link: http://www.sculkmp.org/
*/
public class SyncedEntityData {

private final EnumSet<EntityFlag> flags = EnumSet.noneOf(EntityFlag.class);
private final EntityDataMap entityDataMap = new EntityDataMap();

private final Player player;

public SyncedEntityData(Player player) {
this.player = player;
}

public void updateFlag() {
SetEntityDataPacket setEntityDataPacket = new SetEntityDataPacket();
setEntityDataPacket.getMetadata().putFlags(this.flags);
this.player.sendDataPacket(setEntityDataPacket);
}

public boolean getFlag(EntityFlag entityFlag) {
return flags.contains(entityFlag);
}

public void setFlags(EntityFlag flags, boolean value) {
if(this.flags.contains(flags) != value) {
if(value) {
this.flags.add(flags);
} else {
this.flags.remove(flags);
}
this.entityDataMap.putFlags(this.flags);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,16 @@
import org.cloudburstmc.math.vector.Vector3i;
import org.cloudburstmc.nbt.NbtMap;
import org.cloudburstmc.protocol.bedrock.data.*;
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataMap;
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
import org.cloudburstmc.protocol.bedrock.packet.*;
import org.cloudburstmc.protocol.common.PacketSignal;
import org.cloudburstmc.protocol.common.util.OptionalBoolean;
import org.sculk.Player;
import org.sculk.network.session.SculkServerSession;

import java.util.EnumSet;
import java.util.List;
import java.util.UUID;

Expand Down Expand Up @@ -133,6 +136,7 @@ public void setUp() {
setEntityDataPacket.setRuntimeEntityId(0);
setEntityDataPacket.getMetadata().put(EntityDataTypes.PLAYER_FLAGS, (byte) 2);
session.sendPacket(setEntityDataPacket);
session.getPlayer().updateFlags();

SetTimePacket setTimePacket = new SetTimePacket();
setTimePacket.setTime(0);
Expand Down

0 comments on commit 554e7af

Please sign in to comment.