mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-11-25 16:38:33 +01:00
Compare commits
3 commits
9bb1105c7c
...
ce972eb1f3
Author | SHA1 | Date | |
---|---|---|---|
|
ce972eb1f3 | ||
|
30e8137c04 | ||
|
327fdc5c3b |
9 changed files with 58 additions and 22 deletions
|
@ -34,9 +34,14 @@ public class BlockBreaker extends FullyDirectionalBlock.Container {
|
||||||
this.isPlacer = isPlacer;
|
this.isPlacer = isPlacer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasTileEntity(BlockState state) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
//@Override
|
@Override
|
||||||
public TileEntity newBlockEntity(IBlockReader world) {
|
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||||
return this.isPlacer
|
return this.isPlacer
|
||||||
? new TileEntityPlacer()
|
? new TileEntityPlacer()
|
||||||
: new TileEntityBreaker();
|
: new TileEntityBreaker();
|
||||||
|
@ -45,7 +50,7 @@ public class BlockBreaker extends FullyDirectionalBlock.Container {
|
||||||
@Override
|
@Override
|
||||||
public ActionResultType use(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) {
|
public ActionResultType use(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) {
|
||||||
if (this.tryToggleRedstone(world, pos, player)) {
|
if (this.tryToggleRedstone(world, pos, player)) {
|
||||||
return ActionResultType.PASS;
|
return ActionResultType.CONSUME;
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.openGui(world, player, pos, TileEntityBreaker.class);
|
return this.openGui(world, player, pos, TileEntityBreaker.class);
|
||||||
|
|
|
@ -22,21 +22,29 @@ import net.minecraft.util.math.BlockRayTraceResult;
|
||||||
import net.minecraft.world.IBlockReader;
|
import net.minecraft.world.IBlockReader;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class BlockDropper extends FullyDirectionalBlock.Container {
|
public class BlockDropper extends FullyDirectionalBlock.Container {
|
||||||
|
|
||||||
public BlockDropper() {
|
public BlockDropper() {
|
||||||
super(ActuallyBlocks.defaultPickProps(0));
|
super(ActuallyBlocks.defaultPickProps(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Override
|
@Override
|
||||||
public TileEntity newBlockEntity(IBlockReader worldIn) {
|
public boolean hasTileEntity(BlockState state) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||||
return new TileEntityDropper();
|
return new TileEntityDropper();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ActionResultType use(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) {
|
public ActionResultType use(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) {
|
||||||
if (this.tryToggleRedstone(world, pos, player)) {
|
if (this.tryToggleRedstone(world, pos, player)) {
|
||||||
return ActionResultType.PASS;
|
return ActionResultType.CONSUME;
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.openGui(world, player, pos, TileEntityDropper.class);
|
return this.openGui(world, player, pos, TileEntityDropper.class);
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
package de.ellpeck.actuallyadditions.mod.blocks.base;
|
package de.ellpeck.actuallyadditions.mod.blocks.base;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
|
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
|
||||||
|
import de.ellpeck.actuallyadditions.mod.config.CommonConfig;
|
||||||
import de.ellpeck.actuallyadditions.mod.config.ConfigValues;
|
import de.ellpeck.actuallyadditions.mod.config.ConfigValues;
|
||||||
import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase;
|
import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase;
|
||||||
import de.ellpeck.actuallyadditions.mod.tile.TileEntityInventoryBase;
|
import de.ellpeck.actuallyadditions.mod.tile.TileEntityInventoryBase;
|
||||||
|
@ -91,7 +92,7 @@ public abstract class BlockContainerBase extends Block {
|
||||||
|
|
||||||
public boolean tryToggleRedstone(World world, BlockPos pos, PlayerEntity player) {
|
public boolean tryToggleRedstone(World world, BlockPos pos, PlayerEntity player) {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (StackUtil.isValid(stack) && stack.getItem() == ConfigValues.itemRedstoneTorchConfigurator) {
|
if (stack.getItem() == CommonConfig.Other.redstoneConfigureItem) {
|
||||||
TileEntity tile = world.getBlockEntity(pos);
|
TileEntity tile = world.getBlockEntity(pos);
|
||||||
if (tile instanceof TileEntityBase) {
|
if (tile instanceof TileEntityBase) {
|
||||||
TileEntityBase base = (TileEntityBase) tile;
|
TileEntityBase base = (TileEntityBase) tile;
|
||||||
|
@ -131,7 +132,7 @@ public abstract class BlockContainerBase extends Block {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override //TODO do we need this?
|
||||||
public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, boolean isMoving) {
|
public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, boolean isMoving) {
|
||||||
this.neighborsChangedCustom(worldIn, pos);
|
this.neighborsChangedCustom(worldIn, pos);
|
||||||
}
|
}
|
||||||
|
@ -139,7 +140,7 @@ public abstract class BlockContainerBase extends Block {
|
||||||
@Override
|
@Override
|
||||||
public void onNeighborChange(BlockState state, IWorldReader world, BlockPos pos, BlockPos neighbor) {
|
public void onNeighborChange(BlockState state, IWorldReader world, BlockPos pos, BlockPos neighbor) {
|
||||||
super.onNeighborChange(state, world, pos, neighbor);
|
super.onNeighborChange(state, world, pos, neighbor);
|
||||||
if (world instanceof World) {
|
if (world instanceof World) { //TODO what?
|
||||||
this.neighborsChangedCustom((World) world, pos);
|
this.neighborsChangedCustom((World) world, pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -155,6 +156,8 @@ public abstract class BlockContainerBase extends Block {
|
||||||
if (base.respondsToPulses()) {
|
if (base.respondsToPulses()) {
|
||||||
// TODO: [port] eval what this does? :D
|
// TODO: [port] eval what this does? :D
|
||||||
// world.scheduleUpdate(pos, this, this.tickRate(world));
|
// world.scheduleUpdate(pos, this, this.tickRate(world));
|
||||||
|
// Who knows -Flanks
|
||||||
|
base.activateOnPulse();
|
||||||
}
|
}
|
||||||
base.setRedstonePowered(true);
|
base.setRedstonePowered(true);
|
||||||
} else if (!powered && wasPowered) {
|
} else if (!powered && wasPowered) {
|
||||||
|
|
|
@ -191,16 +191,16 @@ public class ClientEvents {
|
||||||
if (tileHit instanceof TileEntityBase) {
|
if (tileHit instanceof TileEntityBase) {
|
||||||
TileEntityBase base = (TileEntityBase) tileHit;
|
TileEntityBase base = (TileEntityBase) tileHit;
|
||||||
if (base.isRedstoneToggle()) {
|
if (base.isRedstoneToggle()) {
|
||||||
String strg = String.format("%s: %s", StringUtil.localize("info." + ActuallyAdditions.MODID + ".redstoneMode.name"), TextFormatting.DARK_RED + StringUtil.localize("info." + ActuallyAdditions.MODID + ".redstoneMode." + (base.isPulseMode
|
String strg = String.format("%s: %s", StringUtil.localize("info." + ActuallyAdditions.MODID + ".redstoneMode"), TextFormatting.DARK_RED + StringUtil.localize("info." + ActuallyAdditions.MODID + ".redstoneMode." + (base.isPulseMode
|
||||||
? "pulse"
|
? "pulse"
|
||||||
: "deactivation")) + TextFormatting.RESET);
|
: "deactivation")) + TextFormatting.RESET);
|
||||||
font.drawShadow(event.getMatrixStack(), strg, event.getWindow().getGuiScaledWidth() / 2f + 5, event.getWindow().getGuiScaledHeight() / 2f + 5, StringUtil.DECIMAL_COLOR_WHITE);
|
font.drawShadow(event.getMatrixStack(), strg, event.getWindow().getGuiScaledWidth() / 2f + 5, event.getWindow().getGuiScaledHeight() / 2f + 5, StringUtil.DECIMAL_COLOR_WHITE);
|
||||||
|
|
||||||
String expl;
|
String expl;
|
||||||
if (StackUtil.isValid(stack) && stack.getItem() == ConfigValues.itemRedstoneTorchConfigurator) {
|
if (StackUtil.isValid(stack) && stack.getItem() == CommonConfig.Other.redstoneConfigureItem.asItem()) {
|
||||||
expl = TextFormatting.GREEN + StringUtil.localize("info." + ActuallyAdditions.MODID + ".redstoneMode.validItem");
|
expl = TextFormatting.GREEN + StringUtil.localize("info." + ActuallyAdditions.MODID + ".redstoneMode.validItem");
|
||||||
} else {
|
} else {
|
||||||
expl = TextFormatting.GRAY.toString() + TextFormatting.ITALIC + StringUtil.localizeFormatted("info." + ActuallyAdditions.MODID + ".redstoneMode.invalidItem", StringUtil.localize(CommonConfig.Other.redstoneConfigureItem.getDescriptionId() + ".name"));
|
expl = TextFormatting.GRAY.toString() + TextFormatting.ITALIC + StringUtil.localizeFormatted("info." + ActuallyAdditions.MODID + ".redstoneMode.invalidItem", StringUtil.localize(CommonConfig.Other.redstoneConfigureItem.asItem().getDescriptionId()));
|
||||||
}
|
}
|
||||||
font.drawShadow(event.getMatrixStack(), expl, event.getWindow().getGuiScaledWidth() / 2f + 5, event.getWindow().getGuiScaledHeight() / 2f + 15, StringUtil.DECIMAL_COLOR_WHITE);
|
font.drawShadow(event.getMatrixStack(), expl, event.getWindow().getGuiScaledWidth() / 2f + 5, event.getWindow().getGuiScaledHeight() / 2f + 15, StringUtil.DECIMAL_COLOR_WHITE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import de.ellpeck.actuallyadditions.mod.inventory.ContainerBreaker;
|
import de.ellpeck.actuallyadditions.mod.inventory.ContainerBreaker;
|
||||||
import de.ellpeck.actuallyadditions.mod.tile.TileEntityBreaker;
|
import de.ellpeck.actuallyadditions.mod.tile.TileEntityBreaker;
|
||||||
import de.ellpeck.actuallyadditions.mod.util.AssetUtil;
|
import de.ellpeck.actuallyadditions.mod.util.AssetUtil;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.entity.player.PlayerInventory;
|
import net.minecraft.entity.player.PlayerInventory;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.text.ITextComponent;
|
import net.minecraft.util.text.ITextComponent;
|
||||||
|
@ -36,6 +37,13 @@ public class GuiBreaker extends AAScreen<ContainerBreaker> {
|
||||||
this.imageHeight = 93 + 86;
|
this.imageHeight = 93 + 86;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(Minecraft pMinecraft, int pWidth, int pHeight) {
|
||||||
|
super.init(pMinecraft, pWidth, pHeight);
|
||||||
|
titleLabelX = (int) (imageWidth / 2.0f - font.width(title) / 2.0f);
|
||||||
|
titleLabelY = -10;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void renderBg(@Nonnull MatrixStack matrices, float partialTicks, int x, int y) {
|
protected void renderBg(@Nonnull MatrixStack matrices, float partialTicks, int x, int y) {
|
||||||
RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
|
RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||||
|
|
|
@ -38,8 +38,10 @@ public class GuiDropper extends AAScreen<ContainerDropper> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderLabels(@Nonnull MatrixStack matrices, int x, int y) {
|
protected void init() {
|
||||||
AssetUtil.displayNameString(matrices, this.font, this.imageWidth, -10, this.dropper);
|
super.init();
|
||||||
|
titleLabelX = (int) (imageWidth / 2.0f - font.width(title) / 2.0f);
|
||||||
|
titleLabelY = -10;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.tile;
|
||||||
import de.ellpeck.actuallyadditions.mod.blocks.ActuallyBlocks;
|
import de.ellpeck.actuallyadditions.mod.blocks.ActuallyBlocks;
|
||||||
import de.ellpeck.actuallyadditions.mod.inventory.ContainerBreaker;
|
import de.ellpeck.actuallyadditions.mod.inventory.ContainerBreaker;
|
||||||
import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA.IAcceptor;
|
import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA.IAcceptor;
|
||||||
|
import de.ellpeck.actuallyadditions.mod.util.NetHandlerSpaghettiServer;
|
||||||
import de.ellpeck.actuallyadditions.mod.util.StackUtil;
|
import de.ellpeck.actuallyadditions.mod.util.StackUtil;
|
||||||
import de.ellpeck.actuallyadditions.mod.util.WorldUtil;
|
import de.ellpeck.actuallyadditions.mod.util.WorldUtil;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
@ -29,9 +30,13 @@ import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.text.ITextComponent;
|
import net.minecraft.util.text.ITextComponent;
|
||||||
import net.minecraft.util.text.StringTextComponent;
|
import net.minecraft.util.text.StringTextComponent;
|
||||||
|
import net.minecraft.util.text.TranslationTextComponent;
|
||||||
import net.minecraft.world.server.ServerWorld;
|
import net.minecraft.world.server.ServerWorld;
|
||||||
|
import net.minecraftforge.common.util.FakePlayer;
|
||||||
|
import net.minecraftforge.common.util.FakePlayerFactory;
|
||||||
import net.minecraftforge.fluids.IFluidBlock;
|
import net.minecraftforge.fluids.IFluidBlock;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -97,9 +102,11 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements INamed
|
||||||
|
|
||||||
if (!this.isPlacer && blockToBreak != Blocks.AIR && !(blockToBreak instanceof IFluidBlock) && stateToBreak.getDestroySpeed(this.level, breakCoords) >= 0.0F) {
|
if (!this.isPlacer && blockToBreak != Blocks.AIR && !(blockToBreak instanceof IFluidBlock) && stateToBreak.getDestroySpeed(this.level, breakCoords) >= 0.0F) {
|
||||||
List<ItemStack> drops = Block.getDrops(stateToBreak, (ServerWorld) this.level, breakCoords, this.level.getBlockEntity(breakCoords));
|
List<ItemStack> drops = Block.getDrops(stateToBreak, (ServerWorld) this.level, breakCoords, this.level.getBlockEntity(breakCoords));
|
||||||
float chance = WorldUtil.fireFakeHarvestEventsForDropChance(this, drops, this.level, breakCoords);
|
FakePlayer fake = FakePlayerFactory.getMinecraft((ServerWorld) this.level);
|
||||||
|
if (fake.connection == null) {
|
||||||
if (chance > 0 && this.level.random.nextFloat() <= chance) {
|
fake.connection = new NetHandlerSpaghettiServer(fake);
|
||||||
|
}
|
||||||
|
if (stateToBreak.canHarvestBlock(this.level, breakCoords, fake)) { //TODO might double check this is right mikey
|
||||||
if (StackUtil.canAddAll(this.inv, drops, false)) {
|
if (StackUtil.canAddAll(this.inv, drops, false)) {
|
||||||
this.level.destroyBlock(breakCoords, false);
|
this.level.destroyBlock(breakCoords, false);
|
||||||
StackUtil.addAll(this.inv, drops, false);
|
StackUtil.addAll(this.inv, drops, false);
|
||||||
|
@ -125,9 +132,10 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements INamed
|
||||||
this.doWork();
|
this.doWork();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public ITextComponent getDisplayName() {
|
public ITextComponent getDisplayName() {
|
||||||
return StringTextComponent.EMPTY;
|
return new TranslationTextComponent(isPlacer ? "container.actuallyadditions.placer" : "container.actuallyadditions.breaker");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|
|
@ -27,6 +27,7 @@ import net.minecraft.util.text.StringTextComponent;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase.NBTType;
|
import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase.NBTType;
|
||||||
|
import net.minecraft.util.text.TranslationTextComponent;
|
||||||
|
|
||||||
public class TileEntityDropper extends TileEntityInventoryBase implements INamedContainerProvider {
|
public class TileEntityDropper extends TileEntityInventoryBase implements INamedContainerProvider {
|
||||||
|
|
||||||
|
@ -106,7 +107,7 @@ public class TileEntityDropper extends TileEntityInventoryBase implements INamed
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ITextComponent getDisplayName() {
|
public ITextComponent getDisplayName() {
|
||||||
return StringTextComponent.EMPTY;
|
return new TranslationTextComponent("container.actuallyadditions.dropper");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|
|
@ -196,11 +196,12 @@ public final class WorldUtil {
|
||||||
if (fake.connection == null) {
|
if (fake.connection == null) {
|
||||||
fake.connection = new NetHandlerSpaghettiServer(fake);
|
fake.connection = new NetHandlerSpaghettiServer(fake);
|
||||||
}
|
}
|
||||||
ItemStack heldBefore = fake.getMainHandItem();
|
//ItemStack heldBefore = fake.getMainHandItem();
|
||||||
setHandItemWithoutAnnoyingSound(fake, Hand.MAIN_HAND, stack.copy());
|
setHandItemWithoutAnnoyingSound(fake, Hand.MAIN_HAND, stack.copy());
|
||||||
//fake.gameMode.useItemOn(fake, world, fake.getMainHandItem(), Hand.MAIN_HAND, offsetPos, side.getOpposite(), 0.5F, 0.5F, 0.5F); //TODO
|
BlockRayTraceResult ray = new BlockRayTraceResult(new Vector3d(0.5, 0.5, 0.5), side.getOpposite(), offsetPos, true);
|
||||||
|
fake.gameMode.useItemOn(fake, world, fake.getMainHandItem(), Hand.MAIN_HAND, ray);
|
||||||
ItemStack result = fake.getItemInHand(Hand.MAIN_HAND);
|
ItemStack result = fake.getItemInHand(Hand.MAIN_HAND);
|
||||||
setHandItemWithoutAnnoyingSound(fake, Hand.MAIN_HAND, heldBefore);
|
//setHandItemWithoutAnnoyingSound(fake, Hand.MAIN_HAND, heldBefore);
|
||||||
return result;
|
return result;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
ActuallyAdditions.LOGGER.error("Something that places Blocks at " + offsetPos.getX() + ", " + offsetPos.getY() + ", " + offsetPos.getZ() + " in World " + world.dimension() + " threw an Exception! Don't let that happen again!", e);
|
ActuallyAdditions.LOGGER.error("Something that places Blocks at " + offsetPos.getX() + ", " + offsetPos.getY() + ", " + offsetPos.getZ() + " in World " + world.dimension() + " threw an Exception! Don't let that happen again!", e);
|
||||||
|
|
Loading…
Reference in a new issue