diff --git a/src/main/java/org/terasology/gf/SaplingInitializeSystem.java b/src/main/java/org/terasology/gf/SaplingInitializeSystem.java index 6cf8690..afced6a 100644 --- a/src/main/java/org/terasology/gf/SaplingInitializeSystem.java +++ b/src/main/java/org/terasology/gf/SaplingInitializeSystem.java @@ -15,7 +15,7 @@ */ package org.terasology.gf; -import org.joml.Vector3i; +import org.joml.Vector3ic; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.climateConditions.ClimateConditionsSystem; @@ -95,7 +95,7 @@ public void delayedInitialization(DelayedActionTriggeredEvent event, EntityRef s PerformanceMonitor.startActivity("GrowingFlora - Initializing sapling"); processingEvent = true; try { - Vector3i blockLocation = blockComponent.getPosition(new Vector3i()); + Vector3ic blockLocation = blockComponent.getPosition(); String saplingType = generatedSapling.type; PlantGrowthDefinition plantDefinition = plantRegistry.getPlantGrowthDefinition(saplingType); Long updateDelay = plantDefinition.initializeGeneratedPlant(worldProvider, blockEntityRegistry, sapling); diff --git a/src/main/java/org/terasology/gf/generator/ConnectedPlantGrowthDefinition.java b/src/main/java/org/terasology/gf/generator/ConnectedPlantGrowthDefinition.java index 234e7af..349e389 100644 --- a/src/main/java/org/terasology/gf/generator/ConnectedPlantGrowthDefinition.java +++ b/src/main/java/org/terasology/gf/generator/ConnectedPlantGrowthDefinition.java @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.gf.generator; -import org.joml.Vector3i; +import org.joml.Vector3ic; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.world.BlockEntityRegistry; import org.terasology.engine.world.WorldProvider; @@ -22,7 +22,7 @@ public interface ConnectedPlantGrowthDefinition extends PlantGrowthDefinition { * @param plant * @return */ - boolean isBlockOwnedByPlant(WorldProvider worldProvider, BlockEntityRegistry blockEntityRegistry, Vector3i block, EntityRef plant); + boolean isBlockOwnedByPlant(WorldProvider worldProvider, BlockEntityRegistry blockEntityRegistry, Vector3ic block, EntityRef plant); /** * Returns a collection of locations that are dependand on existance of this block in this plant. @@ -34,5 +34,5 @@ public interface ConnectedPlantGrowthDefinition extends PlantGrowthDefinition { * @param plant * @return */ - Collection getBlocksConnectedTo(WorldProvider worldProvider, BlockEntityRegistry blockEntityRegistry, Vector3i block, EntityRef plant); + Collection getBlocksConnectedTo(WorldProvider worldProvider, BlockEntityRegistry blockEntityRegistry, Vector3ic block, EntityRef plant); } diff --git a/src/main/java/org/terasology/gf/tree/TreeDestructionSystem.java b/src/main/java/org/terasology/gf/tree/TreeDestructionSystem.java index e54ac09..650b210 100644 --- a/src/main/java/org/terasology/gf/tree/TreeDestructionSystem.java +++ b/src/main/java/org/terasology/gf/tree/TreeDestructionSystem.java @@ -3,7 +3,7 @@ package org.terasology.gf.tree; import org.joml.Vector3f; -import org.joml.Vector3i; +import org.joml.Vector3ic; import org.terasology.engine.entitySystem.entity.EntityManager; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.event.ReceiveEvent; @@ -55,21 +55,21 @@ public void onTreePartDestroyed(BeforeDestroyEvent beforeDestroyEvent, EntityRef if (!processingDestruction) { processingDestruction = true; try { - Vector3i position = component.getPosition(new Vector3i()); + Vector3ic position = component.getPosition(); for (EntityRef testedTree : entityManager.getEntitiesWith(LSystemTreeComponent.class)) { BlockComponent blockComponent = testedTree.getComponent(BlockComponent.class); if (blockComponent != null) { - Vector3i testedPosition = blockComponent.getPosition(new Vector3i()); + Vector3ic testedPosition = blockComponent.getPosition(); - double distance = Math.sqrt((testedPosition.x - position.x) * (testedPosition.x - position.x) - + (testedPosition.z - position.z) * (testedPosition.z - position.z)); + double distance = Math.sqrt((testedPosition.x() - position.x()) * (testedPosition.x() - position.x()) + + (testedPosition.z() - position.z()) * (testedPosition.z() - position.z())); if (distance < Math.sqrt(512)) { String type = testedTree.getComponent(LivingPlantComponent.class).type; PlantGrowthDefinition plantGrowthDefinition = plantRegistry.getPlantGrowthDefinition(type); if (plantGrowthDefinition instanceof ConnectedPlantGrowthDefinition) { ConnectedPlantGrowthDefinition plantDef = (ConnectedPlantGrowthDefinition) plantGrowthDefinition; - Collection blocksConnectedTo = plantDef.getBlocksConnectedTo(worldProvider, blockEntityRegistry, position, testedTree); + Collection blocksConnectedTo = plantDef.getBlocksConnectedTo(worldProvider, blockEntityRegistry, position, testedTree); if (blocksConnectedTo != null) { destroyTheConnectedBlocksAndGatherItems(position, blocksConnectedTo); } @@ -83,7 +83,7 @@ public void onTreePartDestroyed(BeforeDestroyEvent beforeDestroyEvent, EntityRef } } - private void destroyTheConnectedBlocksAndGatherItems(Vector3i position, Collection blocksConnectedTo) { + private void destroyTheConnectedBlocksAndGatherItems(Vector3ic position, Collection blocksConnectedTo) { EntityRef worldEntity = worldProvider.getWorldEntity(); worldEntity.send(new LargeBlockUpdateStarting()); try { @@ -93,8 +93,8 @@ private void destroyTheConnectedBlocksAndGatherItems(Vector3i position, Collecti tempInventoryEntity.addComponent(inventory); Prefab damagePrefab = prefabManager.getPrefab("GrowingFlora:TreeCutDamage"); - for (Vector3i vector3i : blocksConnectedTo) { - blockEntityRegistry.getEntityAt(vector3i).send( + for (Vector3ic blockPosition : blocksConnectedTo) { + blockEntityRegistry.getEntityAt(blockPosition).send( new DestroyEvent(tempInventoryEntity, EntityRef.NULL, damagePrefab)); } diff --git a/src/main/java/org/terasology/gf/tree/lsystem/AdvancedLSystemTreeDefinition.java b/src/main/java/org/terasology/gf/tree/lsystem/AdvancedLSystemTreeDefinition.java index 93ddccb..ad8d392 100644 --- a/src/main/java/org/terasology/gf/tree/lsystem/AdvancedLSystemTreeDefinition.java +++ b/src/main/java/org/terasology/gf/tree/lsystem/AdvancedLSystemTreeDefinition.java @@ -79,13 +79,13 @@ public void generateTree(long seed, String saplingBlock, Chunk chunk, int x, int LSystemTreeComponent treeComponent = createNewTreeComponent(seed, worldPos); // Block locations in world coordinates - Map treeBlocks = generateTreeFromAxion(worldPos, treeComponent.axion, treeComponent.branchAngle, treeComponent.rotationAngle) + Map treeBlocks = generateTreeFromAxion(worldPos, treeComponent.axion, treeComponent.branchAngle, treeComponent.rotationAngle) .gatherBlockDefinitions(); BlockManager blockManager = CoreRegistry.get(BlockManager.class); - for (Map.Entry treeBlock : treeBlocks.entrySet()) { - Vector3i blockLocation = treeBlock.getKey(); + for (Map.Entry treeBlock : treeBlocks.entrySet()) { + Vector3ic blockLocation = treeBlock.getKey(); // Do not set the base block - it will have to be initialized from the sapling if (!blockLocation.equals(worldPos)) { @@ -104,7 +104,7 @@ public void generateTree(long seed, String saplingBlock, Chunk chunk, int x, int } public Long setupTreeBaseBlock(WorldProvider worldProvider, BlockEntityRegistry blockEntityRegistry, EntityRef sapling) { - Vector3i location = sapling.getComponent(BlockComponent.class).getPosition(new Vector3i()); + Vector3ic location = sapling.getComponent(BlockComponent.class).getPosition(); LSystemTreeComponent treeComponent = createNewTreeComponent(worldProvider.getSeed().hashCode(), location); @@ -115,7 +115,7 @@ public Long setupTreeBaseBlock(WorldProvider worldProvider, BlockEntityRegistry int growthWait = rand.nextInt(growthInterval); treeComponent.lastGrowthTime = time - growthWait; - Map treeBlocks = generateTreeFromAxion(location, treeComponent.axion, treeComponent.branchAngle, treeComponent.rotationAngle) + Map treeBlocks = generateTreeFromAxion(location, treeComponent.axion, treeComponent.branchAngle, treeComponent.rotationAngle) .gatherBlockDefinitions(); BlockManager blockManager = CoreRegistry.get(BlockManager.class); @@ -176,7 +176,7 @@ public Long updateTree(WorldProvider worldProvider, BlockEntityRegistry blockEnt return (long) growthInterval; } else { - Vector3i treeLocation = treeRef.getComponent(BlockComponent.class).getPosition(new Vector3i()); + Vector3ic treeLocation = treeRef.getComponent(BlockComponent.class).getPosition(); TreeStructure oldTreeStructure = generateTreeFromAxion(treeLocation, lSystemTree.axion, lSystemTree.branchAngle, lSystemTree.rotationAngle); if (isWholeTreeSpaceLoaded(worldProvider, oldTreeStructure)) { FastRandom rand = new FastRandom(); @@ -199,7 +199,7 @@ public Long updateTree(WorldProvider worldProvider, BlockEntityRegistry blockEnt } } - private Long checkForDeathAndSetupComponents(BlockEntityRegistry blockEntityRegistry, Random random, Vector3i location, LSystemTreeComponent treeComponent) { + private Long checkForDeathAndSetupComponents(BlockEntityRegistry blockEntityRegistry, Random random, Vector3ic location, LSystemTreeComponent treeComponent) { EntityRef entity = blockEntityRegistry.getBlockEntityAt(location); if (entity.hasComponent(LSystemTreeComponent.class)) { entity.saveComponent(treeComponent); @@ -227,11 +227,11 @@ private boolean checkForDeath(int generation, float random) { if (generation < treeLongevity.getMin()) { return false; } - double deathChance = Math.pow(1f * (treeLongevity.getMax() - generation) / treeLongevity.range, 0.2); + double deathChance = Math.pow((treeLongevity.getMax() - generation) / treeLongevity.range, 0.2); return (deathChance < random); } - private Block getBlock(BlockManager blockManager, TreeBlockDefinition block, Vector3i location, Collection treeBlocks) { + private Block getBlock(BlockManager blockManager, TreeBlockDefinition block, Vector3ic location, Collection treeBlocks) { BlockUri blockFamilyUri = new BlockUri(block.getBlockUri()); if (block.isBranchBlock()) { byte connections = 0; @@ -250,18 +250,18 @@ private Block getBlock(BlockManager blockManager, TreeBlockDefinition block, Vec } private boolean updateTreeInGame(WorldProvider worldProvider, - Map currentTree, Map nextTree) { + Map currentTree, Map nextTree) { BlockManager blockManager = CoreRegistry.get(BlockManager.class); Block air = blockManager.getBlock(BlockManager.AIR_ID); int replaceCount = 0; - Map blocksToReplaceExistingTreeBlocks = new HashMap<>(); - Map blocksToPlaceInNewPlaces = new HashMap<>(); + Map blocksToReplaceExistingTreeBlocks = new HashMap<>(); + Map blocksToPlaceInNewPlaces = new HashMap<>(); EntityRef worldEntity = worldProvider.getWorldEntity(); - for (Map.Entry newTreeBlock : nextTree.entrySet()) { - Vector3i location = newTreeBlock.getKey(); + for (Map.Entry newTreeBlock : nextTree.entrySet()) { + Vector3ic location = newTreeBlock.getKey(); TreeBlockDefinition oldBlock = currentTree.remove(location); TreeBlockDefinition newBlock = newTreeBlock.getValue(); @@ -272,7 +272,7 @@ private boolean updateTreeInGame(WorldProvider worldProvider, replaceCount++; } else if (oldBlock == null) { if (worldProvider.getBlock(location).isReplacementAllowed()) { - blocksToPlaceInNewPlaces.put(location, resultBlock); + blocksToPlaceInNewPlaces.put(new Vector3i(location), resultBlock); replaceCount++; } } @@ -284,13 +284,13 @@ private boolean updateTreeInGame(WorldProvider worldProvider, worldProvider.getWorldEntity().send(placeBlocks); if (!placeBlocks.isConsumed()) { - for (Vector3i location : currentTree.keySet()) { + for (Vector3ic location : currentTree.keySet()) { // Remove the old block of tree blocksToReplaceExistingTreeBlocks.put(location, air); replaceCount++; } - for (Map.Entry blockLocation : blocksToReplaceExistingTreeBlocks.entrySet()) { + for (Map.Entry blockLocation : blocksToReplaceExistingTreeBlocks.entrySet()) { worldProvider.setBlock(blockLocation.getKey(), blockLocation.getValue()); } @@ -321,7 +321,7 @@ private String generateNextAxion(Random rand, String currentAxion) { return result.toString(); } - private TreeStructure generateTreeFromAxion(Vector3i location, String currentAxion, float angle, float treeRotation) { + private TreeStructure generateTreeFromAxion(Vector3ic location, String currentAxion, float angle, float treeRotation) { TreeStructure treeStructure = new TreeStructure(); Deque stackPosition = Queues.newArrayDeque(); @@ -331,7 +331,7 @@ private TreeStructure generateTreeFromAxion(Vector3i location, String currentAxi BranchLocation branchLocation = treeStructure.getRootBranch(); Vector3f position = new Vector3f(location); //TODO: use Quaternionf directly, as in https://github.com/Terasology/CoreWorlds/commit/6484ebc671bf27511a7eebceeb67e19968d7f33c - Matrix4f rotation = new Matrix4f().translationRotateScale(new Vector3f(),new Quaternionf().setAngleAxis(treeRotation,0,1,0), 1.0f); + Matrix4f rotation = new Matrix4f().translationRotateScale(new Vector3f(), new Quaternionf().setAngleAxis(treeRotation, 0, 1, 0), 1.0f); Callback callback = new Callback(position, rotation); callback.setBranchLocation(branchLocation); @@ -421,32 +421,32 @@ private static List parseAxions(String axionString) { return result; } - public boolean isBlockOwnedByPlant(WorldProvider worldProvider, BlockEntityRegistry blockEntityRegistry, Vector3i block, EntityRef treeRef) { + public boolean isBlockOwnedByPlant(WorldProvider worldProvider, BlockEntityRegistry blockEntityRegistry, Vector3ic block, EntityRef treeRef) { LSystemTreeComponent lSystemTree = treeRef.getComponent(LSystemTreeComponent.class); if (lSystemTree == null) { return false; } - Vector3i location = treeRef.getComponent(BlockComponent.class).getPosition(new Vector3i()); + Vector3ic location = treeRef.getComponent(BlockComponent.class).getPosition(); - Map treeBlockMap = generateTreeFromAxion(location, lSystemTree.axion, lSystemTree.branchAngle, lSystemTree.rotationAngle) + Map treeBlockMap = generateTreeFromAxion(location, lSystemTree.axion, lSystemTree.branchAngle, lSystemTree.rotationAngle) .gatherBlockDefinitions(); - return treeBlockMap.containsKey(new Vector3i(block.x - location.x, block.y - location.y, block.z - location.z)); + return treeBlockMap.containsKey(new Vector3i(block).sub(location)); } - public Collection getBlocksConnectedTo(WorldProvider worldProvider, BlockEntityRegistry blockEntityRegistry, Vector3i block, EntityRef treeRef) { + public Collection getBlocksConnectedTo(WorldProvider worldProvider, BlockEntityRegistry blockEntityRegistry, Vector3ic block, EntityRef treeRef) { // Is it a tree at all LSystemTreeComponent lSystemTree = treeRef.getComponent(LSystemTreeComponent.class); if (lSystemTree == null) { return null; } - Vector3i treeRootLocation = treeRef.getComponent(BlockComponent.class).getPosition(new Vector3i()); + Vector3ic treeRootLocation = treeRef.getComponent(BlockComponent.class).getPosition(); // Does this tree have a block defined at that coordinate TreeStructure treeStructure = generateTreeFromAxion(treeRootLocation, lSystemTree.axion, lSystemTree.branchAngle, lSystemTree.rotationAngle); - Map treeBlockMap = treeStructure.gatherBlockDefinitions(); + Map treeBlockMap = treeStructure.gatherBlockDefinitions(); TreeBlockDefinition expectedBlockDefinition = treeBlockMap.get(block); if (expectedBlockDefinition == null) { return null; @@ -465,33 +465,33 @@ public Collection getBlocksConnectedTo(WorldProvider worldProvider, Bl private final class TreeStructure { private BranchLocation rootBranch = new BranchLocation(0); - private Map blockDefinitionsCache; + private Map blockDefinitionsCache; public BranchLocation getRootBranch() { return rootBranch; } - public Map gatherBlockDefinitions() { + public Map gatherBlockDefinitions() { if (blockDefinitionsCache != null) { return blockDefinitionsCache; } - Map result = new LinkedHashMap<>(); + Map result = new LinkedHashMap<>(); rootBranch.fillBlockDefinitions(result); blockDefinitionsCache = result; return result; } - public Collection getBlocksConnectedTo(WorldProvider worldProvider, Vector3i block) { + public Collection getBlocksConnectedTo(WorldProvider worldProvider, Vector3ic block) { PositionOfBlock pob = rootBranch.getPositionOfBlock(block); if (pob == null) { return Collections.emptySet(); } - Map blockDefinitionsBeforeTrim = gatherBlockDefinitions(); + Map blockDefinitionsBeforeTrim = gatherBlockDefinitions(); - Map connected = new LinkedHashMap<>(blockDefinitionsBeforeTrim); - Iterator> blockIterator = connected.entrySet().iterator(); + Map connected = new LinkedHashMap<>(blockDefinitionsBeforeTrim); + Iterator> blockIterator = connected.entrySet().iterator(); while (blockIterator.hasNext()) { - Map.Entry blockAtLocation = blockIterator.next(); + Map.Entry blockAtLocation = blockIterator.next(); Block blockInWorld = worldProvider.getBlock(blockAtLocation.getKey()); BlockUri familyUri = blockInWorld.getBlockFamily().getURI(); @@ -503,9 +503,9 @@ public Collection getBlocksConnectedTo(WorldProvider worldProvider, Ve pob.branchLocation.trimEverythingAfter(pob.axionIndex); blockDefinitionsCache = null; - Map blockDefinitionsAfterTrim = gatherBlockDefinitions(); + Map blockDefinitionsAfterTrim = gatherBlockDefinitions(); - for (Vector3i location : blockDefinitionsAfterTrim.keySet()) { + for (Vector3ic location : blockDefinitionsAfterTrim.keySet()) { connected.remove(location); } @@ -520,13 +520,13 @@ public BlockRegion getTreeRegion() { int maxY = Integer.MIN_VALUE; int maxZ = Integer.MIN_VALUE; - for (Vector3i block : gatherBlockDefinitions().keySet()) { - minX = Math.min(minX, block.x); - minY = Math.min(minY, block.y); - minZ = Math.min(minZ, block.z); - maxX = Math.max(maxX, block.x); - maxY = Math.max(maxY, block.y); - maxZ = Math.max(maxZ, block.z); + for (Vector3ic block : gatherBlockDefinitions().keySet()) { + minX = Math.min(minX, block.x()); + minY = Math.min(minY, block.y()); + minZ = Math.min(minZ, block.z()); + maxX = Math.max(maxX, block.x()); + maxY = Math.max(maxY, block.y()); + maxZ = Math.max(maxZ, block.z()); } return new BlockRegion(minX, minY, minZ, maxX, maxY, maxZ); } @@ -534,8 +534,8 @@ public BlockRegion getTreeRegion() { private final class BranchLocation { private int startIndex; - private Map mainBlocks = new LinkedHashMap<>(); - private Map> indexBlocks = new LinkedHashMap<>(); + private Map mainBlocks = new LinkedHashMap<>(); + private Map> indexBlocks = new LinkedHashMap<>(); private List branches = new LinkedList<>(); @@ -549,18 +549,12 @@ public BranchLocation addBranch(int branchStartIndex) { return result; } - public void setMainBlock(int index, Vector3i vector) { - if (mainBlocks.get(vector) == null) { - mainBlocks.put(vector, index); - } + public void setMainBlock(int index, Vector3ic vector) { + mainBlocks.putIfAbsent(vector, index); } - public void addTreeBlock(int index, Vector3i vector, TreeBlockDefinition blockDefinition) { - Map blockAtPositions = indexBlocks.get(index); - if (blockAtPositions == null) { - blockAtPositions = new LinkedHashMap<>(); - indexBlocks.put(index, blockAtPositions); - } + public void addTreeBlock(int index, Vector3ic vector, TreeBlockDefinition blockDefinition) { + Map blockAtPositions = indexBlocks.computeIfAbsent(index, k -> new LinkedHashMap<>()); putDefinitionIfMoreImportant(vector, blockDefinition, blockAtPositions); } @@ -569,33 +563,21 @@ public int getStartIndex() { } public void trimEverythingAfter(int index) { - Iterator>> axiomElements = indexBlocks.entrySet().iterator(); - while (axiomElements.hasNext()) { - Map.Entry> axiomElement = axiomElements.next(); - if (axiomElement.getKey() > index) { - axiomElements.remove(); - } - } + indexBlocks.entrySet().removeIf(axiomElement -> axiomElement.getKey() > index); - Iterator branchesIterator = branches.iterator(); - while (branchesIterator.hasNext()) { - BranchLocation branch = branchesIterator.next(); - if (branch.getStartIndex() > index) { - branchesIterator.remove(); - } - } + branches.removeIf(branch -> branch.getStartIndex() > index); } - private void putDefinitionIfMoreImportant(Vector3i vector, TreeBlockDefinition blockDefinition, Map blockAtPositions) { + private void putDefinitionIfMoreImportant(Vector3ic vector, TreeBlockDefinition blockDefinition, Map blockAtPositions) { TreeBlockDefinition oldDefinition = blockAtPositions.get(vector); if (oldDefinition == null || oldDefinition.getTreePart().getPriority() < blockDefinition.getTreePart().getPriority()) { blockAtPositions.put(vector, blockDefinition); } } - public void fillBlockDefinitions(Map result) { - for (Map blockDefinitions : indexBlocks.values()) { - for (Map.Entry blockDefinition : blockDefinitions.entrySet()) { + public void fillBlockDefinitions(Map result) { + for (Map blockDefinitions : indexBlocks.values()) { + for (Map.Entry blockDefinition : blockDefinitions.entrySet()) { putDefinitionIfMoreImportant(blockDefinition.getKey(), blockDefinition.getValue(), result); } } @@ -605,7 +587,7 @@ public void fillBlockDefinitions(Map result) { } } - public PositionOfBlock getPositionOfBlock(Vector3i block) { + public PositionOfBlock getPositionOfBlock(Vector3ic block) { Integer result = mainBlocks.get(block); if (result != null) { return new PositionOfBlock(result, this); diff --git a/src/main/java/org/terasology/gf/tree/lsystem/LSystemBasedTreeGrowthDefinition.java b/src/main/java/org/terasology/gf/tree/lsystem/LSystemBasedTreeGrowthDefinition.java index 97f0ef7..f8c4a28 100644 --- a/src/main/java/org/terasology/gf/tree/lsystem/LSystemBasedTreeGrowthDefinition.java +++ b/src/main/java/org/terasology/gf/tree/lsystem/LSystemBasedTreeGrowthDefinition.java @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.gf.tree.lsystem; -import org.joml.Vector3i; +import org.joml.Vector3ic; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.world.BlockEntityRegistry; import org.terasology.engine.world.WorldProvider; @@ -45,12 +45,12 @@ public boolean randomUpdatePlant(WorldProvider worldProvider, LocalParameters lo } @Override - public boolean isBlockOwnedByPlant(WorldProvider worldProvider, BlockEntityRegistry blockEntityRegistry, Vector3i block, EntityRef plant) { + public boolean isBlockOwnedByPlant(WorldProvider worldProvider, BlockEntityRegistry blockEntityRegistry, Vector3ic block, EntityRef plant) { return getTreeDefinition().isBlockOwnedByPlant(worldProvider, blockEntityRegistry, block, plant); } @Override - public Collection getBlocksConnectedTo(WorldProvider worldProvider, BlockEntityRegistry blockEntityRegistry, Vector3i block, EntityRef plant) { + public Collection getBlocksConnectedTo(WorldProvider worldProvider, BlockEntityRegistry blockEntityRegistry, Vector3ic block, EntityRef plant) { return getTreeDefinition().getBlocksConnectedTo(worldProvider, blockEntityRegistry, block, plant); } }