Merge pull request 'No Gravity' (#223) from NoGravityREntity into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #223 Reviewed-by: Lixfel <lixfel@steamwar.de>
Dieser Commit ist enthalten in:
Commit
baab53a25d
@ -40,11 +40,14 @@ public class REntity {
|
|||||||
private static final Object nameWatcher = BountifulWrapper.impl.getDataWatcherObject(2, Core.getVersion() > 12 ? Optional.class : String.class); // Optional<IChatBaseComponent>
|
private static final Object nameWatcher = BountifulWrapper.impl.getDataWatcherObject(2, Core.getVersion() > 12 ? Optional.class : String.class); // Optional<IChatBaseComponent>
|
||||||
private static final Object nameVisibleWatcher = BountifulWrapper.impl.getDataWatcherObject(3, Boolean.class);
|
private static final Object nameVisibleWatcher = BountifulWrapper.impl.getDataWatcherObject(3, Boolean.class);
|
||||||
|
|
||||||
|
private static final Object noGravityDataWatcher = BountifulWrapper.impl.getDataWatcherObject(5,Boolean.class);
|
||||||
|
|
||||||
private static int entityIdCounter = -1;
|
private static int entityIdCounter = -1;
|
||||||
private static final Random random = new Random();
|
private static final Random random = new Random();
|
||||||
|
|
||||||
private final REntityServer server;
|
private final REntityServer server;
|
||||||
private final EntityType entityType;
|
private final EntityType entityType;
|
||||||
|
@Getter
|
||||||
protected final int entityId;
|
protected final int entityId;
|
||||||
@Getter
|
@Getter
|
||||||
protected final UUID uuid;
|
protected final UUID uuid;
|
||||||
@ -59,16 +62,24 @@ public class REntity {
|
|||||||
private boolean invisible;
|
private boolean invisible;
|
||||||
private FlatteningWrapper.EntityPose pose = FlatteningWrapper.EntityPose.NORMAL;
|
private FlatteningWrapper.EntityPose pose = FlatteningWrapper.EntityPose.NORMAL;
|
||||||
private boolean bowDrawn;
|
private boolean bowDrawn;
|
||||||
|
private boolean noGravity;
|
||||||
|
private boolean isGlowing;
|
||||||
private int fireTick;
|
private int fireTick;
|
||||||
|
|
||||||
|
private final int objectData;
|
||||||
@Getter
|
@Getter
|
||||||
private String displayName;
|
private String displayName;
|
||||||
protected final Map<Object, ItemStack> itemSlots;
|
protected final Map<Object, ItemStack> itemSlots;
|
||||||
|
|
||||||
public REntity(REntityServer server, EntityType entityType, Location location) {
|
public REntity(REntityServer server, EntityType entityType, Location location) {
|
||||||
this(server, entityType, new UUID(random.nextLong() & -61441L | 16384L, random.nextLong() & 4611686018427387903L | -9223372036854775808L), location);
|
this(server,entityType,location,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected REntity(REntityServer server, EntityType entityType, UUID uuid, Location location) {
|
protected REntity(REntityServer server, EntityType entityType, Location location,int objectData) {
|
||||||
|
this(server, entityType, new UUID(random.nextLong() & -61441L | 16384L, random.nextLong() & 4611686018427387903L | -9223372036854775808L), location,objectData);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected REntity(REntityServer server, EntityType entityType, UUID uuid, Location location,int objectData) {
|
||||||
this.server = server;
|
this.server = server;
|
||||||
this.entityType = entityType;
|
this.entityType = entityType;
|
||||||
this.entityId = entityIdCounter--;
|
this.entityId = entityIdCounter--;
|
||||||
@ -82,6 +93,11 @@ public class REntity {
|
|||||||
|
|
||||||
this.itemSlots = entityType == EntityType.PLAYER ? new HashMap<>() : null;
|
this.itemSlots = entityType == EntityType.PLAYER ? new HashMap<>() : null;
|
||||||
|
|
||||||
|
this.noGravity = false;
|
||||||
|
this.isGlowing = false;
|
||||||
|
|
||||||
|
this.objectData = objectData;
|
||||||
|
|
||||||
server.addEntity(this);
|
server.addEntity(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,6 +201,19 @@ public class REntity {
|
|||||||
server.removeEntity(this);
|
server.removeEntity(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setNoGravity(boolean noGravity) {
|
||||||
|
this.noGravity = noGravity;
|
||||||
|
if(Core.getVersion() > 8)
|
||||||
|
server.updateEntity(this,getDataWatcherPacket(noGravityDataWatcher,noGravity));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGlowing(boolean glowing) {
|
||||||
|
this.isGlowing = glowing;
|
||||||
|
if(Core.getVersion() > 8) {
|
||||||
|
server.updateEntity(this,getDataWatcherPacket(entityStatusWatcher,getEntityStatus()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static int spawnPacketOffset() {
|
private static int spawnPacketOffset() {
|
||||||
switch (Core.getVersion()) {
|
switch (Core.getVersion()) {
|
||||||
case 8:
|
case 8:
|
||||||
@ -230,6 +259,9 @@ public class REntity {
|
|||||||
if(displayName != null) {
|
if(displayName != null) {
|
||||||
packetSink.accept(getDataWatcherPacket(nameWatcher, FlatteningWrapper.impl.formatDisplayName(displayName), nameVisibleWatcher, true));
|
packetSink.accept(getDataWatcherPacket(nameWatcher, FlatteningWrapper.impl.formatDisplayName(displayName), nameVisibleWatcher, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(Core.getVersion() > 8 && noGravity)
|
||||||
|
packetSink.accept(getDataWatcherPacket(noGravityDataWatcher,this.noGravity));
|
||||||
}
|
}
|
||||||
|
|
||||||
void tick() {
|
void tick() {
|
||||||
@ -274,6 +306,8 @@ public class REntity {
|
|||||||
status |= 0x10;
|
status |= 0x10;
|
||||||
if(invisible)
|
if(invisible)
|
||||||
status |= 0x20;
|
status |= 0x20;
|
||||||
|
if(Core.getVersion() > 8 && isGlowing)
|
||||||
|
status |= 0x40;
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@ -344,11 +378,32 @@ public class REntity {
|
|||||||
|
|
||||||
protected static Function<REntity, Object> spawnPacketGenerator(Class<?> spawnPacket, int posOffset) {
|
protected static Function<REntity, Object> spawnPacketGenerator(Class<?> spawnPacket, int posOffset) {
|
||||||
Reflection.FieldAccessor<Integer> entityId = Reflection.getField(spawnPacket, int.class, 0);
|
Reflection.FieldAccessor<Integer> entityId = Reflection.getField(spawnPacket, int.class, 0);
|
||||||
|
|
||||||
|
int index;
|
||||||
|
switch (Core.getVersion()) {
|
||||||
|
case 8:
|
||||||
|
index = 10;
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
case 14:
|
||||||
|
case 12:
|
||||||
|
case 10:
|
||||||
|
case 15:
|
||||||
|
case 18:
|
||||||
|
index = 6;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
index = 7;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
Reflection.FieldAccessor<Integer> additionalData = Reflection.getField(spawnPacket, int.class, index);
|
||||||
BountifulWrapper.PositionSetter position = BountifulWrapper.impl.getPositionSetter(spawnPacket, posOffset);
|
BountifulWrapper.PositionSetter position = BountifulWrapper.impl.getPositionSetter(spawnPacket, posOffset);
|
||||||
|
|
||||||
return entity -> {
|
return entity -> {
|
||||||
Object packet = Reflection.newInstance(spawnPacket);
|
Object packet = Reflection.newInstance(spawnPacket);
|
||||||
entityId.set(packet, entity.entityId);
|
entityId.set(packet, entity.entityId);
|
||||||
|
additionalData.set(packet,entity.objectData);
|
||||||
position.set(packet, entity.x, entity.y, entity.z);
|
position.set(packet, entity.x, entity.y, entity.z);
|
||||||
return packet;
|
return packet;
|
||||||
};
|
};
|
||||||
|
33
SpigotCore_Main/src/de/steamwar/entity/RFallingBlockEntity.java
Normale Datei
33
SpigotCore_Main/src/de/steamwar/entity/RFallingBlockEntity.java
Normale Datei
@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2022 SteamWar.de-Serverteam
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar.entity;
|
||||||
|
|
||||||
|
import de.steamwar.core.Core;
|
||||||
|
import de.steamwar.techhider.BlockIds;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
|
||||||
|
public class RFallingBlockEntity extends REntity{
|
||||||
|
|
||||||
|
public RFallingBlockEntity(REntityServer server, Location location, Material material) {
|
||||||
|
super(server, EntityType.FALLING_BLOCK, location, BlockIds.impl.materialToId(material) >> (Core.getVersion() <= 12 ? 4 : 0));
|
||||||
|
}
|
||||||
|
}
|
@ -76,7 +76,7 @@ public class RPlayer extends REntity {
|
|||||||
private final String name;
|
private final String name;
|
||||||
|
|
||||||
public RPlayer(REntityServer server, UUID uuid, String name, Location location) {
|
public RPlayer(REntityServer server, UUID uuid, String name, Location location) {
|
||||||
super(server, EntityType.PLAYER, uuid, location);
|
super(server, EntityType.PLAYER, uuid, location,0);
|
||||||
this.name = name;
|
this.name = name;
|
||||||
//team.addEntry(name);
|
//team.addEntry(name);
|
||||||
}
|
}
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren