Skip to content

Commit b7ff836

Browse files
committed
Merge remote-tracking branch 'origin/develop' into master
# Conflicts: # src/main/resources/locales/zh-CN.yml
2 parents e241643 + 089fed3 commit b7ff836

18 files changed

+1161
-391
lines changed

pom.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,15 @@
3535
<java.version>1.8</java.version>
3636
<powermock.version>2.0.2</powermock.version>
3737
<!-- More visible way how to change dependency versions -->
38-
<spigot.version>1.15.2-R0.1-SNAPSHOT</spigot.version>
38+
<spigot.version>1.16.4-R0.1-SNAPSHOT</spigot.version>
3939
<bentobox.version>1.15.4</bentobox.version>
4040
<level.version>2.5.0</level.version>
4141
<!-- Vault API version -->
4242
<vault.version>1.7</vault.version>
4343
<!-- Revision variable removes warning about dynamic version -->
4444
<revision>${build.version}-SNAPSHOT</revision>
4545
<!-- This allows to change between versions and snapshots. -->
46-
<build.version>2.2.1</build.version>
46+
<build.version>2.3.0</build.version>
4747
<build.number>-LOCAL</build.number>
4848
</properties>
4949

src/main/java/world/bentobox/magiccobblestonegenerator/listeners/GeneratorListener.java

+82-45
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,23 @@
88

99

1010
import org.bukkit.Bukkit;
11+
import org.bukkit.Location;
12+
import org.bukkit.Material;
1113
import org.bukkit.Particle;
1214
import org.bukkit.Sound;
1315
import org.bukkit.SoundCategory;
1416
import org.bukkit.block.Block;
1517
import org.bukkit.entity.Player;
1618
import org.bukkit.event.Listener;
19+
import org.jetbrains.annotations.Nullable;
20+
import java.util.Objects;
1721
import java.util.Random;
1822

23+
import world.bentobox.bentobox.api.user.User;
24+
import world.bentobox.bentobox.database.objects.Island;
1925
import world.bentobox.magiccobblestonegenerator.StoneGeneratorAddon;
2026
import world.bentobox.magiccobblestonegenerator.database.objects.GeneratorDataObject;
27+
import world.bentobox.magiccobblestonegenerator.database.objects.GeneratorTierObject;
2128

2229

