我的世界观察者怎么用指令
装备:0 – 防御,Protection (头盔,装甲,鞋子,裤子)1 – 火焰防御,Fire Protection (头盔,装甲,鞋子,裤子)2 – 摔伤减半,Feather F……接下来具体说说我的世界指令大全
一、我的世界指令大全
今天来盘点我的世界常用指令(新手必备)/sethome #设置自己的家/home #回到自己设置的家/spawn #传送到出生点/back #回到上一次传送点(例如死后回尸体处)[private] #上锁/getpos #显示坐标/setwarp [warp点] #设置公共传送点/warp [warp点] #传送到指定传送点/kit tools #获取石制工具一套/mcstats #查看技能等级heal – 补指定的血health – 设置生命值 要确保开了作弊,指令才能运行
1. /setworldspawn 设定出生点
2 . /achievement give *就能瞬间获得所有的成就
3. /tp 使用方法:/tp x y z 作用:传送位置
4. /gamerule keepinventory true 死亡不掉落
5. /kill 不输入名字为自杀,输入其他人名字杀死其他人
6. /gamemode(0/1/2/3)设自己为生存/创造/冒险/观察者模式
7. /tp [ID] 将自己传送到某人旁
8. /tphere [ID] 某个玩家强制飞到你身边
9. /difficulty 作用:更改游戏难度(即使是在锁定的情况下)后面跟的:easy(和平模式),hard(简单模式),normal(困难模式),peaceful(极限模式)
10. /clear[ID] 作用:清空玩家背包
11. /effect
作用:给BUFF
后面跟的:玩家名–药水id–秒数–药水等级
药水id列表:
中毒 ID 【19】
速度 ID 【1】
虚弱 ID 【18】
饥饿 ID 【17】
失明 ID 【15】
夜视 ID【16】
隐身 ID 【14】
水下呼吸 ID 【13】
缓慢 ID 【2】
急迫 ID 【3】1
挖掘疲劳 ID【4】
力量 ID 【5】
瞬间治疗 ID 【6】
瞬间伤害 ID 【7】
跳跃提升 ID 【8】
反胃 ID【9】
生命恢复 ID 【10】
抗性提升 ID 【11】
凋零 ID 【20】
生命提升【21】
伤害吸收【22】
饱和【23】
12. /weather 作用:更改天气。后面跟的:clear(清除天气也就是晴天),rain(下雨),thunder(雷阵雨)
13. /getpos 显示坐标
14./give @p command_block获取命令方块
15./give @p minecraft:diamond_sword 1 0
{ench:[{id:19,lvl:1000}]} 获得1000级的击退剑
16./give @p minecraft:diamond_sword 1 0
{ench:[{id:xx,lvl:x}]}(前一个xx是附魔ID,后一个是附魔等级)
附魔ID:
装备:
0 – 保护
1 – 火焰保护
2 – 摔伤保护
3 – 爆炸保护
4 – 弹射物保护
5 – 水下呼吸
6 – 水下挖掘
7 – 伤害反射(荆棘)
剑:
16 – 锋利
17 – 亡灵杀手
18 – 节肢杀手
19 – 击退
20 – 火焰附加
21 – 抢夺
工具:
32 – 挖掘效率
33 – 精准采集
34 – 耐久
35 – 时运
61 – 钓鱼时运 这个只能附魔在鱼竿上
62 -诱饵 钓鱼竿上
弓箭:
48 – 力量
50 – 火矢
51 – 无限
耐久是可以附魔在任意工具/武器上面,其它的不互通。
17.
钻石剑附魔指令:
/give @p minecraft:diamond_sword 1 0 {ench:[{id:xx,lvl:x}]}
金剑附魔指令:
/give @p minecraft:golden_sword 1 0 {ench:[{id:xx,lvl:x}]}
铁剑附魔指令:
/give @p minecraft:iron_sword 1 0 {ench:[{id:xx,lvl:x}]}
石剑附魔指令:
/give @p minecraft:stone_sword 1 0 {ench:[{id:xx,lvl:x}]}
木剑附魔指令:
/give @p minecraft:wooden_sword 1 0 {ench:[{id:xx,lvl:x}]}
锹:
钻石锹附魔指令:
/give @p minecraft:diamond_shovel 1 0 {ench:[{id:xx,lvl:x}]}
金锹附魔指令:
/give @p minecraft:golden_shovel 1 0 {ench:[{id:xx,lvl:x}]}
铁锹附魔指令:
/give @p minecraft:iron_shovel 1 0 {ench:[{id:xx,lvl:x}]}
石锹附魔指令:
/give @p minecraft:stone_shovel 1 0 {ench:[{id:xx,lvl:x}]}
木锹附魔指令:
/give @p minecraft:wooden_shovel 1 0 {ench:[{id:xx,lvl:x}]}
稿:
钻石镐附魔指令:
/give @p minecraft:diamond_pickaxe 1 0 {ench:[{id:xx,lvl:x}]}
金镐附魔指令:
/give @p minecraft:golden_pickaxe 1 0 {ench:[{id:xx,lvl:x}]}
铁镐附魔指令:
/give @p minecraft:iron_pickaxe 1 0 {ench:[{id:xx,lvl:x}]}
石镐附魔指令:
/give @p minecraft:stone_pickaxe 1 0 {ench:[{id:xx,lvl:x}]}
木镐附魔指令:
/give @p minecraft:wooden_pickaxe 1 0 {ench:[{id:xx,lvl:x}]}
斧:
钻石斧附魔指令:
/give @p minecraft:diamond_axe 1 0 {ench:[{id:xx,lvl:x}]}
金斧附魔指令:
/give @p minecraft:golden_axe 1 0 {ench:[{id:xx,lvl:x}]}
铁斧附魔指令:
/give @p minecraft:iron_axe 1 0 {ench:[{id:xx,lvl:x}]}
石斧附魔指令:
/give @p minecraft:stone_axe 1 0 {ench:[{id:xx,lvl:x}]}
木斧附魔指令:
/give @p minecraft:wooden_axe 1 0 {ench:[{id:xx,lvl:x}]}
锄:
钻石锄附魔指令:
/give @p minecraft:diamond_hoe 1 0 {ench:[{id:xx,lvl:x}]}
金锄附魔指令:
/give @p minecraft:golden_hoe 1 0 {ench:[{id:xx,lvl:x}]}
铁锄附魔指令:
/give @p minecraft:iron_hoe 1 0 {ench:[{id:xx,lvl:x}]}
石锄附魔指令:
/give @p minecraft:stone_hoe 1 0 {ench:[{id:xx,lvl:x}]}
木锄附魔指令:
/give @p minecraft:wooden_hoe 1 0 {ench:[{id:xx,lvl:x}]}
弓:
附魔指令:
/give @p minecraft:bow 1 0 {ench:[{id:xx,lvl:x}]}
装备附魔
头盔/帽子:
钻石头盔附魔指令:
/give @p minecraft:diamond_helmet 1 0 {ench:[{id:xx,lvl:x}]}
金头盔附魔指令:
/give @p minecraft:golden_helmet 1 0 {ench:[{id:xx,lvl:x}]}
铁头盔附魔指令:
/give @p minecraft:iron_helmet 1 0 {ench:[{id:xx,lvl:x}]}
锁链头盔附魔指令:
/give @p minecraft:chainmail_helmet 1 0 {ench:[{id:xx,lvl:x}]}
皮革帽子附魔指令:
/give @p minecraft:leather_helmet 1 0 {ench:[{id:xx,lvl:x}]}
胸甲/外套:
钻石胸甲附魔指令:
/give @p minecraft:diamond_chestplate 1 0 {ench:[{id:xx,lvl:x}]}
金胸甲附魔指令:
/give @p minecraft:golden_chestplate 1 0 {ench:[{id:xx,lvl:x}]}
铁胸甲附魔指令:
/give @p minecraft:iron_chestplate 1 0 {ench:[{id:xx,lvl:x}]}
锁链胸甲附魔指令:
/give @p minecraft:chainmail_chestplate 1 0 {ench:[{id:xx,lvl:x}]}
皮革外套附魔指令:
/give @p minecraft:leather_chestplate 1 0 {ench:[{id:xx,lvl:x}]}
护腿/裤子:
钻石护腿附魔指令:
/give @p minecraft:diamond_leggings 1 0 {ench:[{id:xx,lvl:x}]}
金护腿附魔指令:
/give @p minecraft:golden_leggings 1 0 {ench:[{id:xx,lvl:x}]}
铁护腿附魔指令:
/give @p minecraft:ir
今天来盘点我的世界常用指令(新手必备)
/sethome #设置自己的家
/home #回到自己设置的家
/spawn #传送到出生点
/back #回到上一次传送点(例如死后回尸体处)
[private] #上锁
/getpos #显示坐标
/setwarp [warp点] #设置公共传送点
/warp [warp点] #传送到指定传送点
/kit tools #获取石制工具一套
/mcstats #查看技能等级
heal – 补指定的血
二、我的世界最全指令
我的世界游戏中的指令输入需要通过聊天栏输入,按(T)或(/)可以打开聊天栏,输入命令时在所有的命令前方需要添加(/)才能使命令执行,不输入(/)命令不生效。同时(TAB)可以快速选择当前可用命令或者参数。
本文所有 加粗 字体全部都是主命令,正常字体则是子命令,大家了解一下。本文涵盖的命令较多,大家可以用组合键【CTRL】+【F】呼出查找栏进行有效的查询。
alwaysday: 锁定和解锁昼夜更替。
true开启,false关闭。
antioch :准心处放置TNT。
backup :备份服务器。
baltop :查看财富**。
ban :封禁。
banip :封禁ip地址。
butcher :杀死附近的全部怪物
burn :给玩家着火。
camerashake :以指定的强度和持续时间对玩家摄像机应用摇晃效果。
add添加,stop停止。
clear :清除玩家物品栏中的物品。
clearspawnpoint :移除玩家的生成点。
clone :将一个地区的方块克隆到另一个地区。
~后面跟区域坐标。
compass :显示目前的方位
daylock :锁定和解锁昼夜更替。
true开启,false关闭。
deop :撤销一名玩家的操作员状态。
delhome :删除家。
deljail :立即把玩家从监狱中释放。
depth :显示目前高度。
difficulty :设置难度等级。
easy简单,hard困难,normal普通,peaceful和平。
effect :添加或删除状态效果。
enableedunpc :是否允许在地图内生成NPC。
true开启 , false关闭。
enchant :对玩家选定的物品增加一项附魔。
essentials :显示插件版本
reload重读,debug测试。
etworth : 设定物品价格
event :触发指定对象的事件。
entity实体。
execute :代表一个或多个实体执行命令。
ext :给玩家灭火。
heal :回复玩家的生命。
fill :用特定方块填充全部或部分地区。
~范围坐标。
fireball :OP口吐地狱火
fly :飞行
fog :添加或移除迷雾设置文件。
forestgen :在自己身旁形成森林。
function :运行在相应的功能文件中找到的命令。
itemdb :查询手中物品的名称
gc :查看服务器信息
gamemode :设置一名玩家的游戏模式。
adventure冒险,creative创造,default默认,survival生存,spectator旁观。
gamerule :设置或查询游戏规则价值。
announceadvancements 聊天栏显示成就
commandblockoutput 命令执行时在聊天框中的文本提示
commandblocksenabled命令方块启用
disableraids 袭击
dodaylightcycle时间流动
doentitydrops非实体掉落
dofiretick 火的蔓延和熄灭
doimmediaterespawn 死亡动画
dolimitedcrafting合成配置解锁
doinsomnia幻翼生成
domobloot 生物掉落物
domobspawning 生物自然生成
dotraderspawning流浪商人生成
dotiledrops 方块被坏时掉落物品
doweathercycle 日夜交替生成
dopatrolspawning灾厄巡逻队
doweathercycle天气变化
drowningdamage 窒息伤害
falldamage 跌落伤害
firedamage 着火伤害
forgivedeadplayers玩家死后,被玩家攻击的中立生物恢复中立状态
freezedamage冰冻伤害
functioncommandlimit 函数执行指令的最大值
keepinventory 死亡不掉落
logadmincommands记录服务器OP指令
maxcommandchainlength 命连锁命令方块能执行的最大值
maxentitycramming一格内的实体伤害
mobgriefing 怪物对方块的破坏
naturalregeneration 自然恢复生命
playerssleepingpercentage百分之多少的玩家睡觉可以跳过夜晚
pvp 玩家PK
randomtickspeed 控制随机方块更改速度
reduceddebugInfo屏幕简化
sendcommandfeedback 命令输入显示在聊天框
showcoordinates 当前坐标指令
showdeathmessages 玩家和宠物死亡信息显示聊天框
showtags 展示标签
spawnradius 没有重生点的玩家重生时距离世界重生点的距离
spectatorsgeneratechunks 观察者生成区块
tntexplodes玩家或生物会受到伤害但不破坏方块
universalanger被激怒的中立生物攻击除了攻击它的以外的玩家
以上子命令后面全都可以:true开启,false关闭。
getpos :显示目前坐标。
give :将物品给子一名玩家 。
help :提供帮助/命令列表。
helpop :给OP留言。
invsee :查看玩家的背包。
jump :瞬移到准心所指地方
kick :从服务器踢出一名玩家。
kill :击败实体(玩家,生物等)。
killall :杀死附近的全部生物,不包括玩家
killall_mobs:杀光生物。
list :列出服务器上的玩家。
locate :显示距离最近的给定类型的建筑位置。
bastionremnant堡垒遗迹
buriedtreasure宝藏
desertpyramid沙漠神殿
endcity 末地城
fortress下界要塞
igloo雪屋
junglepyramid丛林神庙(java)
mansion丛林府邸
mineshaft废弃矿井
monument海底遗迹
oceanruin海底废墟(java)
pillageroutpost掠夺者前哨站
ruinedportal废弃传送门
ruins 海底废墟(基岩版)
shipwreck沉船
stronghold要塞
swamphut女巫小屋
temple丛林神庙(基岩版)
village村庄
mail :邮件
read读取,clear去除,send发送。
me :显示一条关于您自己的信息。
mobevent :会控制允许哪些生物事件运行。
·events_enabled生物事件。
·minecraft:ender_dragon_event生物事件末影龙。
·minecraft:pillager_patrols_event生物事件掠夺者。
·minecraft:wandering_trader_event生物事件流浪商人。
以上子命令后面全部可以:true开启,false关闭。
money :钱
give给予。
msg :私聊 。
mute :禁言。
music :允许您控制正在播放的音乐曲目。
play播放,queue排队,stop停止,volume音效。
near :查看附近的玩家
nsg :向一名或多名玩家发送私密消息。
nick :更换昵称。
nuke :TNT从玩家头顶落下。
op: 授予一名玩家管理员状态。
particle :制作一个粒子发射器。
playanimation :使一个或多个实体播放一次性动画,假设所有变量都设置正确。
playsound :播放声音。
powertooltoggle :清除所有的powertoll(绑定的物品)。
pumpkins :在自己身旁形成南瓜林。
reply :回复最后一个玩家的私聊。
resadmin :管理员圈地。
rules :查看服务器规则。
say :在聊天框中向其他玩家发送信息。
schedule :当加载一个区域或在一定时间后,安排一个执行的动作。
on_area_loaded在已加载的区域上。
add添加。
~范围坐标。
circle圈出一个范围。
tickingarea 添加,删除或列出常加载区域。
注意 该命令的顺序。2,3为常量,4,5,6为变量。
scoreboard :跟踪并显示各种目标的分数。
object对象
add添加,list列表,remove去除,setdisplay设置显示。
players玩家
add添加,list列表,operation行动,random随机的,remove去除,reset重置,set设置,test测试。
注意 该命令的顺序。2,4为常量,3,5为变量
seen :查看玩家最后一次下线前所在的坐标。
setblock :将一个方块更改为另一种方块。
setmaxplayers :设置此游戏会话的最大玩家数量。
etjail :监狱。
setspawn :重生点设置在脚下。
setworldspawn :设置世界的生成。
shock :雷击。
snow :在自己的身旁形成雪地。
socialspy :可以看到所有玩家的私聊。
spawnpoint :设置玩家的生成点。
spreadplayers :将实体传送到随机位置。
stopsound :停止播放声音。
structure :在世界中保存或加载一个结构。
load载入,save除了
sudo :强制执行命令。
suicide :自杀
summon :召唤一个实体。
该命令可以直接带以下子命令或者子命令前面输入( minecraft: )效果一样
armor_stand盔甲架
arrow箭
bat蝙蝠
bee蜜蜂
blaze烈焰人
boat船
cat猫
cave_spider洞穴蜘蛛
chest_minecart运输矿车
chicken鸡
cod鳕鱼
command_block_minecart命令方块矿车
cow牛
creeper苦力怕
dolphin海豚
donkey驴
drowned溺尸
egg鸡蛋
elder_guardian远古守卫者
elder_guardian_ ghost远古守卫者的灵魂
ender_crystal末影水晶
ender_dragon末影龙
ender_pearl末影珍珠
enderman末影人
endermite末影螨
evocation_fang唤魔者尖牙
evocation_illager唤魔者
experience_bottle附魔瓶
experience_orb经验球
eye_of_ender末影之眼
falling_block掉落中的方块
fireball恶魂火球
fireworks_rocket烟花火箭
furnace_minecart动力矿车
fox狐狸
ghast恶魂
giant巨人
guardian守卫者
hopper_minecart漏斗矿车
horse马
husk尸壳
illusioner幻术师
iron_golem铁傀儡
item物品
item_frame物品展示框
leash_knot拴绳
llama羊驼
llama_spit羊驼的口水
magma_cube岩浆怪
minecart矿车
mooshroom哞菇
mule骡子
ocelot豹猫
painting画
panda熊猫
parrot鹦鹉
phantom幻翼
pig猪
pillager掠夺者
polar_bear北极熊
potion投掷药水
pufferfish河豚
rabbit兔子
ravager劫掠兽
salmon鲑鱼
sheep羊
shulker潜影贝
shulker_bullet潜影贝导弹
silverfish蠹虫
skeleton骷髅
skeleton_horse骷髅马
slime史莱姆
small_fireball火焰弹
snow_golem雪傀儡
snowball雪球
spawner_minecart刷怪箱矿车
spectral_arrow光灵箭
spider蜘蛛
squid鱿鱼
stray流浪者
tnt炸药
tnt_minecartTNT矿车
trident三叉戟
tropical_fish热带鱼
turtle海龟
vex恼鬼
villager村民
vindicator卫道士
witch女巫
wither凋灵
wither_skeleton凋灵骷髅
wither_skull凋灵头
wolf狼
zombie僵尸
zombie_horse僵尸马
zombie_pigman僵尸猪人
zombie_villager僵尸村民
tag :管理存储在实体中的标签。
teleport :传送实体(玩家、生物等)。
tempban :封禁。
id玩家,ip地址,time时间。
tell :向一名或多名玩家发送私信消息。
tellraw :向其他玩家发送JSON消息。
testfor :计数与指定条件相匹配的实体(玩家、生物,物品等)。
testforblock :测试某个方块是否位于特定位置。
testforblocks :测试两个地区的方块是否匹配。
thaw :融化。
tickingarea :添加,删除或列出常加载区域。
add添加,list列表,remove去除,remove_all全部删除。
time :更改或查询世界的游戏时间。
add添加,query查询,set设置。
title :控制屏幕标题。
titleraw :使用JSON消息控制屏幕标题。
tjail :把玩家送入监狱。
toggledownfall :切换天气。
tp :传送实体(玩家、生物等)。
tphere :邀请传送。
tpall :范围传送。
tppos :传送到指定坐标。
xyz坐标
tree :树。
big大树,birch衫树,random随机。
unban :解封。
unbanip :解封IP。
unjail :一定时间后把玩家从监狱释放。
unlimited :无限物品。
list查看,item一条,clear清除。
up :上升。
v :隐身
vanish : 隐身
w :向一名或多名玩家发送私密消息。
whois :查看信息
nickname名字,id身份,akf信息。
whitelist :白名单
add添加,remove去除
weather :设置天气。
clear晴朗,query查询,rain下雨,thunder雷雨。
worth :查看物品价格
world :切换世界
normal主世界,Infernal地狱,end末地。
xp :添加或删除玩家的经验值。
三、我的世界所有指令
装备:
0 – 防御,Protection (头盔,装甲,鞋子,裤子)
1 – 火焰防御,Fire Protection (头盔,装甲,鞋子,裤子)
2 – 摔伤减半,Feather Falling (鞋子)
3 – 爆炸防御,Blast Protection (头盔,装甲,鞋子,裤子)
4 – 远程攻击防御,Projectile Protection (头盔,装甲,鞋子,裤子)
5 – 水下呼吸,Respiration (头盔)
6 – 水下挖掘,Aqua Affinity (头盔)
7 – 伤害反射,Thorns (头盔,装甲,鞋子,裤子)
8 – 水行加速, Depth Strider(鞋子)
武器 (剑):
16 – 锋利,Sharpness (剑)
17 – 亡灵杀手,Smite (剑)
18 – 节肢杀手,Bane Of Arthropods (剑)
19 – 击退,Knock Back (剑)
20 – 火元素,Fire Aspect (剑)
21 – 掉落品加倍,Looting (剑)
工具:
32 – 挖掘效率,Efficiency (稿子,斧子,铲子)
33 – 精准采集,Silk Touch (稿子,斧子,铲子)
34 – 不毁,Unbreaking (稿子,斧子,铲子,武器,装备)
35 – 幸运挖掘,Fortune (稿子,斧子,铲子)
61 – 钓鱼幸运,Luck of the sea (钓鱼竿)
62 -诱饵,Lure (钓鱼竿)
武器 (弓箭):
48 – 力量,Power (弓箭)
49 – 弓箭击退,Punch (弓箭)
50 – 火元素,Flame (弓箭)
51 – 无限弓箭,Infinity (弓箭)
扩展资料
Minecraft着重于让玩家去探索、交互,并且改变一个由一立方米大小的方块动态生成的地图。
除了方块以外,环境功能还包括植物、生物与物品。游戏里的一些活动包括采集矿石、与敌对生物战斗、合成新的方块与收集各种在游戏中找到的资源的工具。
游戏中的无限制模式让玩家在各种多人游戏服务器或他们的单人模式中进行创造建筑物、作品与艺术创作。
其他功能包括逻辑运算与远程动作的红石电路、矿车及轨道,,以及称之为”下界”的神秘世界。最终,可以选择前往一个叫做“末路之地”的维度旅行,并打倒末影龙。
/gamemode 1创造 0生存 2冒险 3观察者/give 你的名字 310 1 0 {ench:[{id:10,lvl:999999},{id:1,lvl:999999},{id:18,lvl:999999},{id:3,lvl:999999},{id:4,lvl:999999},{id:5,lvl:999999},{id:6,lvl:999999},{id:7,lvl:999999},{id:34,lvl:999999}]}/give 你的名字 311 1 0 {ench:[{id:10,lvl:999999},{id:1,lvl:999999},{id:18,lvl:999999},{id:3,lvl:999999},{id:4,lvl:999999},{id:5,lvl:999999},{id:6,lvl:999999},{id:7,lvl:999999},{id:34,lvl:999999}]}/give 你的名字名字 312 1 0 {ench:[{id:10,lvl:999999},{id:1,lvl:999999},{id:18,lvl:999999},{id:3,lvl:999999},{id:4,lvl:999999},{id:5,lvl:999999},{id:6,lvl:999999},{id:7,lvl:999999},{id:34,lvl:999999}]}/give 你的名字 313 1 0 {ench:[{id:10,lvl:999999},{id:1,lvl:999999},{id:18,lvl:999999},{id:3,lvl:999999},{id:4,lvl:999999},{id:5,lvl:999999},{id:6,lvl:999999},{id:7,lvl:999999},{id:34,lvl:999999}]}/give 你的名字 137 1 获得命令方块/gamerule keepInventory true 死亡不掉落/gamerule mobGriefing False 防爆/spawnpoint @a重设出生点注:这些指令只适用于1.7以及以前的命令方块中,1.8以后请把一些物品的数字id改成字母id如:钻石帽子:将/give xxx 310 1 这是1.7.10,/give xxx DIAMOND_HELMET 1 这是1.8以及以后,具体id请看:minecraft.yxzoo/140868
四、来自《我的世界》的4个细思极恐的“悖论”,绿色mc的不科学
这是一个细思极恐的关于Minecraft的“悖论”讨论!
古有“以子之矛,攻子之盾”的无解悖论,也有“先有鸡还是先有蛋 ”的哲学悖论,那么《我的世界》有没有这样充满挑战性的“悖论”存在呢?
一、说谎者“悖论”
一位来自古希腊克里特岛人的一句话:“克里特岛人说的话,没有一句是真的”。诡异的悖论来了:他自己就是这个岛上的人。如果他的说是假的,则岛上的人都是真话,那么他这句话又是真的!所以又证明他说的话应该是假的。这就是一个无限循环无解的悖论。
关于风的悖论; (论点来自玩家“白力怕”)经过认真研究,我发现了一个悖论,当开启动态效果时,草丛和树叶都在晃动,证明有风,再放一个篝火,烟雾垂直而上,证明没风,所以《我的世界》同时有风又没风。
同理,Minecraft游戏中的云只会在观察者高度的基础上100-150层向西漂浮,所以证明MC总是拥有向东的风,但即使烟雾飘到了127层云层的位置,它依然是垂直向上。
那么《我的世界》“风”究竟哪去了?
二、外祖母悖论
这个一个经典的哲学假想悖论,即,若你穿越到以前杀了你的年轻时候的外祖母,那就不会有你的妈妈,也不会有你。细思极恐的地方来了:你已经不存在了,那么穿越到过去的人究竟是谁呢?
21亿年后的MC会怎样? 《我的世界》使用指令/time可以设置时间,但是用NBT编辑器可设置的最大时间值为9223372036854775807。一旦超过这个数值,MC的时间将会走向尽头并静止。换算成现实时间大约为21亿年!
所以问题来了,21亿年后,当MC的时间静止之后,理论上昼夜更替消失,怪物将成为有限数量,当方块被撸尽,终有一天它们也会被杀光。那么史蒂夫是从何而来的?又如何生存?无限的在虚空中循环与死亡么?
三、空间“悖论”
埃舍尔是一位著名的荷兰画家,你可能没听过他的名字,但你一定见过他的“悖论”作品——不可能的瀑布。即在同一平面下,你可以从上游平坦的走到下游。在《我的世界》用坐标来表示,也就是说:Y(上游)=Y(下游),也就不存在所谓的垂直的水柱。然而,这种悖论却真的出现在了Minecraft。理论上这种悖论最普遍的意义还是在于光影和绘画的艺术。
然而,却真的有人尝试在Minecraft游戏中,建造传说中不可能存在的充满悖论的“彭伦斯三角”。
四、末影箱的空间“悖论”
末影箱悖论:论点来自Sancam。假设玩家A将一个金块放入末影箱,此时末影箱重量为M;同时玩家B将两个金块放入同一个末影箱,按照MC的特性,我们都知道,《我的世界》箱子的重量不会发生任何变化,同样是M。
所以我们得出一个结论,M(金块)=M(金块*2)=0kg。也就是说,只有在“金块”是没有重量的前提下,这个等式才会成立。
然而,当玩家扔出一个0kg的金块,它会落地,一个0kg的物品会受到重力影响么?并且,一个自由落体的金块,甚至可以激活一块压力板。这一切足矣证明,金块有重量,并且并非为0kg。
五、听说你还不会写观察者模式?
作者 | 静幽水
责编 | Elle
问题背景
话说程序员小强成功进入一家公司,并且老板也信守承诺给他分配了一个女朋友小美,老板这样做除了能让小强每天安心写代码之外,还有另外两个意图,靠前就是小美是安插在小强身边的眼线,负责监督小强的工作,第二个也是最重要的目的是通过小美可以把公司重要 的通知 传递给小强。如下是过程示意图
以前我们是怎么用程序演示上面过程呢?(这里还没有使用观察者模式)为了简单,我不使用接口,直接使用老板,程序员,小美和 客户端 四个类。
老板类如下:
public class Boss {//用来定义今晚是否加班private boolean isnotifyProgrammer = false;public boolean getIsIsnotifyProgrammer {return isnotifyProgrammer;}//通知所有程序员加班public void notifyProgrammer {System.out.println("所有程序员今晚加班");this.isnotifyProgrammer = true;}}
程序员类:
public class Programmer {private String name;//省去构造函数和set/get//接到加班通知,然后加班public void work_overtime {System.out.println(name+"要加班");}}
小美类,使用线程进行监控老板类,查看老板是否发出加班通知,如果发出就通知所有程序员加班
public class GrilFriend extends Thread{private Boss boss ;private Programmer programmer;public GrilFriend( Boss _ boss ,Programmer _programmer){this. boss = _ boss ;this.programmer = _programmer;}@Overridepublic void run{while (true){if(this. boss .getIsIsnotifyProgrammer){this.programmer.work_overtime;}}}}
继承Thread类,重写run方法,然后start就可以启动一个线程了。
客户端
package Observer;public class Client {public static void main(String[] args) throws InterruptedException { Boss boss = new Boss ;Programmer programmer = new Programmer("小强");GrilFriend grilFriend = new GrilFriend( boss ,programmer);grilFriend.start; boss .notifyProgrammer;Thread.sleep(1000);}}
将老板和程序员小强的实例传进小美类中,然后开启线程进行监听老板是否发出通知,只要这时老板发出通知,程序员就可以接收到并执行加班的命令。输出如下:
小强要加班小强要加班.....
有何问题
上面这个程序,小美使用死循环来监听,导致CPU飙升,严重浪费了公司的资源,公司面临亏损,老板决定裁员来开源节流,就这样处在程序员和老板直接的小美就被裁掉了,没了小美之后,程序员就要上班时去老板办公室签到,下班时再去询问今晚是否加班。久而久之,程序员心生怨念,老板每天被问来问去也很烦,于是他们想到了一种新的解决方案。
解决方法
于是老板买来几个小喇叭,放在程序员的办公室里,而按钮放在老板的办公室里,如果有新 的通知 ,就按喇叭,程序员们听到之后就前往老板的办公室领取具体 的通知 内容,这样就不需要程序员每天去老板办公室询问是否有新 的通知 了,而且还节约了成本,所谓一举两得。
怎么用代码实现上面的过程呢
首先定义一个老板的接口类,里面主要是公共方法如添加程序员对象和删除程序员对象以及通知所有程序员的方法。以后还有其他的小老板,都继承自这个接口:
import java.util.ArrayList;import java.util.List;public class Boss {//定义一个列表,用来保存程序员对象private List<Programmer> programmers = new ArrayList<Programmer>;//添加一个程序员到列表中public void attach(Programmer programmer){programmers.add(programmer);}//从列表中删除某个程序员对象public void detach(Programmer programmer){programmers.remove(programmer);}//通知所有程序员加班public void notifyProgrammer(boolean isWorkOvertime) {//遍历程序员列表for(Programmer programmer:programmers)programmer.work_overtime(isWorkOvertime);}}
当前老板的类,当前老板设置一个状态,就是今晚程序员是否需要加班,当这个状态发生改变时,就调用上面的notifyProgrammer方法通知所有程序员:
//具体的老板-李老板public class Li_Boss extends Boss {//是否加班 的通知 private boolean isWorkOvertime;public boolean getIsWorkOvertime{return isWorkOvertime;}//当加班状态发生变化时,要通知程序员最新的加班状态public void setIsWorkOvertime(boolean isWorkOvertime){this.isWorkOvertime = isWorkOvertime;this.notifyProgrammer(isWorkOvertime);}}
程序员的接口,只有一个方法,被通知的是否加班方法:
public interface IProgrammer {//被通知的方法public void work_overtime(boolean isWorkOvertime);}
具体的程序员类,实现上面加班的方法,执行加班行为:
public class Programmer implements IProgrammer{private String name;public Programmer(String name) {this.name = name;}public String getName {return name;}public void setName(String name) {this.name = name;}//自己的加班状态private boolean WorkOvertimeState;//接到加班通知,然后更新自己的加班状态public void work_overtime(boolean isWorkOvertime) {WorkOvertimeState = isWorkOvertime;System.out.println(name+"是否要加班:"+WorkOvertimeState);}}
客户端 ,使用上面的类,先创建一个老板对象和两个程序员对象,并把两个程序员对象添加到老板对象中的程序员列表中(相当于上班前来打卡,老板知道今天有哪些程序员来上班了),然后老板发布今晚加班 的通知 ,所有程序员就会自动接收到通知,并执行加班的行为:
public class Client {public static void main(String[] args) throws InterruptedException {Li_Boss boss = new Li_Boss;Programmer programmer1 = new Programmer("小强");Programmer programmer2 = new Programmer("小华");//将上面两个程序员添加到老板类里的程序员列表中 boss .attach(programmer1); boss .attach(programmer2);//老板发布通知,今晚加班 boss .setIsWorkOvertime(true);}}
打印结果如下:
小强是否要加班:true小华是否要加班:true
模式讲解
以上的实现方式就是通过观察者模式实现的,观察者模式定义:
定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
上面老板和程序员的关系就是典型的 一对多关系,并且程序员是否加班的状态也是由老板决定的,程序员会根据老板 的通知 执行相对应的行为,而老板不需要知道具体有哪些程序员,只需要维护一个程序员的列表就可以了,通知时遍历这个列表。
老板相当于被观察者,也被称为目标:Subject,程序员是观察者,也就是Observer,一个目标可以有任意多个观察者对象,一旦目标的状态发生变化,所有注册的观察者都会得到通知,然后各个观察者会对通知做出相应的反应。
但是需要注意,观察者始终是处于一种被动的地位,也就是注册和删除都是由目标来决定的,观察者没有权限决定是否观察哪个目标。这叫做单向依赖,观察者依赖于目标,目标是不会依赖于观察者的。这一点也很好了解,就像是程序员没有权限决定听不听老板 的通知 一样,老板通知所有程序员加班,你不能决定你能不能接收到通知吧。
观察者也可以观察多个目标,但是应该为不同的观察者目标定义不同的回调函数用来区分,也就是每个通知对应一个响应函数。这一点也很容易理解,一家公司会有老板,还会有部门经理,主管等职位,程序员都要听他们的。
观察者模型结构示意图:
-
Subject目标对象,相当于上面的 Boss 类
-
Observer:观察者接口,提供目标通知时对应的更新方法,可以在这个方法中回调目标对象,以获取目标对象的数据,相当于上面的IProgrammer接口
-
ConcreteSubject:具体的目标实现类,相当于上面的Li_ boss
-
ConcreteObserver:具体的观察者对象,用来接收通知并做出响应,相当于上面的Programmer类。
新的问题
公司这样执行了一段时间,新的问题又出现了,因为老板并不只是通知加班这么简单,还会通知其他的事情,可能每个程序员想得到 的通知 不一样,比如小强去出差,小华去休假。这个时候该怎么通知他们呢。
这就涉及观察者的两种模型,拉模型和推模型。上面的代码就是推模型实现的。
-
推模型:目标对象主动向观察者推送目标的详细信息,不管观察者是否需要,推送的信息通常是目标对象的全部或部分数据。如上面就是推送的是否加班的状态。
-
拉模型“目标对象在通知观察者的时候,只会传递少量信息,如果不知道观察者具体需要什么数据,就把目标对象自身传递给观察者,让观察者自己按需去取信息。
为了方便对比,接下来用拉模型实现通知加班的代码,首先看一下 Boss 类,只需要更改通知的方法:
import java.util.ArrayList;import java.util.List;public class Boss {//定义一个列表,用来保存程序员对象private List<Programmer> programmers = new ArrayList<Programmer>;//添加一个程序员到列表中public void attach(Programmer programmer){programmers.add(programmer);}//从列表中删除某个程序员对象public void detach(Programmer programmer){programmers.remove(programmer);}//通知所有程序员加班public void notifyProgrammer {//遍历程序员列表for(Programmer programmer:programmers)programmer.work_overtime(this);}}
notifyProgrammer方法去掉参数,调用 programmer.work_overtime时将自身this传递进去。具体的老板类Li_Boss只需要实现这个方法就可以了。
IProgrammer接口中被通知的方法接收参数 boss 对象:
public interface IProgrammer {//被通知的方法public void work_overtime( Boss boss );}
具体的programmer实现类,也只需要该接收通知的方法:
public class Programmer implements IProgrammer{......//自己的加班状态private boolean WorkOvertimeState;//接到加班通知,然后更新自己的加班状态public void work_overtime( Boss boss ) {WorkOvertimeState = ((Li_Boss) boss ).getIsWorkOvertime;System.out.println(name+"是否要加班:"+WorkOvertimeState);}}
客户端 不需要更改,输出结果和上面一样,没有问题。当有多个具体的观察者(程序员)类时,不同的类需要不同的信息,在目标类中定义多种状态,当具体的观察者接到通知后通过目标对象实例按需去状态就可以了。
推拉模型的比较:
-
推模型是假定目标对象知道观察者需要什么数据,相当于精准推送。拉模型目标对象不知道观察者需要什么数据,把自身对象给观察者,让观察者自己去取。
-
推模型使观察者模型难以复用,拉模型可以复用。
相关扩展
其实在java中已经有了观察者模式的实现,不需要自己从头写。在java.util包里面有一个类Observable,它实现了大部分我们需要的目标功能。接口Observer中定义了update方法。相比于上面自己的实现区别如下:
-
不需要定义观察者和目标的接口,JDK已经定义好了
-
在目标实现类中不需要维护观察者的注册信息,这个Observable类中帮忙实现好了。
-
触发方式需要先调用setChanged方法
-
具体的观察者实现中,update方法同时支持推模型和拉模型。
使用java中的Observable实现上面的程序:
目标对象 :
import java.util.Observable;//具体的老板-李老板public class Li_Boss extends Observable {//是否加班 的通知 private String isWorkOvertime;public String getIsWorkOvertime{return isWorkOvertime;}//当加班状态发生变化时,要通知程序员来领取新通知public void setIsWorkOvertime(String isWorkOvertime){this.isWorkOvertime = isWorkOvertime;//使用java中的Observable,这句话是必须的。this.setChanged;//拉模式this.notifyObservers;//推模式//this.notifyObservers(isWorkOvertime);}}
观察者对象:
package Observer;import java.util.Observable;import java.util.Observer;public class Programmer implements Observer {private String name;//构造函数和set方法省略//自己的加班状态private String WorkOvertimeState;//接到加班通知,然后更新自己的加班状态@Overridepublic void update(Observable observable, Object o) {//拉模式对应的更新方法WorkOvertimeState = ((Li_Boss)observable).getIsWorkOvertime;System.out.println(name+WorkOvertimeState);//推模式对应的更新方法// WorkOvertimeState = o.toString ;// System.out.println(name+WorkOvertimeState);}}
客户端 :
public class Client {public static void main(String[] args){Li_Boss boss = new Li_Boss;Programmer programmer1 = new Programmer("小强");Programmer programmer2 = new Programmer("小华");//将上面两个程序员添加到老板类里的程序员列表中 boss .addObserver(programmer1); boss .addObserver(programmer2); boss .setIsWorkOvertime("今晚加班");}}
输出结果:
小华今晚加班小强今晚加班
这样看观察者模式是不是非常简单了。
观察者模式的优点:
-
实现观察者和目标之间的抽象耦合:只是在抽象层面耦合了。
-
观察者模式实现了动态联动:一个操作会引起其他相关操作。
-
观察者支持广播通信:需要注意避免死循环。
观察者模式的缺点:
-
广播通信会引起不必要的操作。
何时使用观察者模式:
-
当一个抽象模型有两个方面,一个方面的操作依赖于另一个方面的状态变化时。
-
更改一个对象时,需要同时联动更改其他对象,但却不知道应该有多少对象需要被改变时。
-
当一个对象必须通知其他对象,但是又希望他们之间是松散耦合的。
模式变形
不久老板又陷入了苦恼,因为上面这种方式每次都会同时通知小华和小强,但是老板想只通知小强而不通知小华,想要区别对待观察者,例如当有用户反应公司的软件产品出现bug时,需要小华和小强去找bug并修复。但当出现不是特别紧急的bug时只需要小华一个人修改就可以了,如果出现了紧急的bug,需要马上修复的,就需要小华和小强同时去修复。该如何使用观察者实现上面的场景呢?
因为经过上面的学习,对于观察者已经了解了,代码不做太多的解释。
在这里可以把Bug当做目标,小强和小华都是观察者,首先定义观察者接口:
//观察者接口public interface BugObserver {//传入被观察的目标对象public void update(BugSubject subject);//观察人员职务public void setName(String name);public String getName;}
目标对象抽象接口:
import java.util.ArrayList;import java.util.List;//目标对象public abstract class BugSubject {//保存注册的观察者protected List<BugObserver> observers = new ArrayList<BugObserver>;public void attach(BugObserver observer){observers.add(observer);}public void detach(BugObserver observer){observers.remove(observer);}//通知具体的观察者程序员public abstract void notifyProgrammer;//获取当前bug级别public abstract int getBugLevel;}
具体的观察者实现
//具体的观察者实现public class Programmer implements BugObserver{private String name;@Overridepublic void setName(String name) {this.name = name;}@Overridepublic String getName {return this.name;}@Overridepublic void update(BugSubject subject) {System.out.println(name+"获取到通知,当前bug级别为"+subject.getBugLevel);}}
具体的目标实现:
//具体的Bug对象public class Bug extends BugSubject {private int bugLevel = 0;public int getBugLevel{return bugLevel;}public void setBugLevel(int bugLevel){this.bugLevel = bugLevel;this.notifyProgrammer;}public void notifyProgrammer{for(BugObserver programmer:observers){if(this.bugLevel>=1){if("小华".equals(programmer.getName)){programmer.update(this);}}if(this.bugLevel>=2){if("小强".equals(programmer.getName)){programmer.update(this);}}}}}
客户端 测试一下:
public class Client {public static void main(String[] args){//创建目标对象Bug bug = new Bug;//创建观察者BugObserver bugObserver1 = new Programmer;bugObserver1.setName("小华");BugObserver bugObserver2 = new Programmer;bugObserver2.setName("小强");//注册观察者bug.attach(bugObserver1);bug.attach(bugObserver2);bug.setBugLevel(1);System.out.println("---------------------");bug.setBugLevel(2);}}
输出结果如下:
小华获取到通知,当前bug级别为1---------------------小华获取到通知,当前bug级别为2小强获取到通知,当前bug级别为2
可以看出,当Bug的级别不同的时候通知的人是不一样的,一级时只通知小华,二级的时候会通知小华和小强。
好了,这就是观察者模式的全部内容了。
以上就是我的世界观察者怎么用指令?我的世界指令大全的详细内容,希望通过阅读小编的文章之后能够有所收获!更多请关注喜价游戏网其它相关文章!
如若转载,请注明出处:https://www.xijia.cn/youxi/40339.html