Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/main/java/me/iwareq/fakeinventories/FakeInventories.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import cn.nukkit.block.BlockID;
import cn.nukkit.blockentity.BlockEntity;
import cn.nukkit.event.EventPriority;
import cn.nukkit.event.Listener;
import cn.nukkit.event.inventory.InventoryTransactionEvent;
import cn.nukkit.inventory.InventoryType;
import cn.nukkit.inventory.transaction.action.SlotChangeAction;
Expand All @@ -12,13 +11,14 @@
import lombok.Getter;
import me.iwareq.fakeinventories.block.DoubleFakeBlock;
import me.iwareq.fakeinventories.block.FakeBlock;
import me.iwareq.fakeinventories.block.FakeBlockOffset;
import me.iwareq.fakeinventories.block.SingleFakeBlock;
import me.iwareq.fakeinventories.block.offset.FakeBlockOffset;
import me.iwareq.fakeinventories.block.offset.FakeBlockOffsets;

import java.util.EnumMap;
import java.util.Map;

public class FakeInventories extends PluginBase implements Listener {
public class FakeInventories extends PluginBase {

@Getter
private static FakeInventories instance;
Expand All @@ -40,7 +40,7 @@ public void onLoad() {
FAKE_BLOCKS.put(InventoryType.DROPPER, new SingleFakeBlock(BlockID.DROPPER, InventoryType.DROPPER.getDefaultTitle()));
FAKE_BLOCKS.put(InventoryType.HOPPER, new SingleFakeBlock(BlockID.HOPPER_BLOCK, BlockEntity.HOPPER));
FAKE_BLOCKS.put(InventoryType.SHULKER_BOX, new SingleFakeBlock(BlockID.SHULKER_BOX, BlockEntity.SHULKER_BOX));
FAKE_BLOCK_OFFSET = FakeBlockOffset.valueOf(this.getConfig().getString("fake-block-offset-mode").toUpperCase());
FAKE_BLOCK_OFFSET = FakeBlockOffsets.valueOf(this.getConfig().getString("fake-block-offset-mode").toUpperCase());
}

@Override
Expand Down
5 changes: 4 additions & 1 deletion src/main/java/me/iwareq/fakeinventories/FakeInventory.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import lombok.Getter;
import lombok.Setter;
import me.iwareq.fakeinventories.block.FakeBlock;
import me.iwareq.fakeinventories.block.offset.FakeBlockOffset;
import me.iwareq.fakeinventories.util.ItemHandler;
import me.iwareq.fakeinventories.util.SimplePlayerHandler;

Expand All @@ -33,6 +34,7 @@ public class FakeInventory extends BaseInventory {
private final Map<Integer, ItemHandler> handlers = new HashMap<>();

private final FakeBlock fakeBlock;
private FakeBlockOffset fakeBlockOffset;

public FakeInventory(InventoryType inventoryType) {
this(inventoryType, null);
Expand All @@ -42,11 +44,12 @@ public FakeInventory(InventoryType inventoryType, String title) {
super(null, inventoryType);
this.title = title == null ? inventoryType.getDefaultTitle() : title;
this.fakeBlock = FakeInventories.getFakeBlock(inventoryType);
this.fakeBlockOffset = FakeInventories.getFakeBlockOffset();
}

@Override
public void onOpen(Player player) {
this.fakeBlock.create(player, this.getTitle());
this.fakeBlock.create(player, this.fakeBlockOffset.getOffset(player), this.getTitle());

Server.getInstance().getScheduler().scheduleDelayedTask(FakeInventories.getInstance(), () -> {
ContainerOpenPacket packet = new ContainerOpenPacket();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ public DoubleFakeBlock(int blockId, String tileId) {
}

@Override
public List<Vector3> getPlacePositions(Player player) {
Vector3 position = player.getPosition().add(this.getOffset(player)).floor();
public List<Vector3> getPlacePositions(Player player, Vector3 offset) {
Vector3 position = player.getPosition().add(this.correctOffset(offset)).floor();
DimensionData dimension = player.getLevel().getDimensionData();
if (position.getFloorY() >= dimension.getMinHeight() && position.getFloorY() < dimension.getMaxHeight()) {
if ((position.getFloorX() & 1) == 1) {
Expand All @@ -28,9 +28,7 @@ public List<Vector3> getPlacePositions(Player player) {
return Collections.emptyList();
}

@Override
public Vector3 getOffset(Player player) {
Vector3 offset = super.getOffset(player);
protected Vector3 correctOffset(Vector3 offset) {
offset.x *= 1.5;
offset.z *= 1.5;
return offset;
Expand Down
11 changes: 3 additions & 8 deletions src/main/java/me/iwareq/fakeinventories/block/FakeBlock.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,30 +3,25 @@
import cn.nukkit.Player;
import cn.nukkit.level.DimensionData;
import cn.nukkit.math.Vector3;
import me.iwareq.fakeinventories.FakeInventories;

import java.util.Collections;
import java.util.List;
import java.util.Set;

public interface FakeBlock {

void create(Player player, String title);
void create(Player player, Vector3 offset, String title);

void remove(Player player);

Set<Vector3> getLastPositions(Player player);

default List<Vector3> getPlacePositions(Player player) {
Vector3 position = player.getPosition().add(this.getOffset(player)).floor();
default List<Vector3> getPlacePositions(Player player, Vector3 offset) {
Vector3 position = player.getPosition().add(offset).floor();
DimensionData dimension = player.getLevel().getDimensionData();
if (position.getFloorY() >= dimension.getMinHeight() && position.getFloorY() < dimension.getMaxHeight()) {
return Collections.singletonList(position);
}
return Collections.emptyList();
}

default Vector3 getOffset(Player player) {
return FakeInventories.getFakeBlockOffset().getOffset(player);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ public class SingleFakeBlock implements FakeBlock {
protected final Map<Player, Set<Vector3>> lastPositions = new Object2ObjectArrayMap<>();

@Override
public void create(Player player, String title) {
this.createAndGetLastPositions(player).addAll(this.getPlacePositions(player));
public void create(Player player, Vector3 offset, String title) {
this.createAndGetLastPositions(player).addAll(this.getPlacePositions(player, offset));
this.getLastPositions(player).forEach(position -> {
UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket();
updateBlockPacket.blockRuntimeId = GlobalBlockPalette.getOrCreateRuntimeId(player.protocol, this.blockId, 0);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package me.iwareq.fakeinventories.block.offset;

import cn.nukkit.Player;
import cn.nukkit.math.Vector3;

/**
* Interface for defining the offset of a fake block for specific inventory.
*/
public interface FakeBlockOffset {

/**
* Get an offset for the player.
*
* @param player the player
* @return defined offset
*/
Vector3 getOffset(Player player);
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
package me.iwareq.fakeinventories.block;
package me.iwareq.fakeinventories.block.offset;

import cn.nukkit.Player;
import cn.nukkit.math.Vector3;
import me.iwareq.fakeinventories.util.InventoryUtils;

public enum FakeBlockOffset {
/**
* Ready-made offsets for fake blocks.
*/
public enum FakeBlockOffsets implements FakeBlockOffset {
/**
* Standard block offset.
*/
STANDARD {
@Override
public Vector3 getOffset(Player player) {
Expand All @@ -15,12 +21,13 @@ public Vector3 getOffset(Player player) {
return offset;
}
},
/**
* Geyser-like block offset.
*/
GEYSER {
@Override
public Vector3 getOffset(Player player) {
return InventoryUtils.findAvailableOffset(player);
}
};

public abstract Vector3 getOffset(Player player);
}
}