2330
/**
@@ -42,48 +49,60 @@ public GeneratorListener(StoneGeneratorAddon addon)
4249
// ---------------------------------------------------------------------
4350

4451

52+
/**
53+
* This method returns if someone from the island is online. The method do nothing, if offline
54+
* offline generation is enabled.
55+
* @param island Island that must be checked.
56+
* @return {@code true} if someone is online or offline generation is enabled, {@code false} otherwise.
57+
*/
58+
protected boolean isSomeoneOnline(Island island)
59+
{
60+
return addon.getSettings().isOfflineGeneration() ||
61+
island.getMemberSet().stream().
62+
map(User::getInstance).
63+
filter(Objects::nonNull).
64+
anyMatch(User::isOnline);
65+
}
66+
67+
4568
/**
4669
* This method returns there is an island member in range to active of "custom" block generation
4770
*
4871
* @param block Block that must be checked.
4972
* @return true if there is a player in the set range
5073
*/
51-
protected boolean isInRangeToGenerate(Block block)
74+
protected boolean isInRangeToGenerate(Island island, Block block)
5275
{
5376
// If settings value is 0, then assume that it is not set at all.
5477
int workingRange = this.addon.getSettings().getDefaultWorkingRange();
5578

79+
// Check if any island member is near block.
5680
if (workingRange > 0)
5781
{
58-
// Check if any island member is near block.
59-
return this.addon.getIslands().getIslandAt(block.getLocation()).
60-
map(island ->
61-
{
62-
GeneratorDataObject data = this.addon.getAddonManager().getGeneratorData(island);
63-
64-
if (data == null)
65-
{
66-
// If data object is not found, return false.
67-
return false;
68-
}
69-
70-
// Use range from island object.
71-
int range = data.getRange();
72-
73-
// If range is -1 or 0, the ignore it.
74-
if (range == -1 || range == 0)
75-
{
76-
return true;
77-
}
78-
79-
return block.getWorld().getNearbyEntities(block.getLocation(),
80-
range,
81-
range,
82-
range).
83-
stream().
84-
filter(Player.class::isInstance).
85-
anyMatch(e -> island.getMemberSet().contains(e.getUniqueId()));
86-
}).orElse(false);
82+
GeneratorDataObject data = this.addon.getAddonManager().getGeneratorData(island);
83+
84+
if (data == null)
85+
{
86+
// If data object is not found, return false.
87+
return false;
88+
}
89+
90+
// Use range from island object.
91+
int range = data.getRange();
92+
93+
// If range is -1 or 0, the ignore it.
94+
if (range == -1 || range == 0)
95+
{
96+
return true;
97+
}
98+
99+
return block.getWorld().getNearbyEntities(block.getLocation(),
100+
range,
101+
range,
102+
range).
103+
stream().
104+
filter(Player.class::isInstance).
105+
anyMatch(e -> island.getMemberSet().contains(e.getUniqueId()));
87106
}
88107
else
89108
{
@@ -130,38 +149,56 @@ protected void playEffects(Block block)
130149

131150

132151
/**
133-
* This method returns if generator manages to replace cobblestone to a new magic block.
152+
* This method returns material of new block if generator manages to replace cobblestone to a new magic block.
134153
*
135-
* @param replacedBlock Block that need to be replaced.
136-
* @return {@code true} if block is replaced, {@code false} otherwise.
154+
* @param island Island on which block is processed.
155+
* @param location Block location that need to be replaced.
156+
* @return Material of replaced block or null, if block was not replaced.
137157
*/
138-
protected boolean isCobblestoneReplacementGenerated(Block replacedBlock)
158+
protected @Nullable Material generateCobblestoneReplacement(@Nullable Island island, Location location)
139159
{
140-
return this.addon.getGenerator().isCobblestoneReplacementGenerated(replacedBlock);
160+
GeneratorTierObject generatorTier = this.addon.getAddonManager().getGeneratorTier(
161+
island,
162+
location,
163+
GeneratorTierObject.GeneratorType.COBBLESTONE);
164+
165+
return this.addon.getGenerator().processBlockReplacement(generatorTier, location);
141166
}
142167

143168

144169
/**
145-
* This method returns if generator manages to replace stone to a new magic block.
170+
* This method returns material of new block if generator manages to replace stone to a new magic block.
146171
*
147-
* @param replacedBlock Block that need to be replaced.
148-
* @return {@code true} if block is replaced, {@code false} otherwise.
172+
* @param island Island on which block is processed.
173+
* @param location Block that need to be replaced.
174+
* @return Material of replaced block or null, if block was not replaced.
149175
*/
150-
protected boolean isStoneReplacementGenerated(Block replacedBlock)
176+
protected @Nullable Material generateStoneReplacement(@Nullable Island island, Location location)
151177
{
152-
return this.addon.getGenerator().isStoneReplacementGenerated(replacedBlock);
178+
GeneratorTierObject generatorTier = this.addon.getAddonManager().getGeneratorTier(
179+
island,
180+
location,
181+
GeneratorTierObject.GeneratorType.STONE);
182+
183+
return this.addon.getGenerator().processBlockReplacement(generatorTier, location);
153184
}
154185

155186

156187
/**
157-
* This method returns if generator manages to replace basalt to a new magic block.
188+
* This method returns material of new block if generator manages to replace basalt to a new magic block.
158189
*
159-
* @param replacedBlock Block that need to be replaced.
160-
* @return {@code true} if block is replaced, {@code false} otherwise.
190+
* @param island Island on which block is processed.
191+
* @param location Block that need to be replaced.
192+
* @return Material of replaced block or null, if block was not replaced.
161193
*/
162-
protected boolean isBasaltReplacementGenerated(Block replacedBlock)
194+
protected @Nullable Material generateBasaltReplacement(@Nullable Island island, Location location)
163195
{
164-
return this.addon.getGenerator().isBasaltReplacementGenerated(replacedBlock);
196+
GeneratorTierObject generatorTier = this.addon.getAddonManager().getGeneratorTier(
197+
island,
198+
location,
199+
GeneratorTierObject.GeneratorType.BASALT);
200+
201+
return this.addon.getGenerator().processBlockReplacement(generatorTier, location);
165202
}
166203

167204

src/main/java/world/bentobox/magiccobblestonegenerator/listeners/MagicGeneratorListener.java

+40-12
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
///
2+
// Created by BONNe
3+
// Copyright - 2021
4+
///
5+
16
package world.bentobox.magiccobblestonegenerator.listeners;
27

38

@@ -8,6 +13,9 @@
813
import org.bukkit.event.EventPriority;
914
import org.bukkit.event.block.BlockFromToEvent;
1015

16+
import java.util.Optional;
17+
18+
import world.bentobox.bentobox.database.objects.Island;
1119
import world.bentobox.magiccobblestonegenerator.StoneGeneratorAddon;
1220

1321

@@ -82,21 +90,29 @@ public void onBlockFromToEvent(BlockFromToEvent event)
8290
return;
8391
}
8492

85-
if (this.addon.getIslands().getIslandAt(eventToBlock.getLocation()).
86-
map(island -> !island.isAllowed(StoneGeneratorAddon.MAGIC_COBBLESTONE_GENERATOR)).
87-
orElse(!StoneGeneratorAddon.MAGIC_COBBLESTONE_GENERATOR.isSetForWorld(eventToBlock.getWorld())))
93+
Optional<Island> islandOptional = this.addon.getIslands().getIslandAt(eventSourceBlock.getLocation());
94+
95+
if (!islandOptional.isPresent())
96+
{
97+
// If not operating in non-island regions.
98+
return;
99+
}
100+
101+
Island island = islandOptional.get();
102+
103+
if (!island.isAllowed(StoneGeneratorAddon.MAGIC_COBBLESTONE_GENERATOR))
88104
{
89-
// if flag is toggled off, return
105+
// Currently addon is not working outside island protection ranges.
90106
return;
91107
}
92108

93-
if (!this.addon.getAddonManager().isMembersOnline(eventSourceBlock.getLocation()))
109+
if (!this.isSomeoneOnline(island))
94110
{
95-
// If island members are not online then do not continue
111+
// Offline generation is not enabled and all island members are offline.
96112
return;
97113
}
98114

99-
if (!this.isInRangeToGenerate(eventSourceBlock))
115+
if (!this.isInRangeToGenerate(island, eventSourceBlock))
100116
{
101117
// Check if any island member is at generator range.
102118
return;
@@ -107,8 +123,11 @@ public void onBlockFromToEvent(BlockFromToEvent event)
107123
{
108124
// Return from here at any case. Even if could not manage to replace stone.
109125

110-
if (this.isStoneReplacementGenerated(eventToBlock))
126+
Material material = this.generateStoneReplacement(island, eventToBlock.getLocation());
127+
128+
if (material != null)
111129
{
130+
eventToBlock.setType(material);
112131
// sound when lava transforms to cobble
113132
this.playEffects(eventToBlock);
114133
event.setCancelled(true);
@@ -127,9 +146,12 @@ public void onBlockFromToEvent(BlockFromToEvent event)
127146

128147
if (liquid.equals(Material.LAVA) && this.canLavaGenerateCobblestone(eventToBlock, event.getFace()))
129148
{
149+
Material material = this.generateCobblestoneReplacement(island, eventToBlock.getLocation());
150+
130151
// Lava is generating cobblestone into eventToBlock place
131-
if (this.isCobblestoneReplacementGenerated(eventToBlock))
152+
if (material != null)
132153
{
154+
eventToBlock.setType(material);
133155
// sound when lava transforms to cobble
134156
this.playEffects(eventToBlock);
135157
event.setCancelled(true);
@@ -144,10 +166,16 @@ else if (liquid.equals(Material.WATER))
144166
// Water flow should not be cancelled even if replacement is generated, as replacement block will
145167
// never be in the flow block, as it will always be next block.
146168

147-
if (replacedBlock != null && this.isStoneReplacementGenerated(replacedBlock))
169+
if (replacedBlock != null)
148170
{
149-
// sound when lava transforms to cobble
150-
this.playEffects(replacedBlock);
171+
Material material = this.generateStoneReplacement(island, replacedBlock.getLocation());
172+
173+
if (material != null)
174+
{
175+
replacedBlock.setType(material);
176+
// sound when lava transforms to cobble
177+
this.playEffects(eventToBlock);
178+
}
151179
}
152180
}
153181
}

0 commit comments

Comments
 (0)