From 05587fc3ac6a6e1b1f9eaa457b3fb65ac878ef95 Mon Sep 17 00:00:00 2001 From: Michael Pollind Date: Mon, 28 Dec 2020 15:03:04 -0800 Subject: [PATCH 1/4] feat(JOML): migrate BlockPlacingWeatherSystem --- .../systems/BlockPlacingWeatherSystem.java | 87 +++++++++---------- 1 file changed, 40 insertions(+), 47 deletions(-) diff --git a/src/main/java/org/terasology/weatherManager/systems/BlockPlacingWeatherSystem.java b/src/main/java/org/terasology/weatherManager/systems/BlockPlacingWeatherSystem.java index bd8e431..df49161 100644 --- a/src/main/java/org/terasology/weatherManager/systems/BlockPlacingWeatherSystem.java +++ b/src/main/java/org/terasology/weatherManager/systems/BlockPlacingWeatherSystem.java @@ -1,21 +1,12 @@ -/* - * Copyright 2018 MovingBlocks - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +// Copyright 2020 The Terasology Foundation +// SPDX-License-Identifier: Apache-2.0 package org.terasology.weatherManager.systems; +import org.joml.RoundingMode; +import org.joml.Vector3f; +import org.joml.Vector3i; +import org.joml.Vector3ic; import org.terasology.context.Context; import org.terasology.entitySystem.entity.EntityRef; import org.terasology.entitySystem.event.ReceiveEvent; @@ -24,7 +15,6 @@ import org.terasology.entitySystem.systems.RegisterSystem; import org.terasology.logic.delay.PeriodicActionTriggeredEvent; import org.terasology.logic.location.LocationComponent; -import org.terasology.math.geom.Vector3i; import org.terasology.network.Client; import org.terasology.network.NetworkSystem; import org.terasology.registry.In; @@ -67,39 +57,41 @@ public void postBegin() { } /** - * Places snow blocks on the ground when it is snowing. - * The event with the id PLACE_SNOW will only be created when it is snowing - * and the other events also correspond with the appropriate weather condition. + * Places snow blocks on the ground when it is snowing. The event with the id PLACE_SNOW will only be created when + * it is snowing and the other events also correspond with the appropriate weather condition. + * * @param event The event that means it is time to place snow * @param worldEntity The entity that sent the event (assumed to be the player) */ @ReceiveEvent public void onPlaceEvent(PeriodicActionTriggeredEvent event, EntityRef worldEntity) { + final Vector3f position = new Vector3f(); + final Vector3i blockPos = new Vector3i(); if (event.getActionId().equals(PLACE_SNOW)) { - for(Client currentPlayer : networkSystem.getPlayers()) { + for (Client currentPlayer : networkSystem.getPlayers()) { LocationComponent locComp = currentPlayer.getEntity().getComponent(LocationComponent.class); - Vector3i playerPos = new Vector3i(locComp.getWorldPosition()); + Vector3i playerPos = blockPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); placeSnow(playerPos); } } else if (event.getActionId().equals(MELT_SNOW)) { - for(Client currentPlayer : networkSystem.getPlayers()) { + for (Client currentPlayer : networkSystem.getPlayers()) { LocationComponent locComp = currentPlayer.getEntity().getComponent(LocationComponent.class); - Vector3i playerPos = new Vector3i(locComp.getWorldPosition()); + Vector3i playerPos = blockPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); meltSnow(playerPos); } - } else if (event.getActionId().equals(PLACE_WATER)) { - for(Client currentPlayer : networkSystem.getPlayers()) { + } else if (event.getActionId().equals(PLACE_WATER)) { + for (Client currentPlayer : networkSystem.getPlayers()) { LocationComponent locComp = currentPlayer.getEntity().getComponent(LocationComponent.class); - Vector3i playerPos = new Vector3i(locComp.getWorldPosition()); + Vector3i playerPos = blockPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); placeWater(playerPos); } - } else if (event.getActionId().equals(EVAPORATE_WATER)) { - for(Client currentPlayer : networkSystem.getPlayers()) { + } else if (event.getActionId().equals(EVAPORATE_WATER)) { + for (Client currentPlayer : networkSystem.getPlayers()) { LocationComponent locComp = currentPlayer.getEntity().getComponent(LocationComponent.class); - Vector3i playerPos = new Vector3i(locComp.getWorldPosition()); + Vector3i playerPos = blockPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); evaporateWater(playerPos); } @@ -108,6 +100,7 @@ public void onPlaceEvent(PeriodicActionTriggeredEvent event, EntityRef worldEnti /** * Finds a spot to place a block. + * * @param toCheck the block type that we should be looking for. * @param x the x position that the blocks * @return a vector with the height where the block should be placed, null if no block should be placed. @@ -131,9 +124,9 @@ private Vector3i findSpot(Block toCheck, int x, int z, int initialY) { // The block isn't actually exposed to the weather. return null; } - Block ground = worldProvider.getBlock(x, currentY-1, z); + Block ground = worldProvider.getBlock(x, currentY - 1, z); if (ground.equals(toCheck)) { - return new Vector3i(x, currentY-1, z); + return new Vector3i(x, currentY - 1, z); } else if (toCheck.equals(air) && !ground.isPenetrable() && ground.isAttachmentAllowed()) { return new Vector3i(x, currentY, z); } else { @@ -141,37 +134,37 @@ private Vector3i findSpot(Block toCheck, int x, int z, int initialY) { } } - private void placeSnow(Vector3i playerPos) { - int x = getValueToPlaceBlock(playerPos.x); - int z = getValueToPlaceBlock(playerPos.z); - Vector3i spotToPlace = findSpot(air, x, z, playerPos.y); + private void placeSnow(Vector3ic playerPos) { + int x = getValueToPlaceBlock(playerPos.x()); + int z = getValueToPlaceBlock(playerPos.z()); + Vector3i spotToPlace = findSpot(air, x, z, playerPos.y()); if (spotToPlace != null) { worldProvider.setBlock(spotToPlace, snow); } } - private void meltSnow(Vector3i playerPos) { - int x = getValueToPlaceBlock(playerPos.x); - int z = getValueToPlaceBlock(playerPos.z); - Vector3i spotToPlace = findSpot(snow, x, z, playerPos.y); + private void meltSnow(Vector3ic playerPos) { + int x = getValueToPlaceBlock(playerPos.x()); + int z = getValueToPlaceBlock(playerPos.z()); + Vector3i spotToPlace = findSpot(snow, x, z, playerPos.y()); if (spotToPlace != null) { worldProvider.setBlock(spotToPlace, water); } } - private void placeWater(Vector3i playerPos) { - int x = getValueToPlaceBlock(playerPos.x); - int z = getValueToPlaceBlock(playerPos.z); - Vector3i spotToPlace = findSpot(air, x, z, playerPos.y); + private void placeWater(Vector3ic playerPos) { + int x = getValueToPlaceBlock(playerPos.x()); + int z = getValueToPlaceBlock(playerPos.z()); + Vector3i spotToPlace = findSpot(air, x, z, playerPos.y()); if (spotToPlace != null) { worldProvider.setBlock(spotToPlace, water); } } - private void evaporateWater(Vector3i playerPos) { - int x = getValueToPlaceBlock(playerPos.x); - int z = getValueToPlaceBlock(playerPos.z); - Vector3i spotToPlace = findSpot(water, x, z, playerPos.y); + private void evaporateWater(Vector3ic playerPos) { + int x = getValueToPlaceBlock(playerPos.x()); + int z = getValueToPlaceBlock(playerPos.z()); + Vector3i spotToPlace = findSpot(water, x, z, playerPos.y()); if (spotToPlace != null) { worldProvider.setBlock(spotToPlace, air); } From 397fa7ecb273987b8df9fa05272127956f52abc4 Mon Sep 17 00:00:00 2001 From: Tobias Nett Date: Thu, 31 Dec 2020 15:35:30 +0100 Subject: [PATCH 2/4] chore: address review comment --- .../systems/BlockPlacingWeatherSystem.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/terasology/weatherManager/systems/BlockPlacingWeatherSystem.java b/src/main/java/org/terasology/weatherManager/systems/BlockPlacingWeatherSystem.java index df49161..31d3cc4 100644 --- a/src/main/java/org/terasology/weatherManager/systems/BlockPlacingWeatherSystem.java +++ b/src/main/java/org/terasology/weatherManager/systems/BlockPlacingWeatherSystem.java @@ -66,33 +66,29 @@ public void postBegin() { @ReceiveEvent public void onPlaceEvent(PeriodicActionTriggeredEvent event, EntityRef worldEntity) { final Vector3f position = new Vector3f(); - final Vector3i blockPos = new Vector3i(); + final Vector3i playerPos = new Vector3i(); if (event.getActionId().equals(PLACE_SNOW)) { for (Client currentPlayer : networkSystem.getPlayers()) { LocationComponent locComp = currentPlayer.getEntity().getComponent(LocationComponent.class); - Vector3i playerPos = blockPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); - + playerPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); placeSnow(playerPos); } } else if (event.getActionId().equals(MELT_SNOW)) { for (Client currentPlayer : networkSystem.getPlayers()) { LocationComponent locComp = currentPlayer.getEntity().getComponent(LocationComponent.class); - Vector3i playerPos = blockPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); - + playerPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); meltSnow(playerPos); } } else if (event.getActionId().equals(PLACE_WATER)) { for (Client currentPlayer : networkSystem.getPlayers()) { LocationComponent locComp = currentPlayer.getEntity().getComponent(LocationComponent.class); - Vector3i playerPos = blockPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); - + playerPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); placeWater(playerPos); } } else if (event.getActionId().equals(EVAPORATE_WATER)) { for (Client currentPlayer : networkSystem.getPlayers()) { LocationComponent locComp = currentPlayer.getEntity().getComponent(LocationComponent.class); - Vector3i playerPos = blockPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); - + playerPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); evaporateWater(playerPos); } } From 5602badd3b95c94753053ff0eedd6ac58a00471c Mon Sep 17 00:00:00 2001 From: Tobias Nett Date: Thu, 31 Dec 2020 15:36:59 +0100 Subject: [PATCH 3/4] refactor: use switch statement instead of else-if --- .../systems/BlockPlacingWeatherSystem.java | 53 ++++++++++--------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/src/main/java/org/terasology/weatherManager/systems/BlockPlacingWeatherSystem.java b/src/main/java/org/terasology/weatherManager/systems/BlockPlacingWeatherSystem.java index 31d3cc4..f8c5f5e 100644 --- a/src/main/java/org/terasology/weatherManager/systems/BlockPlacingWeatherSystem.java +++ b/src/main/java/org/terasology/weatherManager/systems/BlockPlacingWeatherSystem.java @@ -67,30 +67,35 @@ public void postBegin() { public void onPlaceEvent(PeriodicActionTriggeredEvent event, EntityRef worldEntity) { final Vector3f position = new Vector3f(); final Vector3i playerPos = new Vector3i(); - if (event.getActionId().equals(PLACE_SNOW)) { - for (Client currentPlayer : networkSystem.getPlayers()) { - LocationComponent locComp = currentPlayer.getEntity().getComponent(LocationComponent.class); - playerPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); - placeSnow(playerPos); - } - } else if (event.getActionId().equals(MELT_SNOW)) { - for (Client currentPlayer : networkSystem.getPlayers()) { - LocationComponent locComp = currentPlayer.getEntity().getComponent(LocationComponent.class); - playerPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); - meltSnow(playerPos); - } - } else if (event.getActionId().equals(PLACE_WATER)) { - for (Client currentPlayer : networkSystem.getPlayers()) { - LocationComponent locComp = currentPlayer.getEntity().getComponent(LocationComponent.class); - playerPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); - placeWater(playerPos); - } - } else if (event.getActionId().equals(EVAPORATE_WATER)) { - for (Client currentPlayer : networkSystem.getPlayers()) { - LocationComponent locComp = currentPlayer.getEntity().getComponent(LocationComponent.class); - playerPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); - evaporateWater(playerPos); - } + switch (event.getActionId()) { + case PLACE_SNOW: + for (Client currentPlayer : networkSystem.getPlayers()) { + LocationComponent locComp = currentPlayer.getEntity().getComponent(LocationComponent.class); + playerPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); + placeSnow(playerPos); + } + break; + case MELT_SNOW: + for (Client currentPlayer : networkSystem.getPlayers()) { + LocationComponent locComp = currentPlayer.getEntity().getComponent(LocationComponent.class); + playerPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); + meltSnow(playerPos); + } + break; + case PLACE_WATER: + for (Client currentPlayer : networkSystem.getPlayers()) { + LocationComponent locComp = currentPlayer.getEntity().getComponent(LocationComponent.class); + playerPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); + placeWater(playerPos); + } + break; + case EVAPORATE_WATER: + for (Client currentPlayer : networkSystem.getPlayers()) { + LocationComponent locComp = currentPlayer.getEntity().getComponent(LocationComponent.class); + playerPos.set(locComp.getWorldPosition(position), RoundingMode.FLOOR); + evaporateWater(playerPos); + } + break; } } From 8c48f963d2765b27dc337adae07c6c9ad584b547 Mon Sep 17 00:00:00 2001 From: Tobias Nett Date: Thu, 31 Dec 2020 15:37:55 +0100 Subject: [PATCH 4/4] chore: use 'Chunks' instead of deprecated 'ChunkConstants' --- .../weatherManager/systems/BlockPlacingWeatherSystem.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/terasology/weatherManager/systems/BlockPlacingWeatherSystem.java b/src/main/java/org/terasology/weatherManager/systems/BlockPlacingWeatherSystem.java index f8c5f5e..68aed69 100644 --- a/src/main/java/org/terasology/weatherManager/systems/BlockPlacingWeatherSystem.java +++ b/src/main/java/org/terasology/weatherManager/systems/BlockPlacingWeatherSystem.java @@ -22,7 +22,7 @@ import org.terasology.world.WorldProvider; import org.terasology.world.block.Block; import org.terasology.world.block.BlockManager; -import org.terasology.world.chunks.ChunkConstants; +import org.terasology.world.chunks.Chunks; import static org.terasology.weatherManager.systems.WeatherManagerSystem.EVAPORATE_WATER; import static org.terasology.weatherManager.systems.WeatherManagerSystem.MELT_SNOW; @@ -121,7 +121,7 @@ private Vector3i findSpot(Block toCheck, int x, int z, int initialY) { return null; } - if (worldProvider.getSunlight(x, currentY, z) != ChunkConstants.MAX_SUNLIGHT) { + if (worldProvider.getSunlight(x, currentY, z) != Chunks.MAX_SUNLIGHT) { // The block isn't actually exposed to the weather. return null; }