Renderer/src/main/java/electrosphere/server/player/BlockActions.java
austin 720e147d99
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
fix destroying blocks
2025-06-09 15:09:37 -04:00

80 lines
4.0 KiB
Java

package electrosphere.server.player;
import org.joml.Vector3i;
import electrosphere.client.block.BlockChunkData;
import electrosphere.data.block.BlockType;
import electrosphere.data.entity.item.Item;
import electrosphere.engine.Globals;
import electrosphere.engine.loadingthreads.LoadingUtils;
import electrosphere.entity.Entity;
import electrosphere.entity.state.equip.ServerToolbarState;
import electrosphere.entity.state.item.ServerChargeState;
import electrosphere.entity.types.common.CommonEntityUtils;
import electrosphere.entity.types.creature.CreatureUtils;
import electrosphere.net.server.player.Player;
import electrosphere.server.datacell.Realm;
import electrosphere.server.datacell.ServerWorldData;
import electrosphere.server.physics.block.editing.ServerBlockEditing;
/**
* Actions involving blocks
*/
public class BlockActions {
/**
* Tries to edit a block
* @param creature The creature that is performing the edit
* @param chunkPos The chunk position
* @param blockPos The block position
* @param blockType The type of block to edit to
* @param editSize The size of the edit
*/
public static void editBlockArea(Entity creature, Vector3i chunkPos, Vector3i blockPos, short blockType, int editSize){
Realm playerRealm = Globals.serverState.realmManager.getEntityRealm(creature);
if(ServerToolbarState.hasServerToolbarState(creature)){
//check that we have the block equipped
ServerToolbarState serverToolbarState = ServerToolbarState.getServerToolbarState(creature);
Entity equippedItem = serverToolbarState.getRealWorldItem();
String equippedItemType = CommonEntityUtils.getEntitySubtype(equippedItem);
BlockType blockTypeData = Globals.gameConfigCurrent.getBlockData().getTypeFromId((int)blockType);
String goalBlockEntityId = Item.getBlockTypeId(blockTypeData);
if(CreatureUtils.hasControllerPlayerId(creature)){
Player player = Globals.serverState.playerManager.getPlayerFromId(CreatureUtils.getControllerPlayerId(creature));
Globals.serverState.structureScanningService.queue(player, ServerWorldData.convertLocalBlockToRealSpace(chunkPos, blockPos));
}
if(equippedItemType.equals(goalBlockEntityId)){
//place the block
ServerBlockEditing.editBlockArea(playerRealm, chunkPos, blockPos, blockType, (short)0, editSize);
if(!Globals.gameConfigCurrent.getCreatureTypeLoader().getType(creature).getId().equals(LoadingUtils.EDITOR_RACE_NAME)){
ServerChargeState.attemptRemoveCharges(creature, 1);
}
} else if(blockType == BlockChunkData.BLOCK_TYPE_EMPTY){
ServerBlockEditing.editBlockArea(playerRealm, chunkPos, blockPos, BlockChunkData.BLOCK_TYPE_EMPTY, (short)0, editSize);
}
}
}
/**
* Places a fab
* @param creature The creature placing the fab
* @param chunkPos The chunk position to place at
* @param blockPos The block position to place at
* @param blockRotation The rotation to apply to the fab
* @param fabPath The path to the fab itself
*/
public static void placeFab(Entity creature, Vector3i chunkPos, Vector3i blockPos, int blockRotation, String fabPath){
Realm playerRealm = Globals.serverState.realmManager.getEntityRealm(creature);
ServerBlockEditing.placeBlockFab(playerRealm, chunkPos, blockPos, blockRotation, fabPath);
if(!Globals.gameConfigCurrent.getCreatureTypeLoader().getType(creature).getId().equals(LoadingUtils.EDITOR_RACE_NAME)){
ServerChargeState.attemptRemoveCharges(creature, 1);
}
if(CreatureUtils.hasControllerPlayerId(creature)){
Player player = Globals.serverState.playerManager.getPlayerFromId(CreatureUtils.getControllerPlayerId(creature));
Globals.serverState.structureScanningService.queue(player, ServerWorldData.convertLocalBlockToRealSpace(chunkPos, blockPos));
}
}
}