Skip to content

Commit

Permalink
Always pass through the World when handling area copies
Browse files Browse the repository at this point in the history
  • Loading branch information
me4502 committed Sep 11, 2022
1 parent 327a2e7 commit f6b86a8
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 28 deletions.
31 changes: 13 additions & 18 deletions src/main/java/com/sk89q/craftbook/mechanics/area/Area.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard;
import com.sk89q.worldedit.world.World;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
Expand Down Expand Up @@ -210,23 +211,22 @@ private static boolean toggle(ChangedSign sign, boolean save) {
String inactiveID = StringUtils.replace(sign.getLine(3), "-", "").toLowerCase(Locale.ENGLISH);

BlockArrayClipboard copy;
World weWorld = BukkitAdapter.adapt(sign.getBlock().getWorld());

if (checkToggleState(sign)) {
copy = CopyManager.getInstance().load(namespace, id);
copy.getRegion().setWorld(BukkitAdapter.adapt(sign.getBlock().getWorld()));

// if this is a save area save it before toggling off
if (save) {
copy = CopyManager.getInstance().copy(copy.getRegion());
copy = CopyManager.getInstance().copy(copy.getRegion(), weWorld);
CopyManager.getInstance().save(namespace, id, copy);
}
// if we are toggling to the second area we dont clear the old area
if (!inactiveID.isEmpty() && !inactiveID.equals("--")) {
copy = CopyManager.getInstance().load(namespace, inactiveID);
copy.getRegion().setWorld(BukkitAdapter.adapt(sign.getBlock().getWorld()));
CopyManager.getInstance().paste(copy);
CopyManager.getInstance().paste(copy, weWorld);
} else {
CopyManager.getInstance().clear(copy);
CopyManager.getInstance().clear(copy, weWorld);
}
setToggledState(sign, false);
} else {
Expand All @@ -235,14 +235,12 @@ private static boolean toggle(ChangedSign sign, boolean save) {
// if this is a save area save it before toggling off
if (save && !inactiveID.isEmpty() && !inactiveID.equals("--")) {
copy = CopyManager.getInstance().load(namespace, inactiveID);
copy.getRegion().setWorld(BukkitAdapter.adapt(sign.getBlock().getWorld()));
copy = CopyManager.getInstance().copy(copy.getRegion());
copy = CopyManager.getInstance().copy(copy.getRegion(), weWorld);
CopyManager.getInstance().save(namespace, inactiveID, copy);
}

copy = CopyManager.getInstance().load(namespace, id);
copy.getRegion().setWorld(BukkitAdapter.adapt(sign.getBlock().getWorld()));
CopyManager.getInstance().paste(copy);
CopyManager.getInstance().paste(copy, weWorld);
setToggledState(sign, true);
}
return true;
Expand All @@ -265,38 +263,35 @@ public static boolean toggleCold(ChangedSign sign) {
String inactiveID = StringUtils.replace(sign.getLine(3), "-", "").toLowerCase(Locale.ENGLISH);

BlockArrayClipboard copy;
World weWorld = BukkitAdapter.adapt(sign.getBlock().getWorld());

if (toggleOn) {
copy = CopyManager.getInstance().load(namespace, id);
copy.getRegion().setWorld(BukkitAdapter.adapt(sign.getBlock().getWorld()));

// if this is a save area save it before toggling off
if (save) {
copy = CopyManager.getInstance().copy(copy.getRegion());
copy = CopyManager.getInstance().copy(copy.getRegion(), weWorld);
CopyManager.getInstance().save(namespace, id, copy);
}
// if we are toggling to the second area we dont clear the old area
if (!inactiveID.isEmpty() && !inactiveID.equals("--")) {
copy = CopyManager.getInstance().load(namespace, inactiveID);
copy.getRegion().setWorld(BukkitAdapter.adapt(sign.getBlock().getWorld()));
CopyManager.getInstance().paste(copy);
CopyManager.getInstance().paste(copy, weWorld);
} else {
CopyManager.getInstance().clear(copy);
CopyManager.getInstance().clear(copy, weWorld);
}
setToggledState(sign, false);
} else {
// toggle the area on
// if this is a save area save it before toggling off
if (save && !inactiveID.isEmpty() && !inactiveID.equals("--")) {
copy = CopyManager.getInstance().load(namespace, inactiveID);
copy.getRegion().setWorld(BukkitAdapter.adapt(sign.getBlock().getWorld()));
copy = CopyManager.getInstance().copy(copy.getRegion());
copy = CopyManager.getInstance().copy(copy.getRegion(), weWorld);
CopyManager.getInstance().save(namespace, inactiveID, copy);
} else {
copy = CopyManager.getInstance().load(namespace, id);
copy.getRegion().setWorld(BukkitAdapter.adapt(sign.getBlock().getWorld()));
}
CopyManager.getInstance().paste(copy);
CopyManager.getInstance().paste(copy, weWorld);
setToggledState(sign, true);
}
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ public void saveArea(CommandContext context, CommandSender sender) throws Comman
}

// Copy
BlockArrayClipboard copy = CopyManager.getInstance().copy(sel, copyEntities, copyBiomes);
BlockArrayClipboard copy = CopyManager.getInstance().copy(sel, world, copyEntities, copyBiomes);

plugin.getServer().getLogger().info(player.getName() + " saving toggle area with folder '" + namespace +
"' and ID '" + id + "'.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import com.sk89q.worldedit.function.operation.Operations;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.session.ClipboardHolder;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.block.BlockTypes;
import org.apache.commons.lang.StringUtils;

Expand Down Expand Up @@ -219,8 +220,8 @@ public void save(String namespace, String id, BlockArrayClipboard clipboard) thr
* @return The BlockArrayClipboard
* @throws WorldEditException If something went wrong.
*/
public BlockArrayClipboard copy(Region region) throws WorldEditException {
return copy(region, false, false);
public BlockArrayClipboard copy(Region region, World world) throws WorldEditException {
return copy(region, world, false, false);
}

/**
Expand All @@ -230,11 +231,10 @@ public BlockArrayClipboard copy(Region region) throws WorldEditException {
* @return The BlockArrayClipboard
* @throws WorldEditException If something went wrong.
*/
public BlockArrayClipboard copy(Region region, boolean copyEntities, boolean copyBiomes) throws WorldEditException {
public BlockArrayClipboard copy(Region region, World world, boolean copyEntities, boolean copyBiomes) throws WorldEditException {
BlockArrayClipboard copy = new BlockArrayClipboard(region);
// copy.setOrigin(origin);

EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(region.getWorld(), -1);
EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(world, -1);

ForwardExtentCopy forwardExtentCopy = new ForwardExtentCopy(editSession, region, copy, region.getMinimumPoint());
forwardExtentCopy.setCopyingEntities(copyEntities);
Expand All @@ -250,8 +250,8 @@ public BlockArrayClipboard copy(Region region, boolean copyEntities, boolean cop
* @param clipboard The clipboard
* @throws WorldEditException If it fails
*/
public void paste(BlockArrayClipboard clipboard) throws WorldEditException {
try (EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(clipboard.getRegion().getWorld(), -1)) {
public void paste(BlockArrayClipboard clipboard, World world) throws WorldEditException {
try (EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(world, -1)) {

Operation operation = new ClipboardHolder(clipboard)
.createPaste(editSession)
Expand All @@ -270,8 +270,8 @@ public void paste(BlockArrayClipboard clipboard) throws WorldEditException {
*
* @param clipboard The clipboard
*/
public void clear(BlockArrayClipboard clipboard) {
try (EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(clipboard.getRegion().getWorld(), -1)) {
public void clear(BlockArrayClipboard clipboard, World world) {
try (EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(world, -1)) {
editSession.setBlocks(clipboard.getRegion(), BlockTypes.AIR.getDefaultState());
} catch (MaxChangedBlocksException e) {
// is never thrown
Expand Down

0 comments on commit f6b86a8

Please sign in to comment